【发布时间】:2015-01-25 17:40:53
【问题描述】:
我正在尝试在 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 中读取的
【问题讨论】:
标签: python hadoop hdfs popen hadoop-streaming