하둡 설치 후 꽤 오랜 시간이 흘렀다.

그간 회사 업무가 바쁜 것도 있었지만 엄청나게 간단하다면 간단한 zookeeper와 HBase의 설치와 설정에서

생각 외로 많은 시간을 잡아먹었다.


그사이 Streaming API를 통해 축적한 트위터 데이터는 53Gb에 이르고 있다.

얼른 HBase를 설치하여 담아야 하는데…


사실 zookeeper와 HBase의 경우 너무서 설치와 설정이 간단해서 오히려 많은 자료들을 참조한 것이 

더 혼란을 가져왔다. 디테일한 차이가 얼마나 영향을 끼치는지 모르는 상황에서는 이것저것 다 해볼 수밖에

없기에 시간도 그만큼 많이 걸리고…


암튼 시행착오의 역사를 적는다…-.-


1. zookeeper를 설치하지 않다!


우선 HBase 완벽가이드를 참조해서 설치를 시작했는데…이 책이 완벽하지 않은 것인지 내가 띄엄띄엄 읽은 것인지

이 책의 설치 관련 챕터에는 zookeeper 설치에 대한 이야기가 없다.


띄엄띄엄 읽은(이편이 신빙성 있겠지…-.-) 나는 덜렁 HBase만을 설치한 후 설정과 실행단계에까지 진행을 했다.

물론 정상 실행될리가 없다.


jps를 이용해 실행되고 있는 프로세스들을 확인해본 결과 정상 상태라면 QuorumPeerMain이 떠있어야 하는데

나는 MasterQuorumPeer던가 하는 이상한 놈이 떠있었고 나는 그저 속편하게 내 주키퍼의 버전이 최신이어서

그런가보다 하고 엉뚱한 곳에서 원인을 찾고 있었다.


2. zookeeper를 설치하였으나 zookeeper가 실행이 안된다!


결국 우여곡절 끝에 zookeeper를 별도로 설치해야 한다는 것을 알았다.

그래서 설치를 하고 zoo.cfg도 잘 설정을하고 실행을 시켰으나…

역시나 실행이 안된다.


로그를 봐도 뭔가 접속 거부를 당했다거나, 타임아웃에 걸렸다거나…

어쨌든 뭔가 노드간에 통신이 안되고 있다는 짐작을 할 수는 있는 내용들이었으나

정확한 원인을 찾기가 쉽지 않았다. 언제나 그렇듯이 '간단한' 설정임에도 안되는 것이 생기면

무척 당황하기 마련이다.


그리고 이럴 땐…

그저 처음부터 차근차근 다시 해보는 것이 상책이다.


결국 밝혀낸 원인은 hbase.zookeeper.property.dataDir에 설정해놓은 주키퍼의 데이터 디렉토리에

생성되는 myID 파일의 값과 zoo.cfg에 설정한 주키퍼 서버 정보가 맞지 않아서 발생한 문제들이었다.


아무 생각 없이 실행시킨 주키퍼는 master 노드의 myID값을 0으로 설정하였다.

그런데 인터넷에 있는 대다수 설치 방법 안내에 보면 zoo.cfg에 다음과 같이 설정하고 있다.


#Zookeeper Servers
server.1=NAMENODE.local:2888:3888
server.2=SECONDARY-NAMENODE.local:2888:3888
server.3=DATANODE1.local:2888:3888

server.4=DATANODE2.local:2888:3888 

server.5=DATANODE3.local:2888:3888 


그리고 server.x의 x 값이 myID 파일의 값과 일치해야 한다고 설명하고 있다.

그래서 master 노드의 myID 값을 1로 바꾸고 나머지 노드들에 대해서도 순서대로 myID 파일의 값을

변경을 해주었다.


하지만 변한게 없었다.

또 몇칠을 허비한 끝에 우연히 master 노드의 myID 값은 내가 정해준 그대로 1로 되어있는데

슬레이브 노드들에서 myID 값들이 master가 0인것으로 인식되어 1, 2, 3, 4의 값들이 들어가있는 것이었다.


결국 시스템의 고집에 굴복하여 xoo.cfg의 설정을 다음과 같이 바꾸고 master의 myID도 0으로 바꾸었다.


#Zookeeper Servers
server.0=NAMENODE.local:2888:3888
server.1=SECONDARY-NAMENODE.local:2888:3888
server.2=DATANODE1.local:2888:3888

server.3=DATANODE2.local:2888:3888 

server.4=DATANODE3.local:2888:3888


그리고 드디어 zookeeper가 정상적으로 로드되었다.

zkCli.sh를 통한 테스트도 정상적으로 이루어졌다.



 3. 마지막 관문! HBase!


사실 HBase는 주키퍼 설치 이전에 상당부분 설정을 해 놓았기에 별 생각없이 실행을 시켜보았는데

역시나 정상적으로 실행이 안된다.


몇번의 시도 끝에 주키퍼가 제대로 로드되지 않아서 그런 경우를 몇번 확인하고

마지막으로 주키퍼가 정상적으로 로드된 상태에서 마지막 시도를 했는데 드디어 HBase도 정상적으로 올라왔다.

그런데 60010포트의 웹 관리 화면도 뜨지를 않고 또 hbase shell로 들어가 status 명령을 내려보니 다음과 같은

오류 메시지가 뜬다.


ERROR: org.apache.hadoop.hbase.masternotrunningexception retried 7 times


요건 뭘까…하고 또 한참을 고민하다가 hbase의 로그를 보니 다음 내용이 자꾸 올라간다.


Wating for dfs to exit safe mode…


역시 짐작대로 hadoop이 safe mode로 들어가있어서 발생한 문제였다.


hadoop dfsadmin -safemode leave로 safe mode를 빠져나가자…

드디어 HBase가 정상 작동하기 시작했다.


4. 로그 보기의 어려움


HBase와 zookeeper를 설치하다보니 로그를 많이 참조해야 했는데 어쩐 이유에서인지 ERROR 처리에

매우 인색하다는 느낌을 받았다. 대부분의 로그가 내용상은 Exception이 출력되더라도 level은 INFO나

WARN 수준이 대부분이고 가뭄에 콩나듯 ERROR가 보였다.


그러다보니 분명 Exception인데…이걸 해결하고 가야 하는 것인지 그냥 무시하고 넘어가도 되는 것인지

판단이 쉽지 않았다.


아마도 네트워크를 통해 멀티 노드를 관리하는 시스템이다보니 일시적으로 통신 장애등이 발생했다고 해서

