최초 작성일 : 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 예제가 실행이 되었다.

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

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

블로그 이미지

마즈다

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

댓글을 달아 주세요