HBase
 sql >> Teknologi Basis Data >  >> NoSQL >> HBase

Konektor Spark HBase – Setahun dalam Tinjauan

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/


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana-untuk:Memindai Tabel Apache HBase Asin dengan Rentang Kunci Khusus Wilayah di MapReduce

  2. Kesadaran Rak di Hadoop dan Keuntungannya

  3. Ekosistem Hadoop – Pengenalan Komponen Hadoop

  4. Bagaimana Penskalaan Benar-Benar Bekerja di Apache HBase

  5. Apa itu NameNode Automatic Failover di Hadoop HDFS?