April 30, 2013

교만에 대하여

오랜만에 방문한 국산 포탈에 "포스코 라면"이라는 요상한 검색어가 하나 올라와더라. 살펴보니 올해 초 진급한 포스코 임원이 대한항공 이용 중 기내식이 입맛에 안맞아 라면을 끓여달라 주문하고는 짜거나 설익었다며 폭행했다는 내용이더군.

사람 됨됨이를 보려면 권력을 줘보라는 말이 맞나 싶으면서도 한편으로는 안쓰러웠다. 왜냐면 (어디까지나 내 생각엔) 권력을 아주 힘들게 쌓아올린 사람일수록 권력적 교만의 정도가 심하기 때문에, 얼마나 치열하게 올라간 자리인지 안봐도 훤히 보였으니까.

태생부터 위치한 본래의 클래스에 속해 변함없이 사는 사람은 일반적으로 교만은 없다. 그 사람 태생이 엘리트였으면 그런 교만도 없었을것. 호랑이가 알통자랑 않는것처럼, 교만이란 어쩌면 지위박탈 위기감에서오는 허세 아닌가 싶다.

나 또한 요즈음, 나태해지고 교만해짐을 스스로 느끼는데 진중히 돌봐야할 문제인듯 하다.

April 29, 2013

아파치 하마 설치 및 페이지랭크 예제 실행해보기

한국 분들에게서 질문이 제법 오고 있어서 한글로 하나 작성합니다. 모두 개별적으로 답변드리기는 쉽지가 않네요.

미리 준비해야할 것들
  • Hadoop 1.0의 HDFS 
    • Hama 0.6 버전까지는 Hadoop 1.0과 CDH3만을 지원하고 있습니다.
  • Sun/Oracle 배포 Java
  • SSH
  • Hama 최신버전을 다운로드 합니다.
이 글에서는 준비가 다 완료되었다고 가정하고 바로 하마 설치 들어가봅시다.

분산 모드로 설치하기

Hama 최신버전 타르볼을 압축해제한 후, 편집해야할 파일은 conf 디렉토리 밑에 groomservers, hama-env.sh, 그리고 hama-site.xml 세 개 입니다.

1) 먼저 hama-env.sh 파일을 까서, 아래와 같이 JDK가 설치된 경로와 zookeeper 실행여부를 선택합니다 (주키퍼를 설치해놓지 않았으면 true로 하고, 기존 설치된 주키퍼를 쓰려면 false로 합니다).
# The java implementation to use.  Required.
export JAVA_HOME=/usr/lib/jvm/java-7-oracle

...

# Tell Hama whether it should manage it's own instance of Zookeeper or not.
export HAMA_MANAGES_ZK=true 
2) 이제 hama-site.xml 을 까서 다음과 같이 기본적으로 설정되어야할 properties를 작성해줍니다. 항목별로 설명하면 bsp 프레임워크의 마스터 서버의 호스트명과 포트번호, HDFS 파일시스템의 네임노드 호스트명과 포트번호, 주키퍼 호스트명, 그리고 인풋 데이터 파티셔닝을 실시간 처리하겠다는 설정 값들입니다.
  <property>
    <name>bsp.master.address</name>
    <value>server01.udanax.org:40000</value>
  </property>

  <property>
    <name>fs.default.name</name>
    <value>hdfs://server01.udanax.org:9000/</value>
  </property>

  <property>
    <name>hama.zookeeper.quorum</name>
    <value>server01.udanax.org</value>
  </property>
3) 여기까지 되었으면 이제 groomservers 파일을 열어서, 슬레이브로 동작할 서버들의 호스트명을 다음과 같이 나열해줍니다:
server02.udanax.org
server03.udanax.org
server04.udanax.org
...
설정이 완료되면, sever01.udanax.org 서버가 마스터로 나머지 02~04번까지의 서버가 슬레이브로 동작하게 됩니다.

데몬 실행 및 페이지랭크 실행해보기

