输入文本就是这样,重复了无数次:
value1 | foo="bar" value2 | value3
我用python编写了一个基本的Map器,用于一个基本的流式处理作业:
# !/usr/bin/env python
import sys
for line in sys.stdin:
line = line.replace('foo=','')
line = line.replace('"','') # kills double-quotes
print line
# alternatively, I have tried print >>sys.stdout, line
我是这样做的;它运行正常,但输出文件为空:
bin/hadoop jar contrib/streaming/hadoop-streaming.jar -file ~/mapper1.py -mapper mapper1.py -input hdfs:///rawdata/0208head.txt -output hdfs:///rawdata/clean0208.txt
我假设在没有Map器的情况下,打印只会打印到输出文件。我现在怀疑print命令只是将输出打印到每个javavm的内存中,如果没有明确的方法将其写回,它就会在vm中消失。
我编写了一个基本的reducer,它只接受sys.stdin,并在上面的“#alternative”中打印到sys.stdout。那也没用。
非常欢迎指导。谢谢
1条答案
按热度按时间x7rlezfr1#
我按照以下步骤执行hadoop流式处理作业:
1) 首先,我创建了一个名为
head.txt
其中包含你提到的行。2) 然后我保存了这个文件并将其放入hdfs中,使用:
3) 我已将您的python代码复制粘贴到mapper.py文件中,并在保存后将其复制到hdfs:
4) 最后,我执行了下面的hadoop流式处理命令:
value1 | bar value2 | value3