【问题标题】:Hadoop streaming - wrapper executing binary application issuesHadoop 流 - 执行二进制应用程序问题的包装器
【发布时间】:2014-10-04 18:48:52
【问题描述】:

我是 Hadoop 新手,正在尝试使用 Hadoop 流来并行化编译成二进制文件的物理模拟。这个想法是使用每个输入文件一个映射器的映射并行运行二进制文件,然后使用 python reducer 脚本对单个运行的reduce结果(由二进制文件写入文件)。

我的问题是如何传递输入文件列表 names 以便 hadoop 流将每个文件名作为一个键传递给映射器脚本。这可能吗?

额外问题:理想情况下,我想为每个文件名生成一个映射器,尽管我知道直接指定映射器的数量并不提供给用户。是否有可能诱使 Hadoop 流式传输这样做?

这是我目前的设置:

map.py:

    #! /util/python/2.7.6/bin/python
    import sys
    sys.path.append('.')
    import subprocess as sp

    #mapper
    partmc = './partmc'
    for line in sys.stdin:
        spec = line.strip().split('\t')[0] # eg, run_3.spec
        args = [partmc, spec]
        sp.Popen(args) #eg, ./partmc run_3.spec

hadoop-streaming 作业的相关部分:

    module load python/2.7.6-statsmodels-0.5.0
    $HADOOP_HOME/bin/hadoop --config $HADOOP_CONF_DIR jar $HADOOP_HOME/contrib/streaming/hadoop-0.20.1-streaming.jar \
        -file /user/thomasef/pop/mapreduce/1_urban_plume/map.py \
        -file /user/thomasef/pop/mapreduce/1_urban_plume/reduce.py \
        -file /user/thomasef/pop/mapreduce/1_urban_plume/run_1.spec \
        -file /user/thomasef/pop/mapreduce/1_urban_plume/run_2.spec \
        -file /user/thomasef/pop/mapreduce/1_urban_plume/run_3.spec \
        -file /user/thomasef/pop/mapreduce/1_urban_plume/partmc \
        -file /user/thomasef/pop/mapreduce/1_urban_plume/spec_list.txt \
        -input /user/thomasef/pop/mapreduce/1_urban_plume/spec_list.txt \
        -output /user/thomasef/pop/mapreduce/1_urban_plume/houtput/ \
        -mapper /user/thomasef/pop/mapreduce/1_urban_plume/map.py \
        -reducer /user/thomasef/pop/mapreduce/1_urban_plume/reduce.py \
        -jobconf mapred.job.tracker=local \
        -jobconf fs.defualt.name=local \
        -verbose \
        -numReduceTasks 1

spec_list.txt 在哪里:

    run_1.spec
    run_2.spec
    run_3.spec

我目前在尝试此操作时遇到此错误:

    14/08/11 15:34:33 WARN mapred.LocalJobRunner: job_local_0001
    java.io.IOException: No input paths specified in job
        at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:152)
        at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:201)
        at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:138)

但如果我调用,应用程序会按预期工作:

    cat spec_list.txt | ./map.py | sort | ./reduce.py

我们将不胜感激任何和所有关于此的建议,因为我已经为此工作了数周,但没有成功且进展非常缓慢。

【问题讨论】:

    标签: python hadoop hadoop-streaming


    【解决方案1】:

    我做过类似的事情。 Spec_list.txt 需要包含每个文件的完整路径(例如 /user/.../filename),并且您需要在运行作业之前将其复制到 hdfs。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多