Apache Pig UDF: Del 3 - Store funktioner

Dette indlæg beskriver om Apache Pig UDF - Store-funktioner. (Apache Pig UDF: Del 3). Se på butiksfunktionerne i Apache Pig UDF.



StoreFunc abstrakt klasse har de vigtigste metoder til lagring af data, og i de fleste brugstilfælde skal det være tilstrækkeligt at udvide dem. Der er en valgfri grænseflade, der kan implementeres for at opnå udvidet funktionalitet:



StoreMetadata

Denne grænseflade har metoder til at interagere med metadatasystemer for at gemme skema og statistik. Denne grænseflade er valgfri og bør kun implementeres, hvis metadata skal gemmes.

De metoder, der skal tilsidesættes i StoreFunc, forklares nedenfor:



  • getOutputFormat ():

    Denne metode kaldes af Pig for at få OutputFormat brugt af Storer. Metoderne i OutputFormat kaldes af Pig på samme måde og i samme sammenhæng som af Hadoop i et kortreducerende Java-program. Hvis OutputFormat er en Hadoop-pakket, skal implementeringen bruge den nye API-baserede under org.apache.hadoop.mapreduce. Hvis det er en brugerdefineret OutputFormat, skal den implementeres ved hjælp af den nye API under org.apache.hadoop.mapreduce. Metoden checkOutputSpecs () i OutputFormat kaldes af svin for at kontrollere outputplaceringen foran. Denne metode kaldes også som en del af Hadoop-opkaldssekvensen, når jobbet startes. Så implementeringer bør sikre, at denne metode kan kaldes flere gange uden inkonsekvente bivirkninger.

  • setStoreLocation ():

    Denne metode kaldes af Pig for at kommunikere butiksplaceringen til opbevaringsstedet. Lageren skal bruge denne metode til at kommunikere de samme oplysninger til den underliggende OutputFormat. Denne metode kaldes Pig flere gange. Implementeringer skal være opmærksom på, at denne metode kaldes flere gange og bør sikre, at der ikke er inkonsekvente bivirkninger på grund af flere opkald.

  • prepareToWrite ():

    I den nye API foregår skrivning af dataene via OutputFormat leveret af StoreFunc. I preparToWrite () sendes RecordWriter, der er knyttet til OutputFormat leveret af StoreFunc, til StoreFunc. RecordWriter kan derefter bruges af implementeringen i putNext () til at skrive en tuple, der repræsenterer en dataregistrering på en måde, som RecordWriter forventer.

  • putNext ():

    Betydningen af ​​putNext () har ikke ændret sig og kaldes af Pig runtime til at skrive den næste tuple med data - i den nye API er dette metoden, hvor implementeringen bruger den underliggende RecordWriter til at skrive Tuple ud.

Standardimplementeringer i StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Denne metode vil blive kaldt af Pig både i frontenden og bagenden for at give en unik signatur til Storer. Signaturen kan bruges til at gemme enhver information i UDFContext, som butikken har brug for at gemme mellem forskellige metodeopkald i frontenden og bagenden. Standardimplementeringen i StoreFunc har en tom krop. Denne metode kaldes før andre metoder.

  • relToAbsPathForStoreLocation ():

    Gris runtime kalder denne metode for at give butikken mulighed for at konvertere en relativ butikslokation til en absolut placering. En implementering findes i StoreFunc, som håndterer dette til FileSystem-baserede placeringer.

  • checkSchema ():

    En butiksfunktion skal implementere denne funktion for at kontrollere, at et givet skema, der beskriver de data, der skal skrives, er acceptabelt for det. Standardimplementeringen i StoreFunc har en tom krop. Denne metode kaldes inden nogen opkald til setStoreLocation ().

Eksempel på implementering:

Lagerimplementeringen i eksemplet er en lagrer til tekstdata med linjeafgrænsning som '
'Og' 'som standardfeltafgrænser (som kan tilsidesættes ved at sende en anden feltafgrænser i konstruktøren) - dette svarer til den nuværende PigStorage-lager i Pig. Implementeringen bruger en eksisterende Hadoop-understøttet OutputFormat - TextOutputFormat som den underliggende OutputFormat.

offentlig klasse SimpleTextStorer udvider StoreFunc {beskyttet RecordWriter forfatter = null privat byte fieldDel = '' privat statisk endelig int BUFFER_SIZE = 1024 privat statisk endelig Streng UTF8 = 'UTF-8' offentlig PigStorage () {} offentlig PigStorage (streng afgrænser) {dette (( ) hvis (delimiter.length () == 1) {this.fieldDel = (byte) delimiter.charAt (0)} ellers hvis (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 () pause standard: kast ny RuntimeException (' Ukendt afgrænser '+ afgrænser)}} ellers {kast ny RuntimeException (' PigStorage-afgrænser skal være en enkelt tegn ')}} ByteArrayOutputStream mOut = ny ByteArrayOutputStream (BUFFER_SIZE) @ Overstyr offentlig tomrum putNext (Tuple f) kaster IOException {int sz = f.size () for (int i = 0 i

Har du et spørgsmål til os? Nævn dem i kommentarfeltet, så vender vi tilbage til dig.

Relaterede indlæg:



Apache Pig UDF: Part 2
Apache Pig UDF: Part 1