설정이 끝났으면, 다음과 같이 start-bspd.sh 구동 스크립트로 데몬을 실행합니다.
$ bin/start-bspd.sh
$ tail -f logs/hama-edward-bspmaster-udanax.org.log
2013-04-29 15:46:10,198 INFO org.apache.hadoop.ipc.Server: IPC Server Responder: starting
2013-04-29 15:46:10,198 INFO org.apache.hama.bsp.BSPMaster: Starting RUNNING
2013-04-29 15:46:21,165 INFO org.apache.hama.bsp.BSPMaster: groomd_server02.udanax.org_50000 is added.
로그를 보면 슬레이브들이 마스터서버에 추가되는 것을 볼 수 있습니다. 데몬이 잘 올라왔다면 이제 예제를 실행해볼 수 있습니다. 다음 명령어는 Pi 계산하는 예제입니다.
$ bin/hama jar hama-examples-0.6.1.jar pi
13/04/29 15:50:15 INFO mortbay.log: Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
13/04/29 15:50:16 INFO bsp.BSPJobClient: Running job: job_201304291546_0001
13/04/29 15:50:19 INFO bsp.BSPJobClient: Current supersteps number: 0
13/04/29 15:50:22 INFO bsp.BSPJobClient: Current supersteps number: 1
13/04/29 15:50:22 INFO bsp.BSPJobClient: The total number of supersteps: 1
13/04/29 15:50:22 INFO bsp.BSPJobClient: Counters: 6
13/04/29 15:50:22 INFO bsp.BSPJobClient:   org.apache.hama.bsp.JobInProgress$JobCounter
13/04/29 15:50:22 INFO bsp.BSPJobClient:     SUPERSTEPS=1
13/04/29 15:50:22 INFO bsp.BSPJobClient:     LAUNCHED_TASKS=3
13/04/29 15:50:22 INFO bsp.BSPJobClient:   org.apache.hama.bsp.BSPPeerImpl$PeerCounter
13/04/29 15:50:22 INFO bsp.BSPJobClient:     SUPERSTEP_SUM=3
13/04/29 15:50:22 INFO bsp.BSPJobClient:     TIME_IN_SYNC_MS=220
13/04/29 15:50:22 INFO bsp.BSPJobClient:     TOTAL_MESSAGES_SENT=3
13/04/29 15:50:22 INFO bsp.BSPJobClient:     TOTAL_MESSAGES_RECEIVED=3
Estimated value of PI is 3.1424
Job Finished in 6.432 seconds
정상적으로 설치가 잘 되었다면 위와 같이 Pi 계산 결과값이 나오는것을 볼 수 있습니다. 성공하셨나요? :D 그럼 다음으로 이제 좀 더 현실적인 예제 PageRank를 계산하는 예제를 실행하려면, 먼저 generator 커맨드로 100개의 vertices와 1,000개의 edge를 갖는 랜덤 그래프 데이터를 HDFS 상에 생성합니다.
$ bin/hama jar hama-examples-0.6.1.jar gen symmetric 100 10 randomgraph 2
13/04/29 15:54:45 INFO mortbay.log: Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
13/04/29 15:54:46 INFO bsp.BSPJobClient: Running job: job_201304291546_0002
13/04/29 15:54:49 INFO bsp.BSPJobClient: Current supersteps number: 0
13/04/29 15:54:52 INFO bsp.BSPJobClient: Current supersteps number: 1
13/04/29 15:54:52 INFO bsp.BSPJobClient: The total number of supersteps: 1
13/04/29 15:54:52 INFO bsp.BSPJobClient: Counters: 6
13/04/29 15:54:52 INFO bsp.BSPJobClient:   org.apache.hama.bsp.JobInProgress$JobCounter
13/04/29 15:54:52 INFO bsp.BSPJobClient:     SUPERSTEPS=1
13/04/29 15:54:52 INFO bsp.BSPJobClient:     LAUNCHED_TASKS=2
13/04/29 15:54:52 INFO bsp.BSPJobClient:   org.apache.hama.bsp.BSPPeerImpl$PeerCounter
13/04/29 15:54:52 INFO bsp.BSPJobClient:     SUPERSTEP_SUM=2
13/04/29 15:54:52 INFO bsp.BSPJobClient:     TIME_IN_SYNC_MS=121
13/04/29 15:54:52 INFO bsp.BSPJobClient:     TOTAL_MESSAGES_SENT=516
13/04/29 15:54:52 INFO bsp.BSPJobClient:     TOTAL_MESSAGES_RECEIVED=516
Job Finished in 6.279 seconds
그 다음 페이지랭크를 실행하면 끗~
$ bin/hama jar hama-examples-0.6.1.jar pagerank randomgraph pagerankresult 4