2017-02-08 10 views
0

У меня та же проблема, что и пользователи по этому вопросу: Hadoop Streaming - Unable to find file errorHadoop Streaming API с Python картографом сценария - Файл не найден

Как и в этом другом вопросе, я использую почтовый файл, который содержит дополнительный код Python который я импортирую из своего картографа. hadoop streaming with python modules В файле сценария, который я опубликовал ниже, вы можете увидеть zip-файл в строке 21, на который ссылается вызов в файле jar файла Hadoop Streaming API в строке 26. Я не использую файл pickle, подобный вышеупомянутой проблеме StackOverflow отчеты.

Я решил опубликовать свою проблему в новом потоке с дополнительными сведениями, которые, как представляется, не подходят для комментария на этой странице.

API-интерфейс Hadoop Streaming бросает Java Exception FileNotFound при запуске моего скрипта. Интересно, что он работает в псевдораспределенном режиме, но он не работает, когда у меня есть кластер из нескольких узлов (у меня есть кластер из 4 узлов на AWS).

У меня есть разрешения xrw в файле mapper, а deploy.sh, который вызывается в строке 7 ниже, устанавливает разрешения xrw для создаваемого zip-файла.

Есть ли что-то не так в моем обращении к API Hadoop Streaming или проблема в моем коде Python? (Обратите внимание, код от http://gurus.pyimagesearch.com и я испытал его в псевдо-распределенном режиме с успехом)

Вот мой файл сценария, который я бегу:

1 #!/bin/sh 
2 
3 # grab the current working directory 
4 BASE=$(pwd) 
5 
6 # create the latest deployable package 
7 sbin/deploy.sh 
8 
9 # change directory to where Hadoop lives 
10 cd $HADOOP_HOME 
11 
12 # (potentially optional): turn off safe mode 
13 bin/hdfs dfsadmin -safemode leave 
14 
15 # remove the previous output directory 
16 bin/hdfs dfs -rm -r /user/ubuntu/ukbench/output 
17 
18 # define the set of local files that need to be present to run the Hadoop 
19 # job -- comma separate each file path 
20 FILES="${BASE}/feature_extractor_mapper.py,\ 
21 ${BASE}/deploy/pyimagesearch.zip" 
22 
23 # run the job on Hadoop 
24 bin/hadoop jar share/hadoop/tools/lib/hadoop-streaming-*.jar \ 
25  -D mapreduce.job.reduces=0 \ 
26  -files ${FILES} \ 
27  -mapper ${BASE}/feature_extractor_mapper.py \ 
28  -input /user/ubuntu/ukbench/input/ukbench_dataset.txt \ 
29  -output /user/ubuntu/ukbench/output 

И это StackTrace от выполнения сценария :

[email protected]:~/high_throughput_feature_extraction$ jobs/feature_extractor_mapper.sh 
Safe mode is OFF 
17/02/08 18:10:46 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes. 
Deleted /user/ubuntu/ukbench/output 
packageJobJar: [/tmp/hadoop-unjar2327603386373063535/] [] /tmp/streamjob380494102161319103.jar tmpDir=null 
17/02/08 18:10:48 INFO client.RMProxy: Connecting to ResourceManager at *I REMOVED THIS* 
17/02/08 18:10:48 INFO client.RMProxy: Connecting to ResourceManager at *I REMOVED THIS* 
17/02/08 18:10:49 INFO mapred.FileInputFormat: Total input paths to process : 1 
17/02/08 18:10:49 INFO mapreduce.JobSubmitter: number of splits:10 
17/02/08 18:10:49 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1486574928548_0004 
17/02/08 18:10:50 INFO impl.YarnClientImpl: Submitted application application_1486574928548_0004 
17/02/08 18:10:50 INFO mapreduce.Job: The url to track the job: http://*I REMOVED THIS*.compute.amazonaws.com:8088/proxy/ application_1486574928548_0004/ 
17/02/08 18:10:50 INFO mapreduce.Job: Running job: job_1486574928548_0004 
17/02/08 18:10:57 INFO mapreduce.Job: Job job_1486574928548_0004 running in uber mode : false 
17/02/08 18:10:57 INFO mapreduce.Job: map 0% reduce 0% 
17/02/08 18:11:12 INFO mapreduce.Job: Task Id : attempt_1486574928548_0004_m_000009_0, Status : FAILED 
Error: java.lang.RuntimeException: Error in configuring object 
     at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:112) 
     at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:78) 
     at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:136) 
     at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:449) 
     at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343) 
     at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at javax.security.auth.Subject.doAs(Subject.java:422) 
     at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657) 
     at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 
