我一直在努力使这项工作,但我不明白为什么它失败了。我有一个.sh脚本正在启动hadoop mapreduce作业:
yarn --config /etc/hadoop/conf2 jar hadoop-streaming.jar \
-D mapreduce.job.name="Compare TASS text with others. Date:${CALC_DATE}" \
-D mapreduce.job.maps=36 \
-D mapreduce.job.reduces=1 \
-D mapreduce.job.reduce.slowstart.completedmaps=0.99 \
-D mapreduce.task.timeout=7200000 \
-input ${HADOOP_DIR}/other_texts.txt \
-output ${HADOOP_DIR}/compare_pairs \
-file ./tass/compare_texts.py \
-file ./tass/reduce_text_dist.py \
-mapper compare_texts.py \
-reducer reduce_text_dist.py
我指向我们刚刚安装的集群的配置(但我没有管理它),命令开始产生错误:
Caused by: java.io.IOException: Cannot run program "/tmp/nm/usercache/matilda_dev/appcache/application_1601526003473_0137/container_e04_1601526003473_0137_01_000050/./compare_texts.py": error=2, No such file or directory
注意,我指向的是用户当前工作目录的相对路径。
我尝试显式设置可执行文件的绝对路径,但错误保持不变。
我的mapper和reducer有一个指向python解释器的指针:
# !/usr/bin/python3.6
python脚本是可执行的:
ls -l tass/compare_texts.py
-rwxrwxr-x 1 deploy deploy 4836 Oct 23 16:16 tass/compare_texts.py
如果我尝试(根据互联网上的一些例子)将Map器更改为
-mapper "/usr/bin/python compare_texts.py" \
错误是
INFO mapreduce.Job: Task Id : attempt_1601526003473_0140_m_000027_2, Status : FAILED
Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
这个选项:
-mapper "/usr/bin/python3.6 compare_texts.py" \
错误是
INFO mapreduce.Job: Task Id : attempt_1601526003473_0142_m_000023_2, Status : FAILED
Error: java.lang.RuntimeException: Error in configuring object
我没有办法解决这个问题。你有什么建议吗?
有关信息,旧的hadoop群集在没有错误的情况下处理了以下命令:
yarn jar hadoop-streaming.jar \
-D mapreduce.job.name="Compare TASS text with others. Date:${CALC_DATE}" \
-D mapreduce.job.maps=36 \
-D mapreduce.job.reduces=1 \
-D mapreduce.job.reduce.slowstart.completedmaps=0.99 \
-D mapreduce.task.timeout=7200000 \
-input ${HADOOP_DIR}/other_texts.txt \
-output ${HADOOP_DIR}/compare_pairs \
-mapper tass/compare_texts.py \
-reducer tass/reduce_text_dist.py \
-file common \
-file tass \
-file $FILE_PERIX
它们在新集群上不起作用,而当前的一组命令在旧集群上不起作用。
暂无答案!
目前还没有任何答案,快来回答吧!