【发布时间】: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