首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hadoop流包装器执行二进制应用程序问题

Hadoop流包装器执行二进制应用程序问题
EN

Stack Overflow用户
提问于 2014-08-11 20:24:52
回答 1查看 175关注 0票数 0

我是Hadoop的新手,我正在尝试使用Hadoop流来并行化物理模拟,该模拟被编译成二进制。这样做的想法是使用带有每个输入文件的映射并行运行二进制文件,然后使用python还原器脚本减少单个运行的结果(由二进制代码写入文件)。

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

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

下面是我当前的设置:

map.py:

代码语言:javascript
复制
    #! /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流作业的相关部分:

代码语言:javascript
复制
    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是:

代码语言:javascript
复制
    run_1.spec
    run_2.spec
    run_3.spec

当我尝试这样做的时候,我现在得到了这个错误:

代码语言:javascript
复制
    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)

但是,如果我调用:

代码语言:javascript
复制
    cat spec_list.txt | ./map.py | sort | ./reduce.py

关于这方面的任何和所有的建议都将是非常感谢的,因为我已经在这方面工作了几个星期,但没有成功,进展也非常缓慢。

EN

回答 1

Stack Overflow用户

发布于 2014-08-25 16:26:37

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25251789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档