Schwein streaming durch ein python-Skript mit der import-Module
Arbeiten mit pigtmp$ Schwein --version
Apache Pig-version 0.8.1-cdh3u1 (rexported)
zusammengestellt Jul 18 2011, 08:29:40
Habe ich ein python-script (c-python), die Importe ein weiteres Skript, die beide sehr einfach in meinem Beispiel:
DATEN
Beispiel$ hadoop fs -cat /user/pavel/trivial.melden Sie
1 one
2 two
3 three
BEISPIEL OHNE ZÄHLEN - funktioniert einwandfrei
Beispiel$ pig -f trivial_stream.Schwein
(1,1,one)
()
(1,2,two)
()
(1,3,three)
()
wo
1) trivial_stream.Schwein:
DEFINE test_stream `test_stream.py` SHIP ('test_stream.py');
A = LOAD 'trivial.log' USING PigStorage('\t') AS (mynum: int, mynumstr: chararray);
C = STREAM A THROUGH test_stream;
DUMP C;
2) test_stream.py
#! /usr/bin/env python
import sys
import string
for line in sys.stdin:
if len(line) == 0: continue
new_line = line
print "%d\t%s" % (1, new_line)
So im wesentlichen ich nur zusammengefasste Linien mit einem Schlüssel, nichts besonderes.
BEISPIEL MIT INCLUDE - Bomben!
Jetzt würde ich gerne anfügen eine Zeichenfolge aus einem python-import-Modul, das sich in demselben Verzeichnis wie test_stream.py. Ich habe versucht, dem Schiff das import-Modul in viele verschiedene Möglichkeiten, aber bekomme den gleichen Fehler (siehe unten)
1) trivial_stream.Schwein:
DEFINE test_stream `test_stream.py` SHIP ('test_stream.py', 'test_import.py');
A = LOAD 'trivial.log' USING PigStorage('\t') AS (mynum: int, mynumstr: chararray);
C = STREAM A THROUGH test_stream;
DUMP C;
2) test_stream.py
#! /usr/bin/env python
import sys
import string
import test_import
for line in sys.stdin:
if len(line) == 0: continue
new_line = ("%s-%s") % (line.strip(), test_import.getTestLine())
print "%d\t%s" % (1, new_line)
3) test_import.py
def getTestLine():
return "test line";
Nun
example$ pig -f trivial_stream.pig
Fehlermeldung im Backend
org.apache.pig.backend.executionengine.ExecException: ERROR 2055: Received Error while processing the map plan: 'test_stream.py ' failed with exit status: 1
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigMapBase.runPipeline(PigMapBase.java:265)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigMapBase.cleanup(PigMapBase.java:103)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:647)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:323)
at org.apache.hadoop.mapred.Child$4.run(Child.java:270)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)
at org.apache.hadoop.mapred.Child.main(Child.java:264)
Schwein Stack-Trace
ERROR 2997: Unable to recreate exception from backed error: org.apache.pig.backend.executionengine.ExecException: ERROR 2055: Received Error while processing the map plan: 'test_stream.py ' failed with exit status: 1
org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1066: Unable to open iterator for alias C. Backend error : Unable to recreate exception from backed error: org.apache.pig.backend.executionengine.ExecException: ERROR 2055: Received Error while processing the map plan: 'test_stream.py ' failed with exit status: 1
at org.apache.pig.PigServer.openIterator(PigServer.java:753)
at org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:615)
at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:303)
at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:168)
at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:144)
at org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:90)
at org.apache.pig.Main.run(Main.java:396)
at org.apache.pig.Main.main(Main.java:107)
Caused by: org.apache.pig.backend.executionengine.ExecException: ERROR 2997: Unable to recreate exception from backed error: org.apache.pig.backend.executionengine.ExecException: ERROR 2055: Received Error while processing the map plan: 'test_stream.py ' failed with exit status: 1
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.Launcher.getErrorMessages(Launcher.java:221)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.Launcher.getStats(Launcher.java:151)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher.launchPig(MapReduceLauncher.java:337)
at org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.execute(HExecutionEngine.java:382)
at org.apache.pig.PigServer.executeCompiledLogicalPlan(PigServer.java:1209)
at org.apache.pig.PigServer.storeEx(PigServer.java:885)
at org.apache.pig.PigServer.store(PigServer.java:827)
at org.apache.pig.PigServer.openIterator(PigServer.java:739)
... 7 more
Danke Ihnen sehr für Ihre Hilfe!
-Pavel
- Haben Sie versucht, gerade Verrohrung text auf der shell zu sehen, wenn Sie eine Python-exception?
- Ja, erste, was ich Tat, funktioniert gut.
- es herausgefunden. rtm. die Abhängigkeiten sind nicht ausgeliefert, wenn Sie möchten, dass Ihre python-app für die Arbeit mit pig, die Sie brauchen, um tar es (vergessen Sie nicht init.py ' s!), dann gehören die .tar-Datei in Schweine -, SCHIFF-Anweisung. Das erste, was Sie tun ist, entpacken Sie die app. Möglicherweise gibt es Probleme mit Pfaden, also würde ich vorschlagen, die folgenden, noch bevor tar-Extraktion: sys.Pfad.insert(0, os.getcwd())
- Bitte fügen Sie diese als Antwort!
- Für Leute, die fanden diesen Beitrag bei der Suche nach FEHLER 1066: Unable to open iterator-alias hier ist ein generische Lösung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Richtige Antwort aus dem Kommentar oben:
Die Abhängigkeiten sind nicht ausgeliefert, wenn Sie möchten, dass Ihre python-app für die Arbeit mit pig, die Sie brauchen, um tar es (vergessen Sie nicht init.py's!), dann gehören die .tar-Datei in Schweine -, SCHIFF-Anweisung. Das erste, was Sie tun ist, entpacken Sie die app. Möglicherweise gibt es Probleme mit Pfaden, also würde ich vorschlagen, die folgenden, noch bevor tar-Extraktion: sys.Pfad.insert(0, os.getcwd()).
Müssen Sie anfügen, das aktuelle Verzeichnis zu
sys.path
in Ihremtest_stream.py
:Damit der Befehl des SCHIFFES, Sie hatte es nicht Schiff das python-Skript, aber Sie brauchen nur zu sagen, Python, wo Sie zu suchen.