Apache Pig UDF: Teil 3 - Speicherfunktionen

Dieser Beitrag beschreibt die Apache Pig UDF - Store-Funktionen. (Apache Pig UDF: Teil 3). Schauen Sie sich die Store-Funktionen von Apache Pig UDF an.

Die abstrakte StoreFunc-Klasse verfügt über die wichtigsten Methoden zum Speichern von Daten und sollte für die meisten Anwendungsfälle ausreichen, um sie zu erweitern. Es gibt eine optionale Schnittstelle, die implementiert werden kann, um erweiterte Funktionen zu erreichen:



StoreMetadata

Diese Schnittstelle verfügt über Methoden zur Interaktion mit Metadatensystemen zum Speichern von Schema und Statistiken. Diese Schnittstelle ist optional und sollte nur implementiert werden, wenn Metadaten gespeichert werden müssen.

Die Methoden, die in StoreFunc überschrieben werden müssen, werden nachfolgend erläutert:

Was sind Pakete in Java
  • getOutputFormat ():

    Diese Methode wird von Pig aufgerufen, um das vom Storer verwendete OutputFormat abzurufen. Die Methoden im OutputFormat werden von Pig auf dieselbe Weise und im selben Kontext wie von Hadoop in einem Map-Reduce-Java-Programm aufgerufen. Wenn es sich bei dem OutputFormat um ein Hadoop-Paket handelt, sollte die Implementierung die neue API-basierte API unter org.apache.hadoop.mapreduce verwenden. Wenn es sich um ein benutzerdefiniertes OutputFormat handelt, sollte es mithilfe der neuen API unter org.apache.hadoop.mapreduce implementiert werden. Die checkOutputSpecs () -Methode des OutputFormat wird von pig aufgerufen, um den Ausgabeort im Voraus zu überprüfen. Diese Methode wird auch als Teil der Hadoop-Aufrufsequenz aufgerufen, wenn der Job gestartet wird. Implementierungen sollten daher sicherstellen, dass diese Methode ohne inkonsistente Nebenwirkungen mehrmals aufgerufen werden kann.

  • setStoreLocation ():

    Diese Methode wird von Pig aufgerufen, um dem Speicher den Speicherort mitzuteilen. Der Speicher sollte diese Methode verwenden, um dieselben Informationen an das zugrunde liegende OutputFormat zu übermitteln. Diese Methode wird von Pig mehrfach aufgerufen. Implementierungen sollten beachten, dass diese Methode mehrmals aufgerufen wird und sicherstellen sollte, dass keine inkonsistenten Nebenwirkungen aufgrund der mehrfachen Aufrufe auftreten.

  • prepareToWrite ():

    In der neuen API erfolgt das Schreiben der Daten über das von StoreFunc bereitgestellte OutputFormat. In prepareToWrite () wird der RecordWriter, der dem von StoreFunc bereitgestellten OutputFormat zugeordnet ist, an StoreFunc übergeben. Der RecordWriter kann dann von der Implementierung in putNext () verwendet werden, um ein Tupel zu schreiben, das einen Datensatz von Daten auf eine vom RecordWriter erwartete Weise darstellt.

  • putNext ():

    Die Bedeutung von putNext () hat sich nicht geändert und wird von der Pig-Laufzeit aufgerufen, um das nächste Tupel von Daten zu schreiben. In der neuen API ist dies die Methode, bei der die Implementierung den zugrunde liegenden RecordWriter zum Ausschreiben des Tupels verwendet.

Standardimplementierungen in StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Diese Methode wird von Pig sowohl im Frontend als auch im Backend aufgerufen, um dem Storer eine eindeutige Signatur zu übergeben. Die Signatur kann verwendet werden, um alle Informationen im UDFContext zu speichern, die der Storer zwischen verschiedenen Methodenaufrufen im Front-End und Back-End speichern muss. Die Standardimplementierung in StoreFunc hat einen leeren Text. Diese Methode wird vor allen anderen Methoden aufgerufen.

  • relToAbsPathForStoreLocation ():

    Pig Runtime ruft diese Methode auf, damit der Storer einen relativen Speicherort in einen absoluten Speicherort konvertieren kann. In StoreFunc wird eine Implementierung bereitgestellt, die dies für Dateisystem-basierte Speicherorte behandelt.

  • checkSchema ():

    Eine Store-Funktion sollte diese Funktion implementieren, um zu überprüfen, ob ein bestimmtes Schema, das die zu schreibenden Daten beschreibt, für sie akzeptabel ist. Die Standardimplementierung in StoreFunc hat einen leeren Text. Diese Methode wird vor jedem Aufruf von setStoreLocation () aufgerufen.

Beispielimplementierung:

Die Speicherimplementierung im Beispiel ist ein Speicher für Textdaten mit dem Zeilenbegrenzer '
'Und' als Standardfeldtrennzeichen (das durch Übergeben eines anderen Feldtrennzeichens im Konstruktor überschrieben werden kann) - ähnelt dem aktuellen PigStorage-Speicher in Pig. Die Implementierung verwendet ein vorhandenes von Hadoop unterstütztes OutputFormat - TextOutputFormat als zugrunde liegendes OutputFormat.

public class SimpleTextStorer erweitert StoreFunc {protected RecordWriter writer = null privates Byte fieldDel = '' private static final int BUFFER_SIZE = 1024 private static final String UTF8 = 'UTF-8' public PigStorage () {} public PigStorage (String delimiter) {this ( ) if (delimiter.length () == 1) {this.fieldDel = (byte) delimiter.charAt (0)} else if (delimiter.length ()> 1delimiter.charAt (0) == '') {switch ( delimiter.charAt (1)) {case 't': this.fieldDel = (byte) '' break case 'x': fieldDel = Integer.valueOf (delimiter.substring (2), 16) .byteValue () break case ' u ': this.fieldDel = Integer.valueOf (delimiter.substring (2)). byteValue () break default: Neue RuntimeException auslösen (' Unbekannter Begrenzer '+ Begrenzer)}} else {Neue RuntimeException auslösen (' PigStorage-Begrenzer muss a sein Einzelzeichen ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Override public void putNext (Tuple f) löst IOException {int sz = f.size () für (int i = 0 i aus

Hast du eine Frage an uns? Bitte erwähnen Sie sie in den Kommentaren und wir werden uns bei Ihnen melden.

Zusammenhängende Posts:

Apache Pig UDF: Teil 2
Apache Pig UDF: Teil 1