Pos blog ini dipublikasikan di Hortonworks.com sebelum merger dengan Cloudera. Beberapa tautan, sumber daya, atau referensi mungkin tidak lagi akurat.
Pada tahun 2016, kami menerbitkan versi kedua v1.0.1 dari Spark HBase Connector (SHC). Di blog ini, kita akan membahas fitur-fitur utama yang telah kita terapkan tahun ini.
Mendukung pembuat kode Phoenix
SHC dapat digunakan untuk menulis data ke cluster HBase untuk pemrosesan hilir lebih lanjut. Ini mendukung serialisasi Avro untuk data input dan output dan default ke serialisasi kustom menggunakan mekanisme pengkodean asli sederhana. Saat membaca data input, SHC menekan filter ke HBase untuk pemindaian data yang efisien. Mengingat popularitas data Phoenix di HBase, tampaknya wajar untuk mendukung data Phoenix sebagai input ke HBase selain data Avro. Juga, default ke pengkodean biner asli sederhana tampaknya rentan terhadap perubahan di masa mendatang dan merupakan risiko bagi pengguna yang menulis data dari SHC ke HBase. Misalnya, dengan SHC maju, kompatibilitas ke belakang perlu ditangani dengan benar. Jadi defaultnya, SHC perlu diubah ke format yang lebih standar dan teruji seperti Phoenix.
Untuk dukungan kunci komposit, sebelum fitur ini, panjang nilai setiap dimensi harus diperbaiki – dengan pengecualian dimensi terakhir kunci komposit. Batasan ini telah dihapus oleh pembuat kode Phoenix. Saat ini, jika pengguna memilih Phoenix sebagai pengkode data, mereka tidak perlu menentukan panjang setiap bagian dari kunci komposit dalam katalog.
Karena Phoenix adalah pembuat kode default, satu-satunya perubahan bagi pengguna adalah jika mereka ingin menggunakan PrimitiveType sebagai pembuat kode data, mereka perlu menentukan "tableCoder":"PrimitiveType" di katalog mereka untuk memberi tahu SHC bahwa mereka ingin menggunakan PrimitiveType sebagai gantinya Phoenix sebagai “tableCoder”.
def catalog =s”””{
|”table”:{“namespace”:”default”, “name”:”table1″, “tableCoder”:”PrimitiveType”},
|”rowkey ”:”kunci”,
|”kolom”:{
|”col0″:{“cf”:”rowkey”, “col”:”key”, “type”:”string”} ,
|”col1″:{“cf”:”cf1″, “col”:”col1″, “type”:”boolean”},
|”col2″:{“cf”:”cf2″, “col”:”col2″, “type”:”double”},
|”col3″:{“cf”:”cf3″, “col”:”col3″, “type” :”float”},
|”col4″:{“cf”:”cf4″, “col”:”col4″, “type”:”int”},
|”col5″:{“cf”:”cf5″, “col”:”col5″, “type”:”bigint”},
|”col6″:{“cf”:”cf6″, “col”:”col6 , “type”:”smallint”},
|”col7″:{“cf”:”cf7″, “col”:”col7″, “type”:”string”},
|”col8″:{“cf”:”cf8″, “col”:”col8″, “type”:”tinyint”}
|}
|}”””.stripMargin
Koneksi Cache Spark HBase
SHC tidak menyimpan objek koneksi ke HBase sebelumnya. Secara khusus, panggilan ke 'ConnectionFactory.createConnection' dilakukan setiap kali SHC perlu mengunjungi tabel dan wilayah HBase. Pengguna dapat melihat ini hanya dengan melihat log pelaksana dan mengamati koneksi penjaga kebun binatang yang dibuat untuk setiap permintaan. Dalam dokumentasi Koneksi antarmuka, dikatakan bahwa pembuatan koneksi adalah operasi yang berat dan implementasi koneksi adalah thread-safe. Oleh karena itu, untuk proses yang berumur panjang, akan sangat berguna bagi SHC untuk menyimpan koneksi dalam cache. Dengan fitur ini, SHC mengurangi jumlah koneksi yang dibuat secara drastis, dan sangat meningkatkan kinerjanya dalam prosesnya.
Mendukung Keluarga Kolom Duplikat
SHC telah mendukung dukungan keluarga kolom yang digandakan. Sekarang pengguna dapat menentukan katalog mereka seperti ini:
def catalog =s”””{
|”table”:{“namespace”:”default”, “name”:”table1″, “tableCoder”:”PrimitiveType”},
|”rowkey ”:”kunci”,
|”kolom”:{
|”col0″:{“cf”:”rowkey”, “col”:”key”, “type”:”string”} ,
|”col1″:{“cf”:”cf1″, “col”:”col1″, “type”:”boolean”},
|”col2″:{“cf”:”cf1″, “col”:”col2″, “type”:”double”},
|”col3″:{“cf”:”cf1″, “col”:”col3″, “type” :”float”},
|”col4″:{“cf”:”cf2″, “col”:”col4″, “type”:”int”},
|”col5″:{“cf”:”cf2″, “col”:”col5″, “type”:”bigint”},
|”col6″:{“cf”:”cf3″, “col”:”col6 , “ketik”:”smallint”},
|”col7″:{“cf”:”cf3″, “col”:”col7″, “type”:”string”},
|”col8″:{“cf”:”cf3″, “col”:”col8″, “type”:”tinyint”}
|}
|}”””.stripMargin
Dalam definisi katalog di atas, kolom 'col0', 'col1' dan 'col2' memiliki keluarga kolom yang sama 'cf1'.
Gunakan Spark UnhandledFilters API
SHC juga telah mengimplementasikan Spark API unhandledFilters, yang merupakan pengoptimalan yang efektif. API ini memberi tahu Spark tentang filter yang tidak diterapkan SHC sebagai lawan mengembalikan semua filter. Perilaku sebelumnya, dalam hal ini, adalah menerapkan kembali semua filter setelah data ditarik di Spark. Ini harus idempoten, jadi tidak mengubah data apa pun, tetapi bisa mahal jika filternya rumit.
Komunitas SHC
Komunitas SHC lebih besar dan lebih berpengaruh dibandingkan satu tahun lalu. Pada tahun 2016, kami memberikan ceramah di Hadoop Summit dan di pertemuan HBase/Spark, dan menulis blog terperinci. Dengan jumlah pengguna SHC yang meningkat, kami menerima lebih banyak pertanyaan pengguna. Kami sangat senang melihat peningkatan adopsi SHC dan jika Anda memiliki pemikiran tentang cara meningkatkannya lebih lanjut, berikan kami umpan balik melalui Hortonworks Community Connection.
TERIMA KASIH
Kami ingin berterima kasih kepada tim Bloomberg dalam membimbing kami dalam pekerjaan ini dan juga membantu kami memvalidasi pekerjaan ini. Kami juga ingin berterima kasih kepada komunitas HBase karena telah memberikan umpan balik mereka dan menjadikannya lebih baik. Terakhir, pekerjaan ini telah memanfaatkan pelajaran dari integrasi Spark HBase sebelumnya dan kami ingin berterima kasih kepada pengembang mereka karena telah membuka jalan.
REFERENSI:
SHC: https://github.com/hortonworks-spark/shc
Apache HBase: https://hbase.apache.org/
Apache Spark: http://spark.apache.org/
Apache Phoenix: https://phoenix.apache.org/