gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:46:04 24 4
gpt4 key购买 nike

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

我的问题是如何传递输入文件列表 姓名 这样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

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

最佳答案

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

关于python - Hadoop 流 - 执行二进制应用程序问题的包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25251789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com