python - Hadoop 集群 - 在运行作业之前,我是否需要在所有机器上复制我的代码?

标签 python hadoop mapreduce hadoop-streaming

这就是让我感到困惑的地方,当我使用 wordcount 示例时,我将代码保留在 master 并让他与 slave 一起做事并且它运行良好

但是当我运行我的代码时,它开始在奴隶上失败,给出奇怪的错误,如

Traceback (most recent call last):
  File "/app/hadoop/tmp/mapred/local/taskTracker/hduser/jobcache/job_201110250901_0005/attempt_201110250901_0005_m_000001_1/work/./mapper.py", line 55, in <module>
    from src.utilities import utilities
ImportError: No module named src.utilities
java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
        at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:311)
        at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:545)
        at org.apache.hadoop.streaming.PipeMapper.map(PipeMapper.java:121)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)
        at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:36)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:436)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372)
        at org.apache.hadoop.mapred.Child$4.run(Child.java:261)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:396)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
        at org.apache.hadoop.mapred.Child.main(Child.java:255)
java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
        at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:311)
        at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:545)
        at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:132)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57)
        at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:36)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:436)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372)
        at org.apache.hadoop.mapred.Child$4.run(Child.java:261)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:396)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
        at org.apache.hadoop.mapred.Child.main(Child.java:255)  

因为我在路径上没有代码,是不是我做错了什么?

谢谢

最佳答案

使用 Hadoop Streaming,必须使用 -file 复制代码/依赖项标志,如果代码不在目标机器上。确保在 Hadoop 流式命令中指定了 map/reduce 文件及其依赖项。

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
    -input myInputDirs \
    -output myOutputDir \
    -mapper myPythonScript.py \
    -reducer /bin/wc \
    -file myPythonScript.py \
    -file myDictionary.txt \

关于python - Hadoop 集群 - 在运行作业之前,我是否需要在所有机器上复制我的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7922830/

相关文章:

hadoop - "commit of the task output"在OutputCommitter中是什么意思

java - Hadoop MapReduce : Read a file and use it as input to filter other files

java - 如何为 KeyValueTextInputFormat 使用整数输入键

python/pandas 相当于 dplyr 1.0.0 summarize(across())

python - AWS lambda,未知服务: 'quicksight'

ubuntu - 如何将 -ls 输出保存到 hdfs 目录

mongodb - mongodb 中日期的分钟差异

python - 将一个数据框中的列添加到另一个 python pandas

Python requests-html 抛出多处理错误

hadoop - 在 Hadoop 框架上构建用于报告和分析的应用程序