Caused by: java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:498) 
     at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:109) 
     ... 9 more 
Caused by: java.lang.RuntimeException: Error in configuring object 
     at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:112) 
     at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:78) 
     at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:136) 
     at org.apache.hadoop.mapred.MapRunner.configure(MapRunner.java:38) 
     ... 14 more 
Caused by: java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:498) 
     at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:109) 
     ... 17 more 
Caused by: java.lang.RuntimeException: configuration exception 
     at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:222) 
     at org.apache.hadoop.streaming.PipeMapper.configure(PipeMapper.java:66) 
     ... 22 more 
Caused by: java.io.IOException: Cannot run program "/home/ubuntu/high_throughput_feature_extraction/feature_extractor_mapper.py": error=2, No such file or  directory 
     at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) 
     at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:209) 
     ... 23 more 
Caused by: java.io.IOException: error=2, No such file or directory 
     at java.lang.UNIXProcess.forkAndExec(Native Method) 
     at java.lang.UNIXProcess.<init>(UNIXProcess.java:247) 
     at java.lang.ProcessImpl.start(ProcessImpl.java:134) 
     at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) 
     ... 24 more 

Container killed by the ApplicationMaster. 
Container killed on request. Exit code is 143 
Container exited with a non-zero exit code 143 

ответ

0

Я выяснил решение моей собственной проблемы, которая в течение некоторого времени преследовала меня.

По какой-то причине строка 27 ниже, это не нравится полный путь, и ему нравится, когда скрипт python находится в кавычках.

Я сделал несколько других изменений ... вот сводка всех изменений: -comment out line 10, которая переходит в каталог установки Hadoop. - удалите все ссылки на пути по строкам 20 и 21 (так как я не в каталоге Hadoop ... см. Предыдущую марку) -режим каталога $ HADOOP_HOME в строке 24. Если вы находитесь на Cloudera, ваш путь к потоковой передаче jar файл будет другим, поэтому имейте это в виду. -line 27: удалить полный путь, так как я в каталоге, где находится этот файл, а также поместить файл py в кавычки

Надеюсь, это поможет другим людям!

1 #!/bin/sh 
2 
3 # grab the current working directory 
4 BASE=$(pwd) 
5 
6 # create the latest deployable package 
7 sbin/deploy.sh 
8 
9 # change directory to where Hadoop lives 
10 #cd $HADOOP_HOME 
11 
12 # (potentially optional): turn off safe mode 
13 hdfs dfsadmin -safemode leave 
14 
15 # remove the previous output directory 
16 hdfs dfs -rm -r /user/ubuntu/ukbench/output 
17 
18 # define the set of local files that need to be present to run the Hadoop 
19 # job -- comma separate each file path 
20 FILES="feature_extractor_mapper.py,\ 
21 deploy/pyimagesearch.zip" 
22 
23 # run the job on Hadoop 
24 ${HADOOP_HOME}/bin/hadoop jar ${HADOOP_HOME}/share/hadoop/tools/lib/hadoop-streaming-*.jar \ 
25  -D mapreduce.job.reduces=0 \ 
26  -files ${FILES} \ 
27  -mapper "feature_extractor_mapper.py" \ 
28  -input /user/ubuntu/ukbench/input/ukbench_dataset.txt \ 
29  -output /user/ubuntu/ukbench/output