我正在尝试在python脚本中读取(打开)和写入hdfs文件。但是有错误。有人能告诉我这里怎么了吗。
代码(完整):sample.py
# !/usr/bin/python
from subprocess import Popen, PIPE
print "Before Loop"
cat = Popen(["hadoop", "fs", "-cat", "./sample.txt"],
stdout=PIPE)
print "After Loop 1"
put = Popen(["hadoop", "fs", "-put", "-", "./modifiedfile.txt"],
stdin=PIPE)
print "After Loop 2"
for line in cat.stdout:
line += "Blah"
print line
print "Inside Loop"
put.stdin.write(line)
cat.stdout.close()
cat.wait()
put.stdin.close()
put.wait()
当我执行时:
hadoop jar /usr/local/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.5.1.jar -file ./sample.py -mapper './sample.py' -input sample.txt -output fileRead
它执行正常我找不到应该在hdfs modifiedfile中创建的文件
当我执行时:
hadoop fs -getmerge ./fileRead/ file.txt
在file.txt中,我得到:
Before Loop
Before Loop
After Loop 1
After Loop 1
After Loop 2
After Loop 2
有人能告诉我我做错了什么吗??我不认为它是从sample.txt读取的
2条答案
按热度按时间jv4diomz1#
有人能告诉我我做错了什么吗??
你的
sample.py
可能不是合适的Map器。Map程序可能接受其在stdin上的输入并将结果写入其stdout,例如。,blah.py
:用法:
uubf1zoe2#
试着改变你的想法
put
子流程采取cat
通过改变这个在这里
完整脚本: