[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.내가 얻었던 오류와 비슷한 -
내가 얻었던 오류와 비슷한 -
첫째,에서 : -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.위에서 제공된 정보를 기반으로 다음 경로의 로그를 살펴보십시오.
위에서 제공된 정보를 기반으로 다음 경로의 로그를 살펴보십시오.
$HADOOP_HOME$/logs/userlogs/job_201303081155_0032/task_201303081155_0032_m_000003
그러면 특정 작업에 대한 정보가 제공됩니다.
Hadoop이 제공하는 로그는 꽤 좋다. 정보를 찾기 위해 약간의 파고가있다. :)
-
==============================
3.답장을 늦게 보내서 미안해.
답장을 늦게 보내서 미안해.
hadoop 사용자가 파일 (매퍼 및 감속기)을 실행하고 첫 번째 줄에 Shebang을 포함하는지 확인해야합니다.
그것은 당신의 문제를 해결할 것입니다.
from https://stackoverflow.com/questions/15302262/hadoop-streaming-command-failure-with-python-error by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Lineage In Spark 란 무엇입니까? (0) | 2019.06.24 |
---|---|
[HADOOP] Hive 0.12 및 Hadoop 2.2.0-cdh5.0.0-beta2의 SerDe 문제 (0) | 2019.06.24 |
[HADOOP] Hadoop이 시스템의 모든 코어를 사용하게 만드는 방법은 무엇입니까? (0) | 2019.06.24 |
[HADOOP] 어떻게 (Hadoop에서), 데이터를지도에 넣고 올바른 유형의 함수를 축소합니까? (0) | 2019.06.24 |
[HADOOP] PIG에서 생성 된 bag (크기가 다를 수 있음)에서 첫 번째 튜플을 어떻게 추출합니까? (0) | 2019.06.24 |