그것을 error로 처리하기에는 무리가 있어서 그런 것이 아닐까 추측해본다.


그리고 그에 걸맞게 대부분의 문제는 노드간의 통신이 안되는 것, 특히 특정 노드에 프로세스가 로드되지 않아

발생하는 문제가 거의 대부분이었다는 것이다.


특히나 jps나 ps를 통해 프로세스를 확인하는 경우에도 분명 해당 프로세스가 보이는데 실제로는

서버가 구동되지 않는 상태인 경우가 많아 더욱 판단을 어렵게 하였다.


이런 부분만 조심한다면 사실 설치와 설정, 실행은 어렵지 않는 시스템인 것은 분명하다.


5. 다음 단계로


맥미니 5대 모으고 처음 Hadoop을 설치하여 구동시켜보고는 좋아라 하던 때가 엊그제 같은데…

벌써 해를 넘기려고 하고있다.


앞서 언급했듯이 샘플 데이터로 모으고있는 트위터 데이터도 53Gb 정도 모였고(물론 너무나 부족한 양이지만)

이제는 Map/Reduce와 HBase관련 실전 프로그래밍에 들어가야 할 시점에 이르렀다.


두 권의 완벽 가이드(Hadoop 완벽 가이드, HBase 완벽 가이드)를 통해 마지막 단계로 진입을 해야 할

시점이 된 것이다.


또 얼마나 헤매게 될지 걱정이 앞서지만 부딪쳐봐야 아는 것이고

현재 개발 중인 아이폰 앱 개발과 중복해서 하려면 시간이 만만치 않게 들게 될 것이

걱정이라면 걱정이다.

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

최초 작성일 : 2013/06/10 13:13 


역시 PPT 정리는 어렵군요...ㅠ.ㅠ

아래 이미지들은 한빛미디어의 Hadoop 완벽 가이드에 실린 내용을 재정리 한 것입니다.
=======================================================












블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

최초 작성일 : 2013/06/05 13:02 


HDFS (하둡 분산 파일 시스템)은 다음의 사항을 고려하여 설계되었다.


1. 대용량의 파일 : 수백 Mb에서 수백 Tb 혹은 Pb급 이상을 대상으로 함

2. WORM (Write Once Read Many) : 커다란 원본으로부터 데이터 셋을 만들어 그
              데이터 셋을 분석한다. 그러기 위해서는 전체 파일을 읽어야 한다.

3. 범용 하드웨어 : 고성능의 신뢰도 높은 서버가 아닌 다수의 범용 머신으로 구성된
              클러스터에서의 실행을 고려하였다.


========================================================
위 내용에 대해서는 여러 번 반복되었기에 간단하게 적고 넘어간다.

그러나 간혹 'Big'이라는 용어의 함정에 빠져 잊기 쉬운 부분들이 있다.
나 역시 BigData 관련 공부를 시작하면서 문서는 물론이거니와 이미지나 음악 및 동여상 등
개인이 소유하게되는 파일 역시 수적으로나 양적으로 점점 더 커지고 있는 상황에서
이러한 분산 파일 시스템을 개인용으로 만들어보면 어떨까 하는 생각을 해봤다.
기존의 RAID 시스템에 비해 오히려 하드웨어적으로 더 저렴하게 구현을 할 수 있을 것
같았다.

그러나 다음의 내용을 확인하고서는 조용히 생각을 접었다.
(하지만 아직 가능성은 모색 중이다.)
========================================================

HDFS가 적당하지 않은 분야

1. 빠른 데이터 액세스 / 빠른 응답 시간이 필요한 경우
 - 앞서도 나왔지만 HDFS는 대용량의 파일을 처리하기 위한 시스템이고 대체로 배치성
   작업에 적합하다.

2. 많은 수의 작은 파일들에 대한 처리
 - 네임노드는 파일들의 메타 데이터를 관리하며 이를 디스크가 아닌 메모리에 저장하여 처리한다.
   따라서 파일의 수가 많아질수록 메모리에 대한 부하가 가중되며 아직도 디스크에 비해
   가격이 비싼 메모리 관리에 문제가 발생할 수 있으며 파일의 수가 비약적으로 많아질
   경우 하드웨어에서 지원 가능한 메모리 용량을 넘어설 수도 있는 문제이다.

3. 다중 writer나 임의의 파일 수정
 - 역시 앞서 나왔듯이 HDFS는 WORM 상태를 고려하여 설계되었다.
   예를 들어 HDFS는 파일을 블럭으로 나눈 후 서로 다른 노드에 저장을 한다.
   뿐만 아니라 필요한 수 만큼의 복제본을 생성한다. 만일 이 파일에 대한 수정을
   허용한다면 파일의 수정이 생길 때마다 각 노드이 해당 블럭을 찾고 수정된 위치에
   변경 사항을 반영해야 하며 이러한 작업을 복제본에까지 적용해야 한다(혹은 변경된
   블럭들을 다시 복제해야 한다).
   얼마나 비효울적인가...

***
즉, 수십Gb에 달하는 대용량의 파일의 존재할지라도 아직도 개인의 디스크에는
많은 수의 작은 파일들이 대부분의 저장공간을 차지하고 있을 것이다.
또한 파일 성격에 따라 수시로 변경되는 파일도 많을뿐더러 이러한 파일들을
빨리 읽혀야 한다.

하지만 동영상을 중심으로하는 대용량 파일들만을 고래해보았을 때는HDFS의
기본 설계에 얼추 들어맞는 것 같다. 대용량이면서 디스크에 저장된 이후 수정이 일어날
일도 없다. 다만 빠른 접근만이 문제가 될 것이다.

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

최초 작성일 : 2013/05/30 15:24 


맵 리듀스 개요

맵 : 
- 원시 데이터를 key-value 쌍의 중간 파일로 만든다.
- 입력데이터가 있는 노드에서 맵 함수가 수행되는 것이 가장 좋다 (지역성 최적화)
- 맵 함수에 전달되는 입력 데이터는 라인 offset을 키로, 해당 라인 내용을 value로 하는 형태로 구성된다.
- 맵 함수는 이 입력값들로부터 필요로 하는 key와 value를 추출한다.
- 이 과정에서 잘못된 레코드를 제거하는 기능도 수행한다.
- 맵 task의 실행 결과는 HDFS가 아닌 로컬 디스크에 저장된다. (HDFS와 로컬 디스크의 개념을 명확히 구분하자)
  이유는 맵의 결과물은 단지 리듀스 함수로 전달하기 위한 중간 결과물일 뿐이며 모든 잡이 완료되면
  버려도 되는 데이터이기 때문이다.

리듀스 : 
- 각 맵 task들의 결과물들을 입력으로 받아 최종 결과물을 생성한다.
- 각 노드에 있는 맵 task의 결과물들을 입력으로 받으므로 지역성 최적화의 영향이 없다.
- 리듀스의 결과물은 안정성을 위하여 HDFS에 저장된다.


셔플 : 
- 맵 task의 결과물을 리듀스 task로 보내기 전의 중간 가공 단계
- key에 대한 정렬이나 그룹화 및 파티셔닝 작업이 이루어진다.
- 정렬은 말 그대로 정렬이며 그룹화는 같은 key로 묶는 것, 그리고 파티셔닝은 리듀스 task가 2개 이상인 경우
  결과물을 각각의 리듀스 task에 분배하기 위해 특정 기준으로 쪼개는 작업이다.
- 때때로 셔플 작업이 없을 수도 있으며 이런 경우에는 리듀스 task도 없는 맵 task만으로 이루어진
  job이 수행된다. 또한 이 상태에서는 맵 task의 결과가 HDFS에 저장된다.

컴바이너 : 
- 맵 task의 결과물을 네트워크를 통해 리듀스 task로 이동시키는 과정을 최적화하기 위한 방법 중 하나
- 같은 key를 가진 value들을 리스트로 묶어 새로운 key-value쌍을 만든다.
  즉 {key1, value1}, {key1, value2}를 {key1, list(value1, value2)}의 형태로 만드는 것이다.
- 주로 연합 연산(합계, 카운팅, 최대값 등)에 사용된다.
- 컴바이너를 사용하게 되면 맵 task 결과물의 사이즈를 줄일 수 있다. 즉 네트워크의 트래픽량을 줄일 수
  있게 되는 것이다.

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

최초 작성일 : 2013/05/30 09:41


이 글은 네이버 맥부기 카페에 적은 글을 옮겨온 것입니다.

지극히 개인적인 이야기니까 참고하세요...^^;;;


===================================================================================


어느덧 IT밥 먹은지도 11년차에 이르고있네요.

그래봐야 절반가량을 SM으로 있다보니 사실 제 경력에 갖춰야 할 많은 것들이

아직 모자랍니다.


각설하고!


11년 일을 해오는 동안 느낀 것이 있다면

다른 분야도 다르지 않겠지만 특히 이 IT 분야는 상당히 폭넓은 지식을 가지고 있어야 한다는 것이

매우 중요하게 느껴졌습니다.


이 것은 IT기술을 이해하는 '깊이'와 '폭'의 문제가 아닙니다.

'한 우물을 파라'든가 '관련 기술을 폭넓게 알아야 한다'든가 하는 문제가 아니라는 것이죠.


하다보면 어쩔 수 없이 이것저것 알아갈 수 밖에 없습니다.

간단한 예로 자바 개발자라 하여 WAS나 DBMS를 싹 무시하고 작업할 수는 없습니다.

마찬가지로 TA나 DBA라 할지라도 JAVA 언어의 기본적인 Exception 정도는 알아야 문제가 발생했을 때

원인 소재를 찾을 수 있겠지요.


심지어는 IT가 아닌 '업무' 또한 필수에 가까운 지식이니까요.


출발은 이렇습니다.

여기에 트렌드가 영항을 미친것이죠.


제가 처음 아이폰 앱 개발을 시작할 당시(2010년, 그 때도 이미 늦은 타이밍이었지요)만 해도 아직

앱 개발만으로 대박을 노려볼 수 있었던 시기였다고 봅니다.

그래서 시작한 것이구요.


하지만 3년이 지난 지금...

솔직히 말해 저는 실패했습니다...ㅠ.ㅠ

하지만 남은 게 없는 실패는 아니었습니다.


그래도 새로운 분야(아이폰 앱 개발, 그전엔 자바 개발자였습니다)에 도전을 시작하고 보니

새로운 많은 것들이 보였습니다.

새삼 많은 것들이 빠르게 변화하고 있다는 사실을 깨달았습니다.

내가 하고 있는 일을 좀 더 객관적인 시각에서 볼 수 있었죠.

금전적인 문제까지 포함해서...^^;;;


그 깨달음 이후 3년, 실패한 현 시점에서 제 일에 대해 다시 정리할 필요를 느꼈습니다.

그리고 내린 결정은 '개인 개발자로서 앱 개발에 올인하는 것은 무리다'라고

(사실 게임 카테고리에만 한정짓는다면 아직도 가능성은 많다고 생각합니다만 그 밖의 카테고리에서는 역시...)


잠시 과거로 돌아가보면 PC에서 소프트웨어의 흐름은 Application -> Service(인터넷을 이용한)라고 크게

볼 수 있겠습니다. 그리고 모바일에서도 벌써 오래 전에 이런 변화가 생겨버렸구요.

비록 모바일 앱/웹이 아닌 네이티브 앱으로 만들어진 앱일지라도 그 뒤에 서비스가 뒷받침 되지 않는다면

금방 그 한계가 드러나버립니다.

이제는 서비스를 이용하지 않는 앱을 찾기조차 힘들정도지요...


결국 '서비스'라는 요소와 그 서비스를 구성하는 백엔드의 인프라나 컨텐츠와 같은 요소를

깊이 고려하지 않는다면 제대로 된 앱을 만들기 어려운 시점이 된 것입니다.


웹 개발자가 TA나 DBA와 소통을 해야 하듯 앱 가발자도 TA나 DBA오 소통을 해야 하는 상황인 것입니다.

그러기 위해서는 그 분야에 대한 최소한의 지식은 갖추고 있어야 한다고 보여집니다.


더군다나 저같이 40대를 넘긴 사람들에게는 사람들이 막연한 기대를 합니다.

큰 그림을 보면서 판을 짤 줄 아는 능력을 기대합니다.

거기에 능숙한 개발 스킬은 필수죠.


결국 이러한 요소들이 제 시선을 다른 곳으로 돌리게 만들었고

그 시선에 걸린 것이 바로 '빅데이터'라는 이슈였죠.


새삼 '빅데이터'라는 새로운 개념을 들이 대지 않더라도 IT하는 사람들이면 데이터의 중요성은 잘 알고 있습니다.

IT가 뭔가요? 다 데이터 처리하고 분석해서 보여주자고 하는 일이  IT죠...^^


그런데 이제 그게 커져버리고 형태도 다양화 되다보니 새로운 패러다임이 필요하게 된 것이고

그래서 관련 기술들이 각광을 받게 되는 것이고...


이건 뭐 트렌드고 뭐고를 떠나서 당연한 진화의 과정이고 당연히 걸어야 할 길인 것처럼 보이더군요.

그래서 빅데이터 관련 프레임워크 중 가장 유명하고 널리 쓰이는 하둡을 공부하기로 마음 먹은 것입니다.


잡설이 좀 길었네요.

불필요한 내용이 될지는 모르겠지만 하둡 학습을 위한 제 계획을 간단하게 적어보겠습니다.


우선 간단하게 네임노드 1대와 데이터노드 1대로 구성한 아주 조촐한 클러스터에서 하둡 설치와

샘플 예제(word count)를 돌려보는 것 까지는 진행을 해보았습니다.

하지만 뭔가 아쉬워 현재 맥미니 한 대를 더 추가하여 제일 사양이 좋은 맥북프로를 네임노드로

그리고 맥미니 2대와 펜티엄 4급 PC 2대를 데이터 노드로 하는 클러스터를 구성하여 본격적인

학습을 시작하려고 하고있습니다.

모든 노드를 맥미니로 하고 싶지만 비용이...^^;;;

맥미니를 선호하는 이유는 아이폰 앱 개발자이어서기도 하지만 맥미니의 탁월한 절전 기능 때문입니다.

스펙상으로는 sleep시 1.6W정도 아이들시는 11W정도 풀로드시는 80W 정도더군요.


현재 교재는 예전에 사둔 한빛미디어의 Oreilly판 Hadoop 완벽 가이드와 네이버에서 이북으로 구매한

책 한 권을 참고하고 있구요.


그리고 저는 개발자이기 때문에 사실 SA나  TA의 역할에 해당하는 클러스터 구성이나

시스템 설정등은 너무 깊이 들어갈 필요가 없다고 생각합니다. 하둡의 반쪽인 MapReduce를 통한

데이터 분석쪽에 집중해야겠죠.


그 과정에서의 제약사항은 개인 개발자가 얻을 수 있는 BigData는 거의 없다고 봐도 된다는 것입니다.

하지만 그래도 방법은 있습니다.


첫째 하둡의 창시자인 더그 커팅이 하둡 이전에 진행하던 프로젝트인 nutch를 이용하는 것입니다.

nutch에 포함된 웹크롤러를 통해 무작위 데이터를 무작정 쌓는 것이죠...^^;


둘째는 트위터입니다.(API가 공개된 다른 SNS도 가능하겠죠)

이미 twitter API는 많이 써보기도 했고 또 쓸만한 라이브러리도 많이 돌아다니고...

처음에는 특정 계정의 트윗들을 모아보려고 했는데 계획을 좀 수정해서 특정 검색어에 의해

검색된 트윗들을 분석해보려 합니다.


계획은 이렇지만 갈길이 멉니다.

그냥 '하둡'으로 통틀어 말했지만 관련해서 필요한 프레임워크들만해도 HBase나 Hive, Pig 등등 많고

아직 아는 것은 빙산의 일각이고...


여기다 회사 업무나 개인 앱 개발까지 겹치면....

과연 성공할 수 있을지 의문이네요...^^;;;


쓰잘데기 없이 글이 길어졌네요.

혹시 여기까지 다 읽으셨다면...진심으로 감사드립니다...^^

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

최초 작성일 : 2013/05/28 12:56


일단 현재 개발 중인 아이폰 앱 완성을 눈앞에 두고 앱 개발에 치중을 하고 있고,
또 몇몇 사정으로 한 동안 공부다운 공부를 못해 오늘은 잡설로 때운다...ㅠ.ㅠ

잡설 1 : 교재 선택의 실수...

원래는 지금 잡설을 쓰고 있을 시점이 아니지만 예기치 않은 문제가 발생을 하여
어쩔 수없이 이런 심심풀이 뻘글을 쓰고 있다.

네이버 북스에서 '대용량 데이터 분석 및 처리를 위한 Hadoop NoSQL'이라는 책을
e-Book으로 구매를 하였다. 얼마간 잘 읽었는데 갑자기 글자가 겹치거나 빈 페이지가
삽입되어있는 증상이 나타났다. 결국 야심차게(?) 지른 e-Book을 통한 학습이
중단되고 네이버 고객 센터에 문의를 하였더니 자기들도 알고 있었던 문제라 한다.
원하시면 환불해드리겠다고...

귀차니즘에 환불은 됐고 대체 어느정도 분량이나 그런 문제가 생긴거냐 했더니
거의 1/3이 그렇단다...

이정도면 고객이 문의를 해올 때까지 기다릴게 아니라 전면 리콜을 해야 하는거 아닌가?
하여간 정이 안가는 네이년이다...

암튼 그래서 잠시 학습이 중단되고 이렇게 뻘글을 쓰게 된 것이다.


잡설 2 : 하드웨어 구성에 대해

앞서 몇몇 글에서 내가 가진 시스템들을 어떻게 구성할 것인지에 대해 잠깐씩 언급했었다.
현재 회사에 맥이 2대, 집에 맥이 1대 요렇게 3대로 클러스터를 구성해보려고 했는데
회사와 집이 같은 네트워크 대역으로 묶일 수 없음으로 해서 결국 앞서 하둡 설치 및
테스트는 회사의 2대만 가지고 진행을 하였다.

뭐 가상 환경에서도 테스트 하는데 네임노드 1대와 데이터노드 1대 정도 있으면 준수한
환경이긴 하나...역시 뭔가 아쉽다.

최종적으로는 회사의 맥북 프로를 집으로 가져오고 기회 닿는대로 맥미니 1대를 추가
구입하여 집에서 썪고있는 펜티엄4급 PC 2대와 함께 네임노드 1대와 데이터노드 4대로
구성된 클러스터를 만들어볼 생각이다.

그렇게되면 클러스터가 이기종으로 구성되는데다가 노드간의 성능 편차도 커지게 되어
어떤 문제가 생길지 모르겠으나 배우는 입장에서는 문제가 생기면 생길수록 좋지 않겠는가...^^?

참고로 집에 놀고 있는 펜티엄 PC는 CPU가 펜티엄4 2.4Gh, 램 2Gb, HDD 80Gb정도로
참 소박한(?) 구성이며 현재 뭔 생각으로 설치한 지는 모르겠지만 한 놈은 페도라15가,
또 한놈은 Cent OS 5.X가 설치되어있다.

사실 개발자로 일할 놈이 굳이 이렇게 인프라에 신경을 써가면서 공부할 것은 없지만
그래도 기왕 할 거면 재밌게 하면 좋지 않겠는가^^?

그래도 Hadoop이라는 첨단이라면 첨단의 기술을 구현할 시스템을 세팅하는 것이
tomcat같은 was를 설치하고 설정하는 것보다 더 쉽다는 것은 정말 대단한 일이
아닐 수 없다.


잡설 3 : SETI@home

내가 알고 있는 '분산'이라는 이름으로 부를 수 있는 시스템으로 제일 처음 접한 것은
SETI@home이었다.

아는 사람들은 알겠지만 SETI 프로젝트는 지적 외계 생명체를 찾는 천문학 프로젝트로
조디 포스터 주연의 Contact라는 영화에서도 등장한다.

이 SETI@home 프로젝트는 일반인들이 사용하는 PC를 이용하며 자원자들의 PC에
연산을 위한 프로그램을 내려받게 하고 사용자들의 PC 유휴 시간에 이 프로그램을
동작시켜 데이터를 연산한 후 서버로 보내고 다시 새로운 데이터를 사용자 PC에 받아
연산하는 식으로 대용량 데이터를 처리하는 방식이다.

애초에 교재로 삼기로 했던 한빛미디어의 'Hadoop 완벽 가이드'에 이 SETI@home과
하둡을 잠깐 비교한 내용이 있길래 잠시 언급을 해보았다.

책에서도 하둡과 SETI@home은 상당히 다르다고 설명을 하긴 했지만 짧은 생각에
애초에 분산/분할 처리라는 점 외에는 비교 대상이 될만한 것이 없어보인다.

하둡과 관련은 없지만 SETI@home에 대해 조금 더 말해보자면 나는 꽤 오래전부터
간헐적으로 이 SETI@home 클라이언트를 다운로드 받아 참여해보았는데
목적은 그저 단순했었다. SETI@home이 수행될 때 스크린세이버로 뜨는 분석 그래프가
정말 내 컴퓨터가 뭔가 대단한 일을 하는구나 하는 느낌을 받게 해주었기 때문이다.

그리고 한동안 안하다가 오늘 책을 읽으면서 문득 생각나 다시 한 번 클라이언트를
다운로드 받아 설치를 해보았다. 다행히 맥용 클라이언트도 있어 설치를 하였는데...
세상에 그 사이에 많은 프로젝트들이 하나의 클라이언트로 묶여 배포되고 있었다.

세어보니 45개 정도의 프로젝트가 SETI와 동일한 방식으로 진행되고 있었다.
아래 그림은 이 프로젝트를 통합관리하는 BOINC라는 프로그램의 프로젝트 선택 화면이다.




나는 이 프로젝트들 중 예전부터 해왔던 SETI@home을 선택을 하였고 그 진행 화면은
아래와 같이 표시되었다.




중간 쯤의 태스크 명령이라는 버튼을 통해 그래픽 보기를 선택하면 예의 그 화려한 처리
그래프를 볼 수 있다.

그런데 예전에도 그랬나? 아니면 매킨토시라서 그런가?
이 연산을 수행할 때 CPU 점유율이 장난 아니다. 작업을 실행시키자마자 내 맥북프로는
아래와 같은 상태가 되었다.







이거 정말 컴퓨터 놀 때나 실행시켜야지 실행시키고서는 아무 것도 못하겠다...-.-

암튼 오늘도 이렇게 잡설로 때우고
네이버 북스는 6월이나 되어야 오류가 수정된다고 하니 일단 당분간은 하둡 완벽 가이드로
공부를 진행해야 할 것 같다.

6월 4일경 사내에서 빅데이터 세미나를 한다는데 가보고는 싶지만 멀어서 원...
세미나 자료만 좀 달라고 해놨다...-.-

암튼 내일부터는 다시 공부좀 하자...

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

Tag SETI@Home

최초 작성일 : 2013/05/21 13:01 


이 글에 적는 내용은 2013년 1월 3일 길벗사에서 간행한

'대용량 데이터 분석 및 처리를 위한 hadoop nosql' (서상원김재홍박윤성이준섭명재석 저)의
전자책 버전에서 발췌한 내용입니다.
중요한 내용이 있을 때마다 이러한 정보들을 정리해 올리도록 하겠습니다.

==========================================================

1. 하둡은 크게 HDFS와 MapReduce의 두 부분으로 구성되어있으며
   HDFS는 네임노드, 세컨더리 네임노드, 데이터노드를 동작시키고
   MapReduce는 잡 트래커와 태스크 트래커를 동작시킨다.

   네임노드와 잡 트래커는 마스터 노드(네임노드)에서, 데이터노드와 태스크 트래커는
   슬레이브 노드(데이터노드)에서 동작한다.

   동작하는 프로세스는 jps 명령으로 확인할 수 있다.

2. 하둡 분산 파일 시스템(HDFS)는 다수의 작은 파일보다는 소수의 대용량 파일을 다루는데
   적합하도록 설계된 파일 시스템이다.

3. 하둡에서 각 노드들의 프로세스를 기동하기 위해 SSH를 사용한다. 수 백, 수 천대로
   구성된 클러스터의 경우 일일히 각각의 서버에서 프로세스를 기동할 수 없기 때문에
   네임노드에서 기동을 시키면 클러스터 내의 모든 슬레이브 노드에서 프로세스가 기동이
   되는 데, 이 때 SSH를 사용하여 명령을 전달하게 된다.

4. 하둡이 파일을 블록으로 나누어 저장하는 이유
   - 파일 시스템에 따라 한 개의 파일이 가질 수 있는 최대 크기에는 제약이 있다.
      블록으로 나누어 저장하면 이러한 제약을 피해서 대용량 파일을 저장할 수 있다.
   - 대용량 파일을 하나로 저장할 경우 파일을 읽기 위해 메모리로 로드하는데 부하가
      걸린다. (Gb급 로그 파일을 편집기로 열지 못하는 경우를 생각해보자) 블록으로
      나루면 이러한 문제가 해소된다.

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

최초 작성일 : 2013/05/20 13:15 


일단 설치와 설정을 끝마쳤다고 생각하고 샘플 job을 수행해보기로 했다.
하지만 아래의 명령을 실행시켜도 map:0% reduce:0%에서 더이상 진행이 없었다.

예제 실행 코드

./hadoop jar ../hadoop-examples-1.0.4.jar wordcount input output

input : 원본 문서가 있는 곳
output : 결과 문서가 저장될 곳

아직도 분산이라는 환경에 익숙하지 않은 탓에 계속 네임노드쪽 로그만 뒤적거리면서 원인을 찾으려고 했다.
하지만 네임노드쪽 로그에는 딱히 이렇다할 에러도 기록된 것이 없어 원인을 찾은데 시간만 잡아먹고 있었다.

그러다가 데이터노드 쪽으로 관심을 돌려 데이터노드의 로그를 살피기 시작했고 여기서 문제의 실마리가
잡히기 시작했다.

우선 데이터노드에서 jps 명령을 통해 TaskTracker가 로드되지 않았다는 사실을 확인했다.
그리고 바로 hadoop-mazdah-tasktracker-macmini-server.com.log 파일에서 다음과 같은 로그를
발견했다

이 로그의 ERROR 항목 바로 직전에 나오는 WARN 내용으로부터 디렉토리 설정에 뭔가 문제가 있다는 것을
짐작하고 처음 글에서 잠시 언급한 것 처럼 이 디렉토리도 모든 노드들 간에 경로를 일치시키기로 했다.


처음 디렉토리 설정이 맞지 않았을 때의 오류 로그

************************************************************/
2013-05-20 11:27:20,495 INFO org.apache.hadoop.mapred.TaskTracker: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting TaskTracker
STARTUP_MSG:   host = macmini-server.com/134.102.35.58
STARTUP_MSG:   args = []
STARTUP_MSG:   version = 1.0.4
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1393290; compiled by 'hortonfo' on Wed Oct  3 05:13:58 UTC 2012
************************************************************/
2013-05-20 11:27:20,657 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2013-05-20 11:27:20,710 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.
2013-05-20 11:27:20,711 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2013-05-20 11:27:20,711 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: TaskTracker metrics system started
2013-05-20 11:27:20,979 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered.
2013-05-20 11:27:25,144 INFO org.mortbay.log: Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
2013-05-20 11:27:25,190 INFO org.apache.hadoop.http.HttpServer: Added global filtersafety (class=org.apache.hadoop.http.HttpServer$QuotingInputFilter)
2013-05-20 11:27:25,220 WARN org.apache.hadoop.mapred.TaskTracker: TaskTracker local dir /Volumes/Data2/hadoop-data/mapred/local error can not create directory: /Volumes/Data2/hadoop-data/mapred/local, removing from local dirs
2013-05-20 11:27:25,221 ERROR org.apache.hadoop.mapred.TaskTracker: Can not start task tracker because java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at org.apache.hadoop.mapred.TaskTracker$LocalStorage.checkDirs(TaskTracker.java:211)
at org.apache.hadoop.mapred.TaskTracker.<init>(TaskTracker.java:1449)
at org.apache.hadoop.mapred.TaskTracker.main(TaskTracker.java:3742)

2013-05-20 11:27:25,222 INFO org.apache.hadoop.mapred.TaskTracker: SHUTDOWN_MSG:


각각의 설정 파일에서 다음과 같이 value를 통일시켰다.
몰론 네임노드와 데이터노드의 실제 물리적 공간도 /hadoop-data로 맞추었다.

core-site.xml

<property>
        <name>hadoop.tmp.dir</name>
        <value>/hadoop-data/tmp</value>
    </property>
   
hdfs-site.xml

<property>
     <name>dfs.name.dir</name>
        <value>/hadoop-data</value>
    </property>

    <property>
        <name>dfs.data.dir</name>
        <value>/hadoop-data</value>
    </property>
   
mapred-site.xml

<property>
         <name>mapred.system.dir</name>
         <value>/hadoop-data/mapred/system</value>
    </property>
    <property>
     <name>mapred.local.dir</name>
        <value>/hadoop-data/mapred/local</value>
    </property>
   

그리고 각 노드간 변경된 설정들을 sync 시킨 후 다시 start-all.sh를 실행시켰다.
그러나 여전히 문제가 발생을 하였다. 이번엔 jps 명령어를 통해 확인하니 데이터노드쪽에서 DataNode 프로세스가
로드되지 않았고 hadoop-mazdah-datanode-macmini-server.com.log 파일을 확인하니 다음고 같은 로그가
찍혔다.

************************************************************/
2013-05-20 12:28:44,171 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting DataNode
STARTUP_MSG:   host = macmini-server.com/134.102.35.58
STARTUP_MSG:   args = []
STARTUP_MSG:   version = 1.0.4
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1393290; compiled by 'hortonfo' on Wed Oct  3 05:13:58 UTC 2012
************************************************************/
2013-05-20 12:28:44,307 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2013-05-20 12:28:44,317 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.
2013-05-20 12:28:44,317 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2013-05-20 12:28:44,317 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: DataNode metrics system started
2013-05-20 12:28:44,403 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered.
2013-05-20 12:28:52,800 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /hadoop-data: namenode namespaceID = 1440344326; datanode namespaceID = 1690373933
at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:232)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:147)
at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:385)
at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:299)
at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1582)
at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1521)
at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1539)
at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1665)
at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1682)

2013-05-20 12:28:52,802 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG:


이 내용은 구글링을 통해 쉽게 해결하였다.
위에서 디렉토리 경로를 바꾸면서 기존 생성했던 디렉토리를 새 위치로 그냥 카피를 했던 것이다.
즉 /hadoop-data라는 디렉토리 안에 기존에 생성된 설정들이 그대 담겨있었다. 이로 인해 문제가 발생을 한 것이었고
/hadoop-data를 싹 비우고 새로 실행하니 드디어 wordcount 예제가 실행이 되었다.

역시 아직은 분산이라는 환경에 익숙하지 않은 탓에 사소하면서도 쉽게 해결하지 못하는
문제들이 많이 발생을 한다. 이 부분은 이론적인 학습을 통해 보충을 하는 수 밖에 없을 것 같다.

그리고 이번 글에 같이 적으려던 놀고먹게된 맥미니에 대한 이야기는 별도로
작성하려 한다.

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

최초 작성일 : 2013/05/16 13:37


미리 말씀드리지만 이 글은 설치 안내가 아니라 설치 중에 실수할 수 있을만한 부분에 대해

적은 글입니다. 설치 전반에 대해 참고한 글은 본문 중에 링크를 하였으니 참고하세요...^^


=========================================================


원래는 교재와 함께 천천히 실습을 진행할 계획이었는데…

지난 한 달 간 되지도 않는 영어실력으로 문서 번역한다고 삽질을 해놨더니 조급증이 생겨서

우선 하둡부터 설치를 하고 봤다.


애초 예정대로 대상 머신들은 모두 애플의 맥 기종으로 맥북 프로1대 맥미니 서버 1대 맥미니 1대이며

이 중 맥북프로와 맥미니 서버는 같은 네트워크 대역에 있으나 맥미니 1대는 다른 네트워크 대역에 있다.

다음 글에 언급하겠지만 역시나…맥미니는 클러스터로 묶일 수가 없다…ㅠ.ㅠ

(이거 해볼라구 따로 구입한 놈인데…제 역할을 못하게 됐다…ㅠ.ㅠ)


우선 설치는 무진장 쉽다.

개나 소나 할 수 있다.

개나 소가 컴퓨터를 이용할 수 있다는 가정하에…-.-


암튼 다운로드 받고 압축 풀고 java home 잡아주고 설정 xml파일 3개정도 만져주면 끝이다.

우선 도움을 받은 사이트를 링크한다.

많지도 않다.

요기만 잘 보고 진행하면 만사 땡이다.


http://blrunner.com/29

http://develop.sunshiny.co.kr/868

http://develop.sunshiny.co.kr/893


하지만…

중요한 함정이 도사리고 있었다.

앞서 구글의 논문을 번역하는 가운데 구글 애들이 매우 자주 강조한 내용이 있었다.

'MapReduce 라이브러리는 병렬이나 분산 시스템에 대한 경험이 없는 개발자들도

쉽게 접근할 수 있다'는 것이다.


그러나 이 쉽게 접근할 수 있다는 의미는 좀 더 구체적으로 말하면

'(얼마간의 혹은 꽤 오랜 시간 삽질을 거치게 되면) 쉽게 접근할 수 있다'라는 것이다.


대체로 분산 시스템이라는 것이 물리적으로 다른 공간에 위치한 머신들 사이에 동일한 프로세스를

마치 동일하 머신상에서 수행하는 것 처럼 처리할 수 있다는 의미일 것이다.

하지만 이러한 분산 시스템을 위해 먼저 알아 두어야 할 것이 바로 '물리적으로 분리된 공간'이라는 점이다.

이 것은 시스템의 환경을 설정할 때 뜻하지 않은 실수를 하게 만든다.

바로 호스트명 또는 서버 주소를 설정하는 부분에서 발생을 하게 되는 것이다.


오늘의 실수를 통해 이야기 해보자.


우선 Hadoop은 Standalone모드와 Pseudo-distributed모드 그리고 Fully-distributed모드로

실행할 수 있다. 각각의 모드는 특별이 데몬을 띄울 때 옵션이 있거나 한 것이 아니라 위 링크에

설명되어있는 설정파일을 어떻게 설정을 하느냐에 따라 달라진다.


Standalone : 모든 설정파일을 초기 상태로 비워둔채로 하둡을 실행한다. map/reduce 프로그램을

                       신속하게 개발/디버깅하기 위해 사용된다.

Pseudo-distributed : 모든 설정 파일에 각 노드의 주소를 모두 localhost로 입력한다. 단일한

                       머신 내에서 가상으로 분산 환경을 만들 때 사용된다.

Fully-distributed : 모든 설정 파일에서 각 노드의 주소는 실제 부여된 IP나 도메인 또는 hosts 파일에

                       등록된 이름을 사용해야 하며 각각의 머신들은 실제로 분산되어있어야 한다.


내가 처음 참조한 설치 방법에 대한 블로그는 http://blrunner.com/29였다.

그런데 이 블로거는 Pseudo-distributed로 실행할 것을 전제로 하여 설명을 하고 있다.

그런데 나는 Fully-distributed를 목표로 진행을 하고 있었다. (그래서 피같은 돈 들여 맥미니까지 추가

구매를 하였다. 근데 그놈은 현재 놀고있다…ㅠ.ㅠ)


아무 생각 없이 따라하다보니 하둡 설정이 모두 Pseudo-distributed에 맞춰진 것이다.

여기서 첫 번째 실수가 있었다.


다음으로는 원래 분산 시스템이란 것이 그런가 모르겠는데

각 머신들간의 동기화를 위해서인지 하둡 자체가 동일한 경로에 설치가 되어야한다는 것을

나중에 알았다.(혹은 위치가 달라도 설정만 별도로 해주면 되는지도 모르겠다. 아직 모르는게

더 많아서…^^;;;)


즉 A 머신의 하둡 설치 경로가 /home/mazdah/hadoop-1.0.4였다면

B 머신의 하둡 설치 경로도 /home/mazdah/hadoop-1.0.4여야 한다는 것이다.


꼭 이렇게 하지 않아도 될지 모르지만 개인적인 생각에 시스템을 아예 처음 설치하는 것이라면

디스크 볼륨 등을 통일해서 이렇게 같은 경로에 설치하는 것이 관리적인 차원에서 좋을 것 같다.


이미 다른 시스템들이  잔뜩 설치된 곳에서는 디스크 볼륨명을 함부로 바꾸기도 쉽지 않고

여러모로 헷갈릴 듯싶다.


아래는 머신간에 하둡 설치 위치가 달랐을 때와 설치 위치가 같았을 때 start-all.sh를 실행한

콘솔 메시지 내용이다.


xxx와 yyy 머신은 데이터 노드이고 localhost는 네임노드이다.

현재 /Volumes/Data2/hadoop-1.0.4로 표시되는 것은 처음 설치한 네임노드에서의 하둡 설치

위치(HADOOP_HOME)이다.


이 중 xxx 시스템의 설치 위치를 네임노드와 일치시켰더니 이후 실행 시 xxx 머신에서는

No such file or directory 메시지가 나오지 않게 되었다.


하지만 yyy노드이 경우 이미 다른 웹 시스템 및 SVN과 CI용으로 젠킨스 등이 설치된 상태라 함부로

디스크 볼륨명을 수정하기가 어려웠다. 그래서 3대의 시스템 모두 설치 위치를 /hadoop-1.0.4로

옮겨버렸다. 참으로 심플한 결정이었다…-.-


네임노드와 데이터 노드의 하둡 설치 위치가 달랐을 때


Mazdah-ui-MacBook-Pro:bin mazdah$ ./start-all.sh

starting namenode, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-namenode-Mazdah-ui-MacBook-Pro.local.out

xxx.xxxxx.xxx: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

yyy.yyyy.yyy: bash: line 0: cd: /Volumes/Data2/hadoop-1.0.4/libexec/..: No such file or directory

yyy.yyyy.yyy: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

localhost: starting secondarynamenode, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-secondarynamenode-Mazdah-ui-MacBook-Pro.local.out

starting jobtracker, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-jobtracker-Mazdah-ui-MacBook-Pro.local.out

xxx.xxxxx.xxx: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

yyy.yyyy.yyy: bash: line 0: cd: /Volumes/Data2/hadoop-1.0.4/libexec/..: No such file or directory

yyy.yyyy.yyy: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory


Mazdah-ui-MacBook-Pro:bin mazdah$ ./stop-all.sh

stopping jobtracker

yyy.yyyy.yyy: bash: line 0: cd: /Volumes/Data2/hadoop-1.0.4/libexec/..: No such file or directory

yyy.yyyy.yyy: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

xxx.xxxx.xxx: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

stopping namenode

yyy.yyyy.yyy: bash: line 0: cd: /Volumes/Data2/hadoop-1.0.4/libexec/..: No such file or directory

yyy.yyyy.yyy: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

xxx.xxxx.xxx bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

localhost: stopping secondarynamenode


네임노드와 데이터 노드의 하둡 설치 위치가 같아진 후


Mazdah-ui-MacBook-Pro:bin mazdah$ ./start-all.sh

starting namenode, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-namenode-Mazdah-ui-MacBook-Pro.local.out

xxx.xxxx.xxx: starting datanode, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-datanode-localhost.out

yyy.yyyy.yyy: bash: line 0: cd: /Volumes/Data2/hadoop-1.0.4/libexec/..: No such file or directory

yyy.yyyy.yyy: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory

localhost: starting secondarynamenode, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-secondarynamenode-Mazdah-ui-MacBook-Pro.local.out

starting jobtracker, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-jobtracker-Mazdah-ui-MacBook-Pro.local.out

xxx.xxxx.xxx: starting tasktracker, logging to /Volumes/Data2/hadoop-1.0.4/libexec/../logs/hadoop-mazdah-tasktracker-localhost.out

yyy.yyyy.yyy: bash: line 0: cd: /Volumes/Data2/hadoop-1.0.4/libexec/..: No such file or directory

yyy.yyyy.yyy: bash: /Volumes/Data2/hadoop/bin/hadoop-daemon.sh: No such file or directory


첫 날부터 너무 긴 내용을 적으면 이후 진행에 애로 사항이 꽃피는데…

암튼 처음 설치다보니 삽질이 적지 않았다. 하지만 반나절 정도 삽질하고 네임노드와 데이터 노드가 정상적으로

연결된 것을 볼 수 있었으니 그리 나쁘진 않은 성적인 것 같다.

구글 아자씨들 말대로 쉽긴 쉬운가보다.

(컴퓨터를 할 줄 아는) 개나 소나 할 수 있으니…^^;;;


암튼 오늘인 여기까지

다음에는 아직 못돌려본 샘플 프로그램을 좀 돌려보고 부가적으로다가

혼자 놀게된 맥미니가 왜 혼자 놀게 되었는지(당근 네트워크 대역이 다르니…-.-)

또 거금을 들여 구입한 맥미니를 그냥 놀게 둘 수는 없으니 어떻게 활용할지에 대해 다뤄보자.

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

최초 작성일 : 2013/05/15 13:28 


앞서 용어 정리도 해보았고

또 없는 실력에 구글의 MapReduce에 대한 논문도 한 편 번역을 해 보았다.
이제 실습을 진행할 단계인데...여전히 지식은 부족하다.
해서 교재가 한 권 필요한데...우선 현재 보유하고 있는 Hadoop 관련 서적이 한 권
있어서 이 책을 기반으로 실습을 진행하려고 한다.

교재

제목 : Hadoop 완벽 가이드
저자 : 톰 화이트
역자 : 심탁길, 김우현
출판사:O'REILLY, YAHOO RESS, 한빛미디어
초판 발행일 : 2010년 5월 30일

일단 발행일이 2010년이라 좀 오래된 감은 있지만 기본 적인 내용에 대한 변화는
없으리라 믿고 일단 진행한다. 우선 이 책을 진행 하다가 현재의 버전과 차이가
많이 난다면 그 때 새 교재를 고려해 볼 것이다.

하드웨어

다음은 하드웨어적인 준비인데 현재 내가 개인적으로 전용할 수 있는 시스템은
애플의 MAC 3대이다. 맥북프로 1대 맥미니 서버 1대 맥미니 1대
MAC으로 시스템을 구성한 이유는 일단 현재는 내가 아이폰 개발을 주력으로
하고 있기 때문이다...^^;;; 또 한편으로는 MAC OS가 윈도우즈 시스템보다는
유닉스 계열에 가까운 특성도 있어서 진행이 수월할 것 같아서이다.

어쨌든 이 중 맥북프로와 맥미니 서버는 회사에 있고 맥미니는 집에 있는데
일단 방화벽으로 인해 회사 시스템에서는 집 시스템이 연결이 되지만 집 시스템에서는
회사 시스템이 연결이 되지 않는다. 이 부분이 어떻게 해결될 수 있을지가 고민이다.

만약 전혀 쌍방향 통신의 가능성이 없다면 우선은 회사에 있는 2대로 진행을 해야겠다.

다음 가상(학습용 샘플) 서비스를 위해 필요한 데이터를 저장할 스토리지로는
그냥 2Tb 하드 2개를 USB 3.0 외장 케이스에 담아 집 시스템에 연결을 해두었다.
이 것도 역시 방화벽 문제 해결 여하에 따라 변동이 생길 것 같다.

간략한 시스템 사양은 다음과 같다.

맥북프로(Early 2011) : i7 쿼드코어 / 16Gb 램 / 256Gb SSD / 500Gb HDD
맥미니 서버 : i7 쿼드코어/ 4Gb 램 / 500Gb * 2 HDD
---------------------------------------------------------------------------------------------
맥미니 : i5 듀얼코어(4thread) / 16Gb 램 / 500Gb HDD / 2Tb * 2 USB 3.0 외장하드

서비스

현재 내가 가장 손쉽게 대량의 데이터를 얻을 수 있는 소스는 바로 트위터이다.
팔로워들의 tweet데이터를 API를 이용하여 수집을 할 예정이며 이 데이터들을 이용하여
단어 분석을 진행할 예정이다. 구체적으로 어떤 내용을 분석할 것인지에 대해서는
조금 더 학습을 진행한 후 정리하도록 하겠다.



아직은 쥐뿔도 모르지만 이렇게 준비를 하고보니 엄청 설레인다...^^;;;
열심히 준비해서 뭔가 한 번 해내야겠다~

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^