hadoopMap器输出空白

prdp8dxp  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(401)

输入文本就是这样,重复了无数次:

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。那也没用。
非常欢迎指导。谢谢

x7rlezfr

x7rlezfr1#

我按照以下步骤执行hadoop流式处理作业:
1) 首先,我创建了一个名为 head.txt 其中包含你提到的行。

value1 | foo="bar" value2 | value3

2) 然后我保存了这个文件并将其放入hdfs中,使用:

hadoop fs -put /head.txt /head.txt

3) 我已将您的python代码复制粘贴到mapper.py文件中,并在保存后将其复制到hdfs:

hadoop fs -put /mapper.py /mapper.py

4) 最后,我执行了下面的hadoop流式处理命令:

hadoop jar /opt/hadoop/lib/hadoop-streaming-1.0.3.jar -D mapred.reduce.tasks=0 -file /mapper.py -mapper mapper.py -input /head.txt -output /out.txt
``` `/opt/hadoop/lib/` 是我的hadoop库路径。您可以在此处添加路径。如果你设置了 `HADOOP_HOME` 在 `.bashrc` 那就不用提了 `bin/hadoop` .
否则你可以写 `bin/hadoop` 用于执行作业。
这肯定对你有用。我有以下输出 `out.txt` 文件。

value1 | bar value2 | value3

相关问题