Sampel HBase POC



Posting ini membahas tentang contoh Bukti Konsep untuk HBase. Anda dapat menemukan penjelasan yang jelas tentang konsep tersebut untuk lebih memahami HBase.

Di blog ini kita akan membahas tentang contoh Bukti Konsep untuk HBase.





Di sini kami memiliki kumpulan Data seperti pada gambar di bawah ini.

Sample_Hbase_Use_case



Kumpulan data ini terdiri dari rincian tentang durasi total panggilan masuk, panggilan keluar dan pesan yang dikirim dari nomor ponsel tertentu pada tanggal tertentu.

Bidang pertama menunjukkan tanggal, bidang kedua menunjukkan nomor ponsel, bidang ketiga menunjukkan total durasi panggilan masuk, bidang keempat menunjukkan total durasi panggilan keluar, dan bidang kelima menunjukkan jumlah total pesan yang dikirim.

Sekarang tugas kita adalah mengambil informasi durasi panggilan masuk dan keluar dan pesan yang dikirim, dari nomor telepon pada tanggal tertentu.



Dalam kasus penggunaan ini, saya mencoba memfilter catatan 15thMaret 2014. Berikut adalah Program HBase untuk mencapai ini.

Di bawah ini adalah kode lengkapnya.

publik kelas Sampel{

pribadi statis Konfigurasi conf

statis HTable meja

publik contoh (String tableName, String colFams) melempar IOException {

conf = HBaseConfiguration. membuat ()

createTable (tableName, colFams)

meja = baru HTable ( conf , tableName)

}

kosong createTable (String tableName, String colFams) melempar IOException {

HBaseAdmin hbase = baru HBaseAdmin ( conf )

HTableDescriptor desc = baru HTableDescriptor (nama tabel)

HColumnDescriptor meta = baru HColumnDescriptor (colFams.getBytes ())

desc.addFamily (meta)

hbase.createTable (desc)

}

publik statis kosong addColumnEntry (String tableName, String row,

String colFamilyName, String colName, String values)

melempar IOException {

byte [] rowKey = Byte. toBytes (baris)

Masukan putdata = baru Letakkan (rowKey)

putdata.add (Bytes. toBytes (colFamilyName), Bytes. toBytes (colName),

Byte. toBytes (nilai))

meja .put (putdata)

}

publik statis kosong getAllRecord (String tableName, String startP PartialKey,

String endP PartialKey) melempar IOException {

mencoba {

Pindai s

jika (startP PartialKey == batal || endPihakKey == batal )

s = baru Pindai ()

lain

s = baru Pindai (Bytes. toBytes (startPihakKey),

Byte. toBytes (endP PartialKey))

ResultScanner ss = meja .getScanner (s)

HashMapoutputRec = baru HashMap()

String imsi = “”

untuk (Hasil r: ss) {

HashMap keyVal = baru HashMap ()

untuk (Nilai Kunci kv: r.raw ()) {

imsi = baru String (kv.getRow ()). Substring (10)

keyVal.put ( baru String (kv.getQualifier ()),

baru String (kv.getValue ()))

outputRec.put (imsi, keyVal)

jika (keyVal.size () == 3)

Sistem. di luar .println (take + ”” + “Incoming minutes:”

+ keyVal.get (“c1 ″) +” Menit keluar: ”

+ keyVal.get (“c2 ″) +” Pesan: ”

java kapan harus menggunakan ini

+ keyVal.get ('c3'))

}

}

} akhirnya {

}

}

publik statis kosong utama (String [] args) melempar IOException {

String tableName = “daterecords”

String colFamilyNames = “i”

uji sampel = baru sample (tableName, colFamilyNames)

String fileName = “/ home / cloudera / Desktop / data”

// Ini akan mereferensikan satu baris dalam satu waktu

Garis string = batal

mencoba {

// FileReader membaca file teks dalam pengkodean default.

FileReader fileReader = baru FileReader (nama file)

// Selalu bungkus FileReader di BufferedReader.

BufferedReader bufferedReader = baru BufferedReader (fileReader)

sementara ((line = bufferedReader.readLine ())! = batal ) {

String [] nilai = baris.split ('')

addColumnEntry (nama tabel, nilai [0] + “-” + nilai [1],

colFamilyNames, 'c1', nilai [2])

addColumnEntry (nama tabel, nilai [0] + “-” + nilai [1],

colFamilyNames, 'c2', nilai [3])

addColumnEntry (nama tabel, nilai [0] + “-” + nilai [1],

colFamilyNames, 'c3', nilai [4])

}

bufferedReader.close ()

} menangkap (FileNotFoundException ex) {

Sistem. di luar .println ('Tidak dapat membuka file' '+ nama file +' ')

} menangkap (IOException ex) {

Sistem. di luar .println ('Kesalahan membaca file '' + namafile + ''')

// Atau kita bisa melakukan ini:

// ex.printStackTrace ()

}

getAllRecord (tableName, “20140315”, “20140316”)

}

}

Di sini kita telah membuat objek Konfigurasi, kelas HTable dan membuat Tabel Hbase dengan nama: daterecords dan keluarga kolom: saya .

Dalam kasus penggunaan ini, kami akan mengambil kombinasi tanggal dan nomor ponsel yang dipisahkan oleh '-' sebagai kunci baris untuk tabel Hbase ini dan durasi panggilan masuk dan keluar ', jumlah pesan yang dikirim sebagai kolom' c1 ',' c2 ',' c3 'untuk keluarga kolom' i '.

Kami memiliki data masukan yang disimpan dalam sistem file lokal Cloudera. Jadi kita perlu menulis Java Logic yang membaca data dari file tersebut.

Di bawah ini adalah logika Java.

Dalam metode ini kami menyimpan data ke dalam tabel untuk setiap kolom dari keluarga kolom.

Kita dapat memeriksa data yang disimpan dalam tabel Hbase 'daterecords' dengan menggunakan perintah scan.

Anda akan menerima data seperti pada gambar di bawah ini.

apa kacang di jawa

Sekarang kami telah berhasil memasukkan data ke dalam Tabel HBase.

Mari kita ambil catatan yang disimpan di Tabel tanggal tertentu.

Dalam kasus penggunaan ini, kami mencoba mengambil catatan Tanggal: 15thMaret 2014

Untuk mengambil catatan kami telah membuat Metode

mendapatkan

Parameter Pertama mewakili nama tabel, yang kedua mewakili tanggal mulai dari mana kita perlu mengambil data dan yang ketiga adalah tanggal mulai berikutnya.

Misalnya:

getAllRecord (tableName, “20140315”, “20140316”)

Sekarang mari kita pahami logika dari metode ini.

Kami mencoba memindai Tabel Hbase dengan Menggunakan API HBase dengan bantuan startP PartialKey dan endP PartialKey.

Karena StartParsialKey dan endParsialkey bukan null, ia akan pergi ke blok lain dan memindai catatan yang memiliki nilai startParsialKey.

Kami telah membuat objek pemindai Hasil yang menyimpan catatan yang dipindai dari tabel Hbase dan HashMap untuk menyimpan keluaran yang akan dihasilkan.

Kami membuat objek Result untuk mendapatkan penyimpanan data di Result Scanner dan menjalankan loop for.

imsi adalah string yang didefinisikan untuk menyimpan nomor Ponsel dan keyVal adalah Peta Hash yang menyimpan keluaran yang diambil dari kolom telepon tertentu.

Kami telah memberi 20140315-1234567890 sebagai rowkey ke tabel Hbase. Dalam 20140315 ini mewakili tanggal dan 1234567890 mewakili nomor Ponsel.

Karena kami hanya memerlukan nomor ponsel, kami menggunakan metode substring untuk mengambilnya.

Kami mengambil data dari r.raw () dan menyimpannya di HashMap dengan menggunakan Put.

Akhirnya kami mencoba mencetaknya di konsol.

Outputnya akan seperti pada gambar di bawah ini.

Kami telah berhasil mengambil catatan Tanggal: 15thMaret 2014.