【问题标题】:Hadoop Streaming using python使用 python 的 Hadoop 流式处理
【发布时间】:2015-08-02 18:47:22
【问题描述】:

我正在尝试执行 map reduce 代码如下:

hadoop jar /usr/lib/Hadoop/Hadoop-streaming-0.20.2-cdh3u2.jar –file mapper.py –mapper mapper.py –file reducer.py – reducer reducer.py –input /user/training/samplypy.txt –ouput  /user/training/pythonMR/output

遇到异常 -

Exception in thread "main" java.lang.ClassNotFoundException: –file
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:149)

我正在使用 Hadoop 1.0.3。我尝试过多个版本的 hadoop-streaming jar,例如:

hadoop-streaming-0.20.2-cdh3u2.jar 
hadoop-streaming-1.2.0.jar 
hadoop-streaming.jar

【问题讨论】:

标签: python hadoop mapreduce hadoop-streaming


【解决方案1】:
  1. 我能说的一件事是你没有使用'-file'语句的完整路径:

    –file /mapper/location/mapper.py(此处使用文件名的完整路径)

    --mapper mapper.py(正确,仅映射器文件名)

    –file /reducer/location/reducer.py(此处使用文件名的完整路径)

    –reducer reducer.py(正确,仅reducer文件名)

  2. 确保您的 -input 和 -output 指向 HDFS 而不是本地路径

这是我使用的代码:

hadoop jar /opt/cloudera/parcels/hadoop-streaming.jar \
-D mapred.reduce.tasks=15 -D stream.map.input.field.separator=',' -D stream.map.output.field.separator=',' \
-D mapred.textoutputformat.separator=',' \
-input /user/temp/in/ \
-output /user/temp/out \
-file  /app/qa/python/mapper.py \
-mapper mapper.py \
-file  /app/qa/python/reducer.py \
-reducer reducer.py

【讨论】:

    猜你喜欢
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多