Pemindaian HBase - Filter RowKey

Jadi, mari kita lihat apakah saya bisa menjelaskan secara singkat masalah saya.

Bayangkan kita mendapatkan tabel HBase yang berisi informasi setiap kunjungan ke disko: Setiap disko mendaftarkan nama, nama pengunjung, dan hari< /em> dia mengunjunginya. (ya itu contoh yang bodoh, saya tahu..).

Jadi, misalnya, ini adalah beberapa nilai tabel:

..
ministryOfSoundJamesOliver01022017
ministryOfSoundJamesOliver02022017
ministryOfSoundJamesOliver03022017
ministryOfSoundOliviaNewton04042017
ministryOfSoundOliviaNewton06042017
...
pachaibizaJohnMcKiness06042017
pachaibizaJohnMcKiness04042017
pachaibizaWilliamForrester04042017
..

RowKey memiliki struktur berikut:

Nama disko

nama orang

hari tahun ini

(tabel memiliki beberapa kolom/kualifikasi lain, tapi saya tidak mempermasalahkannya untuk masalah ini).


Masalahnya adalah: bayangkan seorang anak laki-laki yang suka pergi ke Ministry Of Sound. Dia sangat menyukainya, dia menghabiskan seluruh uangnya untuk disko dan narkoba (tapi bukan itu intinya).

Tujuan saya adalah menampilkan setiap orang yang menghadiri Ministry Of Sound. Dalam pemindaian saya, pria ini terus muncul di hasil, jadi saya harus membuang banyak entri untuk mencari pengunjung berikutnya. FE:

..
ministryOfSoundJohnnyYonkie01022017
ministryOfSoundJohnnyYonkie02022017
ministryOfSoundJohnnyYonkie03022017
ministryOfSoundJohnnyYonkie04022017
ministryOfSoundJohnnyYonkie05022017
ministryOfSoundAnotherDude02022017
...

Untuk mendaftarkan AnotherDude, saya harus membuang 4 entri dari Johnny.

Terakhir, pertanyaannya adalah:


Apakah ada cara untuk memberi tahu HBase bahwa entri berulang dari byte(x) ke byte(x+y) [ x adalah jumlah byte dari discoName dan jumlah byte y dari personName ] harus < strong>otomatis dibuang?


Terima kasih banyak sebelumnya!!


person aran    schedule 08.03.2017    source sumber
comment
Bagaimana pola akses datanya? Apakah Anda menggunakan Hadoop dan MapReduce atau hanya memindai tabel dengan api klien HBase? Apakah Anda ingin melewatkan entri di sisi server HBase atau di klien, sehingga fungsi pemrosesan data hanya akan menerima entri pengguna disko yang unik? Saya tidak sepenuhnya memahami skenarionya.   -  person AdamSkywalker    schedule 14.03.2017
comment
Hai @AdamSkywalker! Kami terhubung ke Hbase melalui api klien (menggunakan penghematan dan C#), dan tujuan kami adalah melewati entri di sisi server. Terima kasih!   -  person aran    schedule 15.03.2017
comment
Apakah Anda mempertimbangkan untuk membuat pemindaian baru dengan startKey yang diberikan untuk melewati entri? Misalnya ketika Anda menemukan JohnnyYonkie, Anda membuat pemindaian baru dengan kunci awal 'ministryOfSoundJohnnyYonkie99999'.   -  person AdamSkywalker    schedule 15.03.2017
comment
itu ide yang cerdas @AdamSkywalker. Anda tampak pintar. Tetap seperti itu kawan.   -  person aran    schedule 12.09.2017


Jawaban (1)


Hal pertama yang pertama: Jika Anda hanya memiliki akses klien, saya tidak dapat membantu Anda :(

Jika Anda memiliki akses tambahan, maka Anda dapat melihat proposisi berikut, namun jawaban defaultnya adalah: Jika ini adalah pola akses Anda, optimalkan skema Anda untuk itu.

Jika Anda perlu mengakses data dengan cara tertentu, pastikan Anda menulisnya dengan cara itu terlebih dahulu. Gunakan API pengurangan peta jika Anda harus melakukan migrasi.

Saya mungkin hanya akan menambahkan tabel yang hanya menulis satu baris MinistryOfSound dan satu kolom per pengunjung. (Secara umum, skema yang Anda usulkan sepertinya tidak cocok untuk HBase - karena Anda memiliki banyak penulisan dengan kunci baris yang meningkat secara monoton, jika pasca-pemrosesan hasil duplikat benar-benar merupakan masalah kinerja)

Di sisi lain, jika ini adalah kueri ad-hoc, maka Anda mungkin ingin langsung menggunakan mapreduce-API - mungkin menggunakan interkoneksi Apache Spark dan melakukan panggilan "berbeda" pada data.

Menggunakan Pemindaian untuk kueri analitis bukanlah cara yang saya lakukan.

Jika Anda harus melakukannya menggunakan Pemindaian, saya sarankan Anda menerapkan CoProcessor. Ini dapat menambah Filter dengan status, dan Anda dapat memproyeksikan hasil Pemindaian PrefixFilter di sisi Server Wilayah. Jika Anda baru mengenal CoProcessors, berikut pengantarnya: HBase: Panduan Definitif. Hal ini mengharuskan Anda untuk menyebarkan jar ke classpath RegionServer.

Tapi sekali lagi, jika Anda meledakkan klien Anda dengan melakukan pemfilteran berbeda di sana, Anda mungkin juga meledakkan wilayah Anda karena hotspot di sisipan.

Sebagai alternatif terakhir: Anda mungkin ingin melihat Apache Phoenix, dan melihat apakah Anda dapat memaksakan kunci baris Anda ke dalam sebuah skema, yang darinya Anda dapat melakukan pemilihan yang berbeda pada dua bagian pertama dari kunci baris. Ini jelas mengharuskan Anda memiliki pembatas di kunci baris Anda, atau setidaknya panjang tetap.

person Rick Moritz    schedule 16.03.2017
comment
tidak mencapai solusinya, tetapi postingan Anda informatif, sehingga memberi Anda tanda centang - person aran; 12.09.2017