Apache Pig UDF: Μέρος 3 - Λειτουργίες καταστήματος



Αυτή η ανάρτηση περιγράφει σχετικά με το Apache Pig UDF - Functions Store. (Apache Pig UDF: Μέρος 3). Ρίξτε μια ματιά στο Store Functions του Apache Pig UDF.

Η αφηρημένη κλάση StoreFunc έχει τις κύριες μεθόδους για την αποθήκευση δεδομένων και για τις περισσότερες περιπτώσεις χρήσης θα πρέπει να αρκεί για την επέκτασή της. Υπάρχει μια προαιρετική διεπαφή που μπορεί να εφαρμοστεί για την επίτευξη εκτεταμένης λειτουργικότητας





Κατάστημα Μεταδεδομένα

Αυτή η διεπαφή έχει μεθόδους αλληλεπίδρασης με συστήματα μεταδεδομένων για την αποθήκευση σχήματος και στατιστικών. Αυτή η διεπαφή είναι προαιρετική και πρέπει να εφαρμοστεί μόνο εάν τα μεταδεδομένα πρέπει να αποθηκευτούν.

Οι μέθοδοι που πρέπει να παρακαμφθούν στο StoreFunc εξηγούνται παρακάτω:



  • getOutputFormat ():

    Αυτή η μέθοδος θα κληθεί από το Pig για να πάρει το OutputFormat που χρησιμοποιείται από το Storer. Οι μέθοδοι στο OutputFormat θα κληθούν από το Pig με τον ίδιο τρόπο και στο ίδιο πλαίσιο με το Hadoop σε ένα πρόγραμμα Java για μείωση χάρτη. Εάν το OutputFormat είναι πακεταρισμένο Hadoop, η εφαρμογή θα πρέπει να χρησιμοποιεί το νέο API που βασίζεται στο org.apache.hadoop.mapreduce. Εάν είναι ένα προσαρμοσμένο OutputFormat, θα πρέπει να εφαρμοστεί χρησιμοποιώντας το νέο API στο org.apache.hadoop.mapreduce. Η μέθοδος checkOutputSpecs () του OutputFormat θα κληθεί από χοίρο για να ελέγξει τη θέση εξόδου εκ των προτέρων. Αυτή η μέθοδος θα κληθεί επίσης ως μέρος της ακολουθίας κλήσεων Hadoop κατά την έναρξη της εργασίας. Έτσι, οι υλοποιήσεις πρέπει να διασφαλίζουν ότι αυτή η μέθοδος μπορεί να καλείται πολλές φορές χωρίς ασυνεπείς παρενέργειες.

  • setStoreLocation ():

    Αυτή η μέθοδος καλείται από το Pig για να κοινοποιήσει την τοποθεσία του καταστήματος στον αποθηκευτή. Ο αποθηκευτής θα πρέπει να χρησιμοποιήσει αυτήν τη μέθοδο για να κοινοποιήσει τις ίδιες πληροφορίες στο υποκείμενο OutputFormat. Αυτή η μέθοδος καλείται πολλές φορές από το Pig. Οι εφαρμογές πρέπει να λάβουν υπόψη ότι αυτή η μέθοδος καλείται πολλές φορές και πρέπει να διασφαλίζει ότι δεν υπάρχουν ασυνεπείς παρενέργειες λόγω των πολλαπλών κλήσεων.

  • prepToWrite ():

    Στο νέο API, η συγγραφή των δεδομένων γίνεται μέσω του OutputFormat που παρέχεται από το StoreFunc. Στην προετοιμασίαToWrite () το RecordWriter που σχετίζεται με το OutputFormat που παρέχεται από το StoreFunc μεταφέρεται στο StoreFunc. Το RecordWriter μπορεί στη συνέχεια να χρησιμοποιηθεί από την εφαρμογή στο putNext () για να γράψει μια πλειάδα που αντιπροσωπεύει μια εγγραφή δεδομένων με τον αναμενόμενο τρόπο από το RecordWriter.

  • putNext ():

    Η έννοια του putNext () δεν έχει αλλάξει και καλείται από το Pig runtime για να γράψει την επόμενη πλειάδα δεδομένων - στο νέο API, αυτή είναι η μέθοδος στην οποία η εφαρμογή θα χρησιμοποιήσει το υποκείμενο RecordWriter για να γράψει το Tuple.

Προεπιλεγμένες υλοποιήσεις στο StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Αυτή η μέθοδος θα κληθεί από το Pig τόσο στο μπροστινό όσο και στο πίσω μέρος για να περάσει μια μοναδική υπογραφή στον Storer. Η υπογραφή μπορεί να χρησιμοποιηθεί για την αποθήκευση οποιωνδήποτε πληροφοριών στο UDFContext που πρέπει να αποθηκεύσει ο Αποθηκευτής μεταξύ διαφόρων μεθόδων επίκλησης στο μπροστινό και στο πίσω μέρος. Η προεπιλεγμένη εφαρμογή στο StoreFunc έχει ένα κενό σώμα. Αυτή η μέθοδος θα καλείται πριν από οποιαδήποτε άλλη μέθοδο.

  • relToAbsPathForStoreLocation ():

    Ο χρόνος εκτέλεσης των χοίρων θα καλέσει αυτήν τη μέθοδο για να επιτρέψει στον Αποθηκευτή να μετατρέψει μια σχετική τοποθεσία καταστήματος σε απόλυτη τοποθεσία. Μια εφαρμογή παρέχεται στο StoreFunc το οποίο το χειρίζεται για τοποθεσίες που βασίζονται στο FileSystem.

  • checkSchema ():

    Μια συνάρτηση Store πρέπει να εφαρμόσει αυτήν τη λειτουργία για να ελέγξει ότι ένα δεδομένο σχήμα που περιγράφει τα δεδομένα που θα γραφτούν είναι αποδεκτό από αυτό. Η προεπιλεγμένη εφαρμογή στο StoreFunc έχει ένα κενό σώμα. Αυτή η μέθοδος θα κληθεί πριν από οποιεσδήποτε κλήσεις στο setStoreLocation ().

Παράδειγμα εφαρμογής:

Η εφαρμογή αποθήκευσης στο παράδειγμα, είναι αποθηκευτής δεδομένων κειμένου με οριοθέτη γραμμής ως «
'Και' 'ως προεπιλεγμένο διαχωριστικό πεδίου (το οποίο μπορεί να παρακαμφθεί περνώντας ένα διαφορετικό οριοθέτη πεδίου στον κατασκευαστή) - αυτό είναι παρόμοιο με τον τρέχοντα αποθηκευτή PigStorage στο Pig. Η υλοποίηση χρησιμοποιεί ένα υπάρχον υποστηριζόμενο από το Hadoop OutputFormat - TextOutputFormat ως το υποκείμενο OutputFormat.

δημόσια τάξη SimpleTextStorer επεκτείνει το StoreFunc {protected RecordWriter writer = null private byte fieldDel = 'private static final int BUFFER_SIZE = 1024 private static final String UTF8 =' UTF-8 'public PigStorage () {} public PigStorage (String delimiter) {αυτό ( ) εάν (delimiter.length () == 1) {this.fieldDel = (byte) delimiter.charAt (0)} αλλιώς εάν (delimiter.length ()> 1delimiter.charAt (0) == ') {διακόπτης ( 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: throw new RuntimeException (' Unknown delimiter '+ delimiter)}} αλλιώς {ρίξτε νέο RuntimeException (' Το PigStorage delimeter πρέπει να είναι single χαρακτήρα ')}} ByteArrayOutputStream mOut = νέο ByteArrayOutputStream (BUFFER_SIZE) @ Override public void putNext (Tuple f) ρίχνει το IOException {int sz = f.size () για (int i = 0 i

Έχετε μια ερώτηση για εμάς; Αναφέρετέ τα στην ενότητα σχολίων και θα επικοινωνήσουμε μαζί σας.

Σχετικές αναρτήσεις:



Apache Pig UDF: Μέρος 2
Apache Pig UDF: Μέρος 1