Apache Pig UDF: Bahagian 3 - Fungsi Stor



Catatan ini menerangkan mengenai Apache Pig UDF - Fungsi Kedai. (Babi Apache UDF: Bahagian 3). Lihat Fungsi Kedai Apache Pig UDF.

Kelas abstrak StoreFunc mempunyai kaedah utama untuk menyimpan data dan bagi kebanyakan kes penggunaan, sudah cukup untuk memperluasnya. Terdapat antara muka pilihan yang dapat dilaksanakan untuk mencapai fungsi yang diperluas:





StorMetadata

Antaramuka ini mempunyai kaedah untuk berinteraksi dengan sistem metadata untuk menyimpan skema dan statistik. Antaramuka ini adalah pilihan dan harus dilaksanakan hanya jika metadata perlu disimpan.

Kaedah yang perlu diganti di StoreFunc dijelaskan di bawah:



  • getOutputFormat ():

    Kaedah ini akan dipanggil oleh Babi untuk mendapatkan OutputFormat yang digunakan oleh Storer. Kaedah dalam OutputFormat akan dipanggil oleh Babi dengan cara yang sama dan dalam konteks yang sama seperti oleh Hadoop dalam program Java pengurangan peta. Sekiranya OutputFormat adalah paket Hadoop, pelaksanaannya harus menggunakan API berdasarkan API baru di bawah org.apache.hadoop.mapreduce. Sekiranya ia adalah OutputFormat tersuai, ia harus dilaksanakan menggunakan API baru di bawah org.apache.hadoop.mapreduce. Kaedah checkOutputSpecs () OutputFormat akan dipanggil oleh babi untuk memeriksa lokasi output di muka. Kaedah ini juga akan dipanggil sebagai sebahagian daripada urutan panggilan Hadoop semasa tugas dilancarkan. Jadi pelaksanaan harus memastikan bahawa kaedah ini dapat dipanggil berkali-kali tanpa kesan sampingan yang tidak konsisten.

  • setStoreLocation ():

    Kaedah ini dipanggil oleh Babi untuk menyampaikan lokasi kedai kepada penyimpan. Penyimpan harus menggunakan kaedah ini untuk menyampaikan maklumat yang sama kepada OutputFormat yang mendasari. Kaedah ini dipanggil berkali-kali oleh Babi. Pelaksanaan harus memperhatikan bahawa kaedah ini disebut berkali-kali dan harus memastikan tidak ada kesan sampingan yang tidak konsisten disebabkan oleh banyak panggilan tersebut.

  • sediakanToWrite ():

    Dalam API baru, penulisan data dilakukan melalui OutputFormat yang disediakan oleh StoreFunc. Dalam persiapanToWrite () RecordWriter yang berkaitan dengan OutputFormat yang disediakan oleh StoreFunc diserahkan ke StoreFunc. RecordWriter kemudian dapat digunakan oleh implementasi di putNext () untuk menulis tuple yang mewakili catatan data dengan cara yang diharapkan oleh RecordWriter.

  • putNext ():

    Makna putNext () tidak berubah dan dipanggil oleh Babi runtime untuk menulis tupel data berikutnya - di API baru, ini adalah kaedah di mana pelaksanaannya akan menggunakan RecordWriter yang mendasari untuk menulis Tuple.

Pelaksanaan Lalai di StoreFunc:

  • setStoreFuncUDFContextSignature ():

    Kaedah ini akan dipanggil oleh Babi baik di hujung depan dan belakang untuk memberikan tanda tangan yang unik kepada Storer. Tandatangan boleh digunakan untuk menyimpan sebarang maklumat ke dalam UDFContext yang perlu disimpan oleh Storer antara pelbagai kaedah panggilan di hujung depan dan hujung belakang. Pelaksanaan lalai di StoreFunc mempunyai badan kosong. Kaedah ini akan dipanggil sebelum kaedah lain.

  • relToAbsPathForStoreLocation ():

    Babi runtime akan memanggil kaedah ini untuk membolehkan Storer menukar lokasi kedai relatif ke lokasi mutlak. Pelaksanaan disediakan di StoreFunc yang menangani ini untuk lokasi berdasarkan FileSystem.

  • semak Skema ():

    Fungsi Stor harus melaksanakan fungsi ini untuk memeriksa bahawa skema tertentu yang menggambarkan data yang akan ditulis dapat diterima olehnya. Pelaksanaan lalai di StoreFunc mempunyai badan kosong. Kaedah ini akan dipanggil sebelum ada panggilan ke setStoreLocation ().

Contoh Pelaksanaan:

Pelaksanaan stor dalam contoh, adalah penyimpan data teks dengan pembatas garis sebagai ‘
'Dan' 'sebagai pembatas medan lalai (yang boleh diganti dengan melewati pembatas medan yang berbeza dalam konstruktor) - ini serupa dengan penyimpan PigStorage semasa di Pig. Pelaksanaannya menggunakan OutputFormat - TextOutputFormat yang disokong Hadoop yang ada sebagai OutputFormat yang mendasari.

kelas awam SimpleTextStorer memperluas 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) {ini ( ) jika (delimiter.length () == 1) {this.fieldDel = (byte) delimiter.charAt (0)} lain jika (delimiter.length ()> 1delimiter.charAt (0) == '') {beralih ( 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: membuang RuntimeException baru (' Unknown delimiter '+ delimiter)}} lain {buang RuntimeException baru (' PigStorage delimeter mestilah watak tunggal ')}} ByteArrayOutputStream mOut = baru ByteArrayOutputStream (BUFFER_SIZE) @ Override public void putNext (Tuple f) melemparkan IOException {int sz = f.size () untuk (int i = 0 i

Ada soalan untuk kami? Sila sebutkan di bahagian komen dan kami akan menghubungi anda.

peranan dan tanggungjawab pentadbir sistem linux

Catatan berkaitan:



Babi Apache UDF: Bahagian 2
Babi Apache UDF: Bahagian 1