복붙노트

[HADOOP] 파이썬 오류로 Hadoop 스트리밍 명령 실패

HADOOP

파이썬 오류로 Hadoop 스트리밍 명령 실패

저는 Ubuntu, Hadoop 및 DFS의 초보자이지만 Michael-Noll.com에 게시 된 지침에 따라 로컬 우분투 컴퓨터에 단일 노드 hadoop 인스턴스를 설치했습니다.

http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/#copy-local-example-data-to-hdfs

http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/

현재 Hadoop에서 기본 단어 수를 실행하는 데 어려움을 겪고 있습니다. 내가 다운로드 디렉토리에서 Hadoop을 실행하고 있다는 사실이 너무 많은 차이를 만들지는 모르겠지만 mapper.py 및 reducer.py 기능을 배치하여 내 파일 위치 주변을 트위 킹하려고했습니다. Hadooop 작업 디렉토리에서 성공하지 못했습니다. 나는 모든 연구를 다 써 버렸고 여전히이 문제를 해결할 수 없다. (즉, 파일 매개 변수를 사용하는 등) 나는 사전에 도움을 주셔서 감사하며 나는이 질문을 막 시작한 다른 사람들을 도울 수있는 방법으로 구성하기를 희망한다. Python + Hadoop.

나는 mapper.py와 reduce.py를 독립적으로 테스트했고 bash 쉘의 장난감 텍스트 데이터를 묻는 메시지가 나타나면 잘 작동한다.

내 Bash 쉘 출력 :

hduser@chris-linux:/home/chris/Downloads/hadoop$ bin/hadoop jar /home/chris/Downloads/hadoop/contrib/streaming/hadoop-streaming-1.0.4.jar -file mapper.py -file reducer.py -mapper mapper.py -reducer reducer.py -input /user/hduser/gutenberg/* -output /user/hduser/gutenberg-output3
Warning: $HADOOP_HOME is deprecated.

packageJobJar: [mapper.py, reducer.py, /app/hadoop/tmp/hadoop-unjar4681300115516015516/] [] /tmp/streamjob2215860242221125845.jar tmpDir=null
13/03/08 14:43:46 INFO util.NativeCodeLoader: Loaded the native-hadoop library
13/03/08 14:43:46 WARN snappy.LoadSnappy: Snappy native library not loaded
13/03/08 14:43:46 INFO mapred.FileInputFormat: Total input paths to process : 3
13/03/08 14:43:47 INFO streaming.StreamJob: getLocalDirs(): [/app/hadoop/tmp/mapred/local]
13/03/08 14:43:47 INFO streaming.StreamJob: Running job: job_201303081155_0032
13/03/08 14:43:47 INFO streaming.StreamJob: To kill this job, run:
13/03/08 14:43:47 INFO streaming.StreamJob: /home/chris/Downloads/hadoop/libexec/../bin/hadoop job  -Dmapred.job.tracker=localhost:54311 -kill job_201303081155_0032
13/03/08 14:43:47 INFO streaming.StreamJob: Tracking URL: http://localhost:50030/jobdetails.jsp?jobid=job_201303081155_0032
13/03/08 14:43:48 INFO streaming.StreamJob:  map 0%  reduce 0%
13/03/08 14:44:12 INFO streaming.StreamJob:  map 100%  reduce 100%
13/03/08 14:44:12 INFO streaming.StreamJob: To kill this job, run:
13/03/08 14:44:12 INFO streaming.StreamJob: /home/chris/Downloads/hadoop/libexec/../bin/hadoop job  -Dmapred.job.tracker=localhost:54311 -kill job_201303081155_0032
13/03/08 14:44:12 INFO streaming.StreamJob: Tracking URL: http://localhost:50030/jobdetails.jsp?jobid=job_201303081155_0032
13/03/08 14:44:12 ERROR streaming.StreamJob: Job not successful. Error: JobCleanup Task Failure, Task: task_201303081155_0032_m_000003
13/03/08 14:44:12 INFO streaming.StreamJob: killJob...
Streaming Command Failed!

내 HDFS는 / app / hadoop / tmp에 있으며, 내 hadoop 인스턴스의 my / user / hduser 디렉토리와 동일합니다.

입력 데이터는 / user / hduser / gutenberg / * (3 UTF 일반 텍스트 파일)에 있습니다. 출력은 / user / hduser / gutenberg-output에서 생성되도록 설정됩니다.

해결법

  1. ==============================

    1.내가 얻었던 오류와 비슷한 -

    내가 얻었던 오류와 비슷한 -

    첫째,에서 : -file mapper.py -file reducer.py -mapper mapper.py -reducer reducer.py

    '-file'에 로컬 시스템 정규화 된 경로를 사용하고 '-mapper'에 상대 경로를 사용할 수 있습니다. 예 : -file /aFully/qualified/localSystemPathTo/yourMapper.py-mapper yourMapper.py

    그런 다음 'reducer.py'및 'mapper.py'파일의 맨 위에 "#! / usr / bin / python"

    마침내,

    내 mapper.py 및 reducer.py에서 모든 가져 오기를 'setup_call ()'함수 (파일의 '전역'수준)에 넣은 다음이를 다음과 같이 래핑했습니다.

    if __name__== '__main__':
    
        try:
            setup_call_andCloseOut()
        except: 
            import sys, traceback, StringIO
    
            fakeeWriteable = StringIO.StringIO()
    
            traceback.print_exc(None,  file=fakeeWriteable)
            msg = ""
            msg +="------------------------------------------------------\n"
            msg +="----theTraceback: -----------\n"
            msg += fakeeWriteable.getvalue() +  "\n"
            msg +="------------------------------------------------------\n"
    
            sys.stderr.write(msg)  
    
        #end
    

    그 시점에서 나는 hadoop 웹 작업 로그 (오류 메시지의 http : // 링크)를 사용하고 'stderr'메시지를 보는 길을 탐색 할 수있었습니다. (실제 핵심 논리에서)

    나는이 모든 것을 할 수있는 좀 더 간결한 방법이있을 것이라고 확신하지만, 이것이 의미 론적으로 명확하고 즉각적인 필요를 충족시키기에 충분했다.

    행운을 빕니다..

  2. ==============================

    2.위에서 제공된 정보를 기반으로 다음 경로의 로그를 살펴보십시오.

    위에서 제공된 정보를 기반으로 다음 경로의 로그를 살펴보십시오.

    $HADOOP_HOME$/logs/userlogs/job_201303081155_0032/task_201303081155_0032_m_000003
    

    그러면 특정 작업에 대한 정보가 제공됩니다.

    Hadoop이 제공하는 로그는 꽤 좋다. 정보를 찾기 위해 약간의 파고가있다. :)

  3. ==============================

    3.답장을 늦게 보내서 미안해.

    답장을 늦게 보내서 미안해.

    hadoop 사용자가 파일 (매퍼 및 감속기)을 실행하고 첫 번째 줄에 Shebang을 포함하는지 확인해야합니다.

    그것은 당신의 문제를 해결할 것입니다.

  4. from https://stackoverflow.com/questions/15302262/hadoop-streaming-command-failure-with-python-error by cc-by-sa and MIT license