Benutzerdefinierte Funktionen in Pig aufrufen - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Benutzerdefinierte Funktionen in Pig aufrufen

Pig bietet die Möglichkeit, benutzerdefinierte Funktionen (UDFs) aus Pig-Skripten heraus aufzurufen. Sie können so eine benutzerdefinierte Verarbeitung in Ihren Pig-Skripts implementieren. Die derzeit unterstützten Sprachen sind Java, Python/Jython und JavaScript (obwohl die JavaScript Unterstützung noch experimentell ist.)

In den folgenden Abschnitten wird beschrieben, wie Sie Ihre Funktionen registrieren, um diese über die Pig-Shell oder in Pig-Skripts aufzurufen. Weitere Informationen zur Verwendung UDFs mit Pig finden Sie in der Pig-Dokumentation für Ihre Version von Pig.

JAR-Dateien in Pig aufrufen

Mit dem Befehl REGISTER können Sie in Ihren Pig-Skripts benutzerdefinierte JAR-Dateien nutzen. Die JAR-Datei ist im lokalen Dateisystem oder in einem Remote-Dateisystem z. B. Amazon S3 gespeichert. Wenn das Pig-Skript ausgeführt wird, lädt Amazon EMR die JAR-Datei automatisch auf den Hauptknoten herunter und diese dann in den verteilten Hadoop-Cache hoch. So wird die JAR-Datei bei Bedarf automatisch von allen Instances im Cluster verwendet.

So verwenden Sie JAR-Dateien mit Pig
  1. Laden Sie Ihre benutzerdefinierte JAR-Datei in Amazon S3 hoch.

  2. Mit dem Befehl REGISTER in Ihren Pig-Skripts geben Sie den Amazon-S3-Bucket mit der benutzerdefinierten JAR-Datei an.

    REGISTER s3://amzn-s3-demo-bucket/path/mycustomjar.jar;

Aufrufen von Python/Jython-Skripts in Pig

Sie können Python-Skripts in Pig registrieren und diese Skripts dann über die Pig-Shell oder in einem Pig-Skript aufrufen. Dies geschieht, indem Sie den Speicherort des Skripts mit dem Schlüsselwort register angeben.

Da Pig in Java geschrieben ist, verwendet es die Jython-Skript-Engine zum Parsen des Python-Skripts. Weitere Informationen zu Jython finden Sie unter http://www.jython.org/.

So rufen Sie ein Python/Jython-Skript in Pig auf
  1. Schreiben Sie ein Python-Skript und laden Sie es an einem Speicherort in Amazon S3 hoch. Es sollte sich um einen Bucket handeln, der sich im Besitz des Kontos befindet, das den Pig-Cluster erstellt bzw. das über entsprechende Berechtigungen verfügt. Nur so kann das Konto auf den Cluster zugreifen. In diesem Beispiel wird das Skript auf s3://amzn-s3-demo - hochgeladenbucket/pig/python.

  2. Starten Sie einen Pig-Cluster. Wenn Sie über die Grunt-Shell auf Pig zugreifen, starten Sie einen interaktiven Cluster. Wenn Sie Pig-Befehle aus einem Skript heraus ausführen, starten Sie einen skriptgesteuerten Pig-Cluster. In diesem Beispiel wird ein interaktiver Cluster gestartet. Weitere Informationen zum Erstellen eines Pig-Clusters finden Sie unter Übermitteln von Pig-Aufträgen.

  3. Verwenden Sie bei einem interaktiven Cluster SSH für die Verbindung mit dem Master-Knoten und führen Sie die Grunt-Shell aus. Weitere Informationen finden Sie unter SSH im Hauptknoten.

  4. Führen Sie die Grunt-Shell für Pig aus, indem Sie pig in der Befehlszeile eingeben:

    pig
  5. Registrieren Sie mit dem Schlüsselwort register in der Grunt-Eingabeaufforderung die Jython-Bibliothek und Ihr Python-Skript in Pig (wie im folgenden Beispiel gezeigt). Geben Sie den Speicherort Ihres Skripts in Amazon S3 an:

    grunt> register 'lib/jython.jar'; grunt> register 's3://amzn-s3-demo-bucket/pig/python/myscript.py' using jython as myfunctions;
  6. Laden Sie die Eingabedaten. Beim folgenden Beispiel wird die Eingabe aus einem Amazon-S3-Speicherort geladen:

    grunt> input = load 's3://amzn-s3-demo-bucket/input/data.txt' using TextLoader as (line:chararray);
  7. Indem Sie mit myfunctions auf sie verweisen, können Sie jetzt Funktionen in Ihrem Pig-Skript aufrufen:

    grunt> output=foreach input generate myfunctions.myfunction($1);