Contoh HBase POC



Catatan ini membincangkan mengenai contoh Proof of Concept untuk HBase. Anda boleh mendapatkan penjelasan yang jelas mengenai konsep untuk lebih memahami HBase anda.

Di blog ini kita akan membincangkan mengenai contoh Proof of Concept untuk HBase.





Di sini kita mempunyai satu set Data seperti pada gambar di bawah.

Sample_Hbase_Use_case



Kumpulan data ini terdiri daripada perincian mengenai durasi jumlah panggilan masuk, panggilan keluar dan mesej yang dikirim dari nombor telefon bimbit tertentu pada tarikh tertentu.

Medan pertama mewakili tarikh, medan kedua mewakili nombor telefon bimbit, bidang ketiga mewakili jumlah tempoh panggilan masuk, bidang keempat mewakili jumlah keseluruhan panggilan keluar, dan bidang kelima mewakili jumlah keseluruhan mesej yang dihantar.

Sekarang tugas kita adalah untuk mendapatkan maklumat mengenai jangka masa panggilan masuk dan keluar yang dihantar, dari nombor telefon pada tarikh tertentu.



Dalam kes penggunaan ini, saya cuba menyaring rekod 15ikaMac 2014. Berikut adalah Program HBase untuk mencapainya.

Berikut adalah kod lengkapnya.

awam kelas contoh{

peribadi statik Konfigurasi pengesahan

statik HTable meja

awam contoh (String tableName, String colFams) balingan IOException {

pengesahan = Konfigurasi HBase. buat ()

createTable (tableName, colFams)

meja = baru HTable ( pengesahan , nama meja)

}

batal createTable (String tableName, String colFams) balingan IOException {

HBaseAdmin hbase = baru HBaseAdmin ( pengesahan )

HTableDescriptor desc = baru HTableDescriptor (tableName)

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

desc.addFamily (meta)

hbase.createTable (turun)

}

awam statik batal addColumnEntry (String tableName, String baris,

String colFamilyName, String colName, String nilai)

balingan IOException {

bait [] rowKey = Bait. keBait (baris)

Letakkan putdata = baru Masukkan (rowKey)

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

Bait. keBait (nilai))

meja .put (putdata)

}

awam statik batal getAllRecord (String tableName, String startPartialKey,

String endPartialKey) balingan IOException {

cuba {

Imbasan s

sekiranya (startPartialKey == batal || endPartialKey == batal )

s = baru Imbas()

yang lain

s = baru Imbasan (Byte. keBait (mulaPartialKey),

Bait. keBait (endPartialKey))

ResultScanner ss = meja .getScanner

Peta HashoutputRec = baru Peta Hash()

Rentetan imsi = ''

untuk (Hasil r: ss) {

HashMap keyVal = baru Peta Hash ()

untuk (KeyValue kv: r.raw ()) {

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

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

baru Rentetan (kv.getValue ()))

outputRec.put (imsi, keyVal)

sekiranya (keyVal.size () == 3)

Sistem. keluar .println (ambil + '' + 'Beberapa minit masuk:'

+ keyVal.get ('c1 ″) +' Minit akan datang: '

+ keyVal.get ('c2 ″) +' Mesej: '

+ keyVal.get ('c3'))

}

}

} akhirnya {

}

}

menukar dua kali ganda menjadi int

awam statik batal utama (String [] args) balingan IOException {

String tableName = 'daterecords'

String colFamilyNames = 'i'

ujian sampel = baru contoh (tableName, colFamilyNames)

String fileName = '/ rumah / cloudera / Desktop / data'

// Ini akan merujuk satu baris pada satu masa

Garisan tali = batal

cuba {

// FileReader membaca fail teks dalam pengekodan lalai.

FileReader fileReader = baru FileReader (nama fail)

// Selalu bungkus FileReader dalam BufferedReader.

BufferedReader bufferedReader = baru BufferedReader (fileReader)

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

Rentetan [] nilai = line.split ('')

tambahColumnEntry (nama meja, nilai [0] + '-' + nilai [1],

colFamilyNames, 'c1', nilai [2])

tambahColumnEntry (nama meja, nilai [0] + '-' + nilai [1],

colFamilyNames, 'c2', nilai [3])

tambahColumnEntry (nama meja, nilai [0] + '-' + nilai [1],

colFamilyNames, 'c3', nilai [4])

}

bufferedReader.close ()

} tangkap (Bekas FileNotFoundException) {

Sistem. keluar .println ('Tidak dapat membuka fail '' + nama file + '' ')

} tangkap (Bekas IOException) {

Sistem. keluar .println ('Ralat membaca fail '' + Nama fail + '' ')

// Atau kita boleh melakukan ini:

// ex.printStackTrace ()

}

dapatkanAllRecord (Nama jadual, '20140315', '20140316')

}

}

Di sini kita telah membuat objek Konfigurasi, kelas HTable dan membuat Jadual Hbase dengan nama: kod data dan keluarga lajur: i .

Dalam kes penggunaan ini, kita akan mengambil kombinasi tarikh dan nombor telefon bimbit yang dipisahkan dengan '-' sebagai kunci baris untuk jadual Hbase ini dan jangka masa panggilan masuk, keluar ', jumlah mesej yang dihantar sebagai lajur' c1 ',' c2 ',' c3 'untuk keluarga lajur' i '.

Kami mempunyai data input yang disimpan dalam sistem fail tempatan Cloudera. Oleh itu, kita perlu menulis Java Logic yang membaca data dari fail tersebut.

Di bawah ini adalah logik Java.

Dalam kaedah ini kita menyimpan data ke dalam jadual untuk setiap lajur keluarga lajur.

Kami dapat memeriksa data yang disimpan di dalam jadual Hbase ‘daterecords’ dengan menggunakan perintah scan.

Anda akan menerima data seperti pada gambar di bawah.

Sekarang kita telah memasukkan data ke dalam Jadual HBase dengan jayanya.

Mari kita ambil semula rekod yang disimpan dalam Jadual tarikh tertentu.

Dalam kes penggunaan ini, kami berusaha mendapatkan semula catatan Tarikh: 15ikaMac 2014

Untuk mendapatkan semula rekod, kami telah membuat Kaedah

getAllRecord (String tableName, String startPartialKey, String endPartialKey)

Parameter Pertama mewakili nama jadual, yang kedua mewakili tarikh mula dari mana kita perlu mengambil data dan yang ketiga adalah tarikh tarikh mula seterusnya.

Cth:

getAllRecord (tableName, '20140315', '20140316')

Sekarang mari kita fahami logik kaedah ini.

Kami cuba mengimbas Jadual Hbase dengan Menggunakan API HBase dengan bantuan startPartialKey dan endPartialKey.

Oleh kerana StartPartialKey dan endPartialkey tidak kosong, ia akan pergi ke blok lain dan mengimbas rekod yang mempunyai nilai startPartialKey.

Kami telah membuat objek Result scanner yang menyimpan rekod yang dipindai dari jadual Hbase dan HashMap untuk menyimpan output yang akan dihasilkan.

apakah agregasi di java

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

imsi adalah rentetan yang didefinisikan untuk menyimpan nombor Mudah Alih dan keyVal adalah Peta Hash yang menyimpan output yang diambil dari lajur telefon tertentu.

Kami telah memberi 20140315-1234567890 sebagai kunci baris ke jadual Hbase. Pada tahun 20140315 ini mewakili tarikh dan 1234567890 mewakili nombor Mudah Alih.

Oleh kerana kami hanya memerlukan nombor telefon bimbit, kami menggunakan kaedah substring untuk mendapatkannya.

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

Akhirnya kami cuba mencetaknya di konsol.

Hasilnya akan seperti pada gambar di bawah.

Kami telah berjaya mengambil rekod Tarikh: 15ikaMac 2014.