Benutzerdefinierte Funktionen in Pig aufrufen - Amazon EMR

Benutzerdefinierte Funktionen in Pig aufrufen

Pig bietet die Möglichkeit zum Aufrufen von benutzerdefinierten Funktionen (User Defined Functions, UDFs) in Pig-Skripts. Sie können so eine benutzerdefinierte Verarbeitung in Ihren Pig-Skripts implementieren. Folgende Sprachen werden derzeit unterstützt: Java, Python/Jython und JavaScript (JavaScript-Support noch im experimentellen Stadium).

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 von UDFs mit Pig finden Sie in der Pig-Dokumentation für Ihre Pig-Version.

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://mybucket/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://mybucket/pig/python hochgeladen.

  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://mybucket/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://mybucket/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);