Lesen / Schreiben von Dateien, die von hdfs mit python subprocess -, Rohr -, Popen Fehler gibt
Ich versuche zu Lesen(öffnen) und schreiben von Dateien im hdfs innerhalb eines python-Skript. Aber mit Fehler. Kann mir jemand sagen, was falsch ist hier.
Code (voll): 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()
Wenn ich ausführen :
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
Führt es richtig ich konnte nicht suchen Sie die Datei, die schaffen sollen, in hdfs modifiedfile
Und Wenn ich ausführen :
hadoop fs -getmerge ./fileRead/ file.txt
Innerhalb der file.txt ich habe :
Before Loop
Before Loop
After Loop 1
After Loop 1
After Loop 2
After Loop 2
Kann mir bitte jemand sagen, was mache ich hier falsch ?? Ich glaube, es liest aus der sample.txt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, ändern Sie Ihre
put
sub-Prozess zu nehmen, diecat
stdout auf seine eigene, indem Sie diesein diesem
Vollständige Skript:
Ihre
sample.py
vielleicht nicht eine richtige mapper. Ein mapper wohl akzeptiert seine Eingabe auf stdin und schreibt das Ergebnis auf seine stdout z.B.blah.py
:Verwendung: