在我的输入hdfs中,我有file1,file2,file3,file4。 我在python中编写了一个mapper文件,使用以下命令从这些文件中读取数据:
for lines in sys.stdin
我面临的问题是它是从文件中随机读取行,我希望代码完全读取file1然后再读取file2并继续。
MapperFile:
import sys
import os
s =''
i = 0
for line in sys.stdin:
if(line[i%40]=='|' and s[len(s)-1] != '\n'):
s = s + '\n'
elif(line[i%40]!='|'):
s = s + line[i%40]
i = i+1
print s
通过流媒体jar运行:
hadoop jar $HADOOP_HOME//share/hadoop/tools/lib/hadoop-streaming-2.7.0.jar -input /home/test/ -output /home/output6/ -mapper /home/eshobsa/hadoop_work/mapper.py
有人可以指导我如何让它按顺序读取文件中的行,即首先是File1,然后是来自file2的行,依此类推。
答案 0 :(得分:0)
您想要的是输入的顺序扫描,而mapreduce则不是这种情况。在mapreduce中,文件是并行扫描的,这意味着映射器无法知道其他映射器处于什么状态,因此,当其他文件读完前一个文件时,读取下一个文件。 实际上,mapreduce中没有“previous”或“next”文件。
你确定需要mapreduce吗?从您的描述来看,您不是......否则,您确定需要对输入进行顺序扫描吗?