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

그간 회사 업무가 바쁜 것도 있었지만 엄청나게 간단하다면 간단한 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 완벽 가이드)를 통해 마지막 단계로 진입을 해야 할

시점이 된 것이다.


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

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

걱정이라면 걱정이다.

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^