Ich versuche einen hadoop-streaming-Python-Job auszuführen.
%Vor%Ich habe sichergestellt, dass mapper.py über alle Berechtigungen verfügt. Es ist falsch zu sagen
%Vor%Ich habe versucht, mapper.py in hdfs zu kopieren und den gleichen Link hdfs: //localhost/mapper.py zu geben, der auch nicht funktioniert! Irgendwelche Gedanken, wie man diesen Fehler beheben kann?.
Wenn Sie sich das Beispiel auf der HadoopStreaming Wiki-Seite ansehen, scheint es, dass Sie
ändern sollten %Vor%bis
%Vor%seit "ausgelieferte Dateien gehen in das Arbeitsverzeichnis". Sie müssen möglicherweise auch den Python-Interpreter direkt angeben:
%Vor%Ihr Problem ist höchstwahrscheinlich, dass die ausführbare Python-Datei nicht auf den Slaves existiert (auf denen TaskTracker läuft). Java wird die gleiche Fehlermeldung geben.
Installieren Sie es überall dort, wo es verwendet wird. Un Ihre Datei können Sie Shebang verwenden, wie Sie wahrscheinlich schon tun:
%Vor%Stellen Sie sicher, dass der Pfad nach dem Shebang derselbe ist, in dem Python auf den TaskTrackers installiert ist.
Ein anderes hinterhältiges Ding kann das verursachen. Wenn Ihre Zeilenenden im Skript DOS-artig sind, dann könnte Ihre erste Zeile (die "Shebang-Zeile") mit bloßem Auge so aussehen:
%Vor%, aber seine Bytes sehen für den Kernel so aus, wenn er versucht, Ihr Skript auszuführen:
%Vor% Es sucht nach einer ausführbaren Datei namens "/usr/bin/python\r"
, die es nicht finden kann, also stirbt es mit "No such file or directory"
.
Das hat mich heute gebissen, wieder , also musste ich es irgendwo auf SO aufschreiben.
Ich habe genau das gleiche Problem in einem CDH4-Hadoop-Cluster mit einem Streaming-Python-Job festgestellt. Der Trick besteht darin, Ihre Mapper / Reducer-Datei als erste Zeile hinzuzufügen:
%Vor%Damit wird Python im aktuellen Arbeitsverzeichnis aussehen und es sollte dann ausgeführt werden können, stellen Sie auch sicher, dass Ihr Shebang korrekt ist.
Datei nicht gefunden Fehler bedeutet manchmal nicht "Datei nicht gefunden", stattdessen bedeutet es "Kann dieses Skript nicht ausführen".
Wenn ich das weiß, habe ich Probleme wie diese gelöst, wenn Sie mit Problemen (kein Java) beim Streaming konfrontiert sind, empfehle ich Ihnen, dieser Checkliste zu folgen:
python myScript.py
macht es startfähig als ./myScript.py
Dies ist die Art und Weise wie das Streaming Ihr Skript aufruft. -verbose
, um zu sehen, was in das Jar hineingeht, das in den Container implementiert wird, manchmal diese Hilfe. -file
verschoben werden, befinden sich nicht in Ordnern. -mapper folder/script.py
oder -reducer folder/script.py
werden als script.py
behandelt
Diese Checkliste hat mir sehr geholfen, ich hoffe, dass sie auch für Sie nützlich sein kann.
Hier folgt das klassische Protokoll mit der mehrdeutigen Fehlermeldung.
Es stimmt, es kann das Programm nicht ausführen.
%Vor%Es ist der Grund, die Lüge.
%Vor%Lesen Sie dies:
%Vor%Es ist eine Lüge, Datei existiert, wenn -verbose es in die Verpackungsliste zeigt.
%Vor%Ich habe dasselbe Problem beim Ausführen von Map Reduce mit Python-Code gesehen. Die Lösung ist: Wir müssen "Datei" auch vor dem Mapper und Reducer angeben.
Hier ist der Befehl:
%Vor%