Apache Pig UDF: 3. rész - Tárolási funkciók

Ez a bejegyzés leírja az Apache Pig UDF - Store Functions funkciót. (Apache Pig UDF: 3. rész). Vessen egy pillantást az Apache Pig UDF áruházi funkcióira.



A StoreFunc absztrakt osztály rendelkezik az adatok tárolásának fő módszereivel, és a legtöbb felhasználási esetben elegendő lenne kibővíteni. Van egy opcionális interfész, amely megvalósítható a kibővített funkcionalitás elérése érdekében:



StoreMetadata

Ennek az interfésznek módszerei vannak a metaadat-rendszerekkel való interakcióra a sémák és statisztikák tárolására. Ez az interfész nem kötelező, és csak akkor valósítható meg, ha metaadatokat kell tárolni.

A StoreFunc-ban felülírandó módszereket az alábbiakban ismertetjük:



hogyan készítsünk halmazt
  • getOutputFormat ():

    Ezt a módszert Pig hívja meg, hogy megszerezze az OutputFormatot, amelyet a Tároló használ. Az OutputFormat módszereit Pig ugyanúgy meghívja, mint Hadoop egy térképcsökkentő Java programban. Ha az OutputFormat egy Hadoop csomagolt, akkor a megvalósításnak az org.apache.hadoop.mapreduce alatt az új API-alapúat kell használnia. Ha ez egy egyedi OutputFormat, akkor azt az új API segítségével kell végrehajtani az org.apache.hadoop.mapreduce alatt. A sertés meghívja az OutputFormat checkOutputSpecs () metódusát, hogy ellenőrizze a kimenet helyét előre. A feladat indításakor ezt a módszert a Hadoop hívássorozat részeként is meghívják. Tehát a megvalósításoknak biztosítaniuk kell, hogy ezt a módszert többször lehessen hívni következetlen mellékhatások nélkül.

  • setStoreLocation ():

    Ezt a módszert Pig hívja meg, hogy közölje az üzlet helyét a tárolóval. A tárolónak ezt a módszert kell használnia, hogy ugyanazokat az információkat közölje az alapul szolgáló OutputFormat-tal. Ezt a módszert Pig többször is hívja. A megvalósításoknak figyelembe kell venniük, hogy ezt a módszert többször hívják, és biztosítaniuk kell, hogy ne legyenek következetlen mellékhatások a többszörös hívások miatt.

  • preparToWrite ():

    Az új API-ban az adatok írása a StoreFunc által biztosított OutputFormaton keresztül történik. Az PreparToWrite () fájlban a StoreFunc által biztosított OutputFormathoz társított RecordWriter átkerül a StoreFunc-nak. Ezután a putNext () implementációja felhasználhatja a RecordWriter-t az adatok rekordját reprezentáló duplák írására a RecordWriter által elvárt módon.

  • putNext ():

    A putNext () jelentése nem változott, és a Pig futásidejű alkalmazás arra hívta fel, hogy megírja a következő adatcsoportot - az új API-ban ez az a módszer, ahol a megvalósítás az alapul szolgáló RecordWritert használja a Tuple kiírására.

Alapértelmezett megvalósítások a StoreFunc-ben:

  • setStoreFuncUDFContextSignature ():

    Ezt a módszert Pig mind az elülső, mind a hátsó végén meghívja, hogy egyedi aláírást adjon át a Tárolónak. Az aláírással bármilyen olyan információ tárolható az UDFContextben, amelyet a Tárolónak tárolnia kell a különböző metódusok meghívásai között az elülső és a hátsó végén. Az alapértelmezett megvalósítás a StoreFunc-ban üres. Ezt a módszert minden más módszer előtt meghívják.

  • relToAbsPathForStoreLocation ():

    A Pig futásideje ezt a módszert hívja meg, hogy a Tároló relatív tárolóhelyet abszolút hellyé alakítson át. A StoreFunc egy megvalósítást biztosít, amely ezt kezeli a FileSystem alapú helyeken.

  • checkSchema ():

    A Store függvénynek végre kell hajtania ezt a funkciót annak ellenőrzésére, hogy az írandó adatokat leíró adott séma elfogadható-e számára. A StoreFunc alapértelmezett megvalósításának üres törzse van. Ezt a módszert a setStoreLocation () hívás előtt hívjuk meg.

Példa megvalósításra:

A példa tároló megvalósítása a szöveges adatok tárolója, sorhatárolóval:
Alapértelmezett mezőhatároló (és felülírható egy másik mezőhatároló átadásával a konstruktorban) - ez hasonló a Pig Pigtor jelenlegi PigStorage tárolójához. A megvalósítás egy meglévő Hadoop által támogatott OutputFormat - TextOutputFormat elemet használ alapul szolgáló OutputFormatként.

public class SimpleTextStorer kiterjeszti a StoreFunc {védett RecordWriter író = null privát byte fieldDel = '' privát statikus végső int BUFFER_SIZE = 1024 privát statikus végső karakterlánc UTF8 = 'UTF-8' public PigStorage () {} public PigStorage (String elválasztó) {this ( ) if (elhatároló.hossz () == 1) {this.fieldDel = (bájt) delimiter.charAt (0)} else if (elhatároló.hossz ()> 1delimiter.charAt (0) == '') {kapcsoló ( delimiter.charAt (1)) {eset '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 alapértelmezett: dobjon új RuntimeException (' Ismeretlen határoló '+ elválasztó)}} else {dobjon új RuntimeException (' A PigStorage határolójának a egyetlen karakter ')}} ByteArrayOutputStream mOut = new ByteArrayOutputStream (BUFFER_SIZE) @Orride public void putNext (Tuple f) IOException {int sz = f.size () for (int i = 0 i)

Van egy kérdésünk? Kérjük, említse meg őket a megjegyzések részben, és mi kapcsolatba lépünk Önnel.

Kapcsolódó hozzászólások:



Apache Pig UDF: 2. rész
Apache Pig UDF: 1. rész