HBase dengan Java

1. Ikhtisar

Pada artikel ini, kita akan melihat pustaka Java Client database HBase . HBase adalah database terdistribusi yang menggunakan sistem file Hadoop untuk menyimpan data.

Kami akan membuat klien contoh Java dan tabel yang akan kami tambahkan beberapa catatan sederhana.

2. Struktur Data HBase

Di HBase, data dikelompokkan ke dalam keluarga kolom. Semua anggota kolom dari keluarga kolom memiliki awalan yang sama.

Misalnya, kolom family1: qualifier1 dan family1 : qualifier2 keduanya anggota family1 keluarga kolom. Semua anggota keluarga kolom disimpan bersama di sistem file.

Di dalam keluarga kolom, kita bisa meletakkan baris yang memiliki kualifikasi tertentu. Kita bisa menganggap kualifikasi sebagai semacam nama kolom.

Mari kita lihat contoh catatan dari Hbase:

Family1:{ 'Qualifier1':'row1:cell_data', 'Qualifier2':'row2:cell_data', 'Qualifier3':'row3:cell_data' } Family2:{ 'Qualifier1':'row1:cell_data', 'Qualifier2':'row2:cell_data', 'Qualifier3':'row3:cell_data' }

Kami memiliki dua keluarga kolom, masing-masing memiliki tiga kualifikasi dengan beberapa data sel di dalamnya. Setiap baris memiliki kunci baris - ini adalah pengenal baris unik. Kami akan menggunakan kunci baris untuk memasukkan, mengambil dan menghapus data.

3. Ketergantungan Maven Klien HBase

Sebelum kita terhubung ke HBase, kita perlu menambahkan dependensi hbase-client dan hbase :

 org.apache.hbase hbase-client ${hbase.version}   org.apache.hbase hbase ${hbase.version} 

4. Pengaturan HBase

Kita perlu mengatur HBase agar dapat terhubung dari perpustakaan klien Java ke sana. Penginstalan di luar cakupan artikel ini tetapi Anda dapat melihat beberapa panduan penginstalan HBase online.

Selanjutnya, kita perlu memulai master HBase secara lokal dengan menjalankan:

hbase master start

5. Menghubungkan ke HBase dari Java

Untuk menghubungkan secara terprogram dari Java ke HBase, kita perlu mendefinisikan file konfigurasi XML. Kami memulai instance HBase kami di localhost jadi kami perlu memasukkannya ke dalam file konfigurasi:

  hbase.zookeeper.quorum localhost   hbase.zookeeper.property.clientPort 2181   

Sekarang kita perlu mengarahkan klien HBase ke file konfigurasi itu:

Configuration config = HBaseConfiguration.create(); String path = this.getClass() .getClassLoader() .getResource("hbase-site.xml") .getPath(); config.addResource(new Path(path)); 

Selanjutnya, kami memeriksa apakah koneksi ke HBase berhasil - jika terjadi kegagalan, MasterNotRunningException akan ditampilkan :

HBaseAdmin.checkHBaseAvailable(config);

6. Membuat Struktur Database

Sebelum kita mulai menambahkan data ke HBase, kita perlu membuat struktur data untuk memasukkan baris. Kami akan membuat satu tabel dengan dua keluarga kolom:

private TableName table1 = TableName.valueOf("Table1"); private String family1 = "Family1"; private String family2 = "Family2";

Pertama, kita perlu membuat koneksi ke database dan mendapatkan objek admin , yang akan kita gunakan untuk memanipulasi struktur database:

Connection connection = ConnectionFactory.createConnection(config) Admin admin = connection.getAdmin();

Kemudian, kita bisa membuat tabel dengan meneruskan instance kelas HTableDescriptor ke metode createTable () pada objek admin :

HTableDescriptor desc = new HTableDescriptor(table1); desc.addFamily(new HColumnDescriptor(family1)); desc.addFamily(new HColumnDescriptor(family2)); admin.createTable(desc);

7. Menambah dan Mengambil Elemen

Dengan tabel yang dibuat, kita dapat menambahkan data baru ke dalamnya dengan membuat objek Put dan memanggil metode put () pada objek Tabel :

byte[] row1 = Bytes.toBytes("row1") Put p = new Put(row1); p.addImmutable(family1.getBytes(), qualifier1, Bytes.toBytes("cell_data")); table1.put(p);

Mengambil baris yang dibuat sebelumnya dapat dilakukan dengan menggunakan kelas Get :

Get g = new Get(row1); Result r = table1.get(g); byte[] value = r.getValue(family1.getBytes(), qualifier1);

The row1 adalah identifier baris - kita dapat menggunakannya untuk mengambil baris tertentu dari database. Saat menelepon:

Bytes.bytesToString(value)

hasil yang dikembalikan sebelumnya adalah cell_data yang disisipkan .

8. Scanning dan Filtering

Kita bisa memindai tabel, mengambil semua elemen di dalam qualifier yang diberikan dengan menggunakan objek Scan (perhatikan bahwa ResultScanner memperluas Closable , jadi pastikan untuk memanggil close () di atasnya setelah Anda selesai):

Scan scan = new Scan(); scan.addColumn(family1.getBytes(), qualifier1); ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { System.out.println("Found row: " + result); } 

Operasi itu akan mencetak semua baris di dalam qualifier1 dengan beberapa informasi tambahan seperti stempel waktu:

Found row: keyvalues={Row1/Family1:Qualifier1/1488202127489/Put/vlen=9/seqid=0}

Kami dapat mengambil catatan tertentu dengan menggunakan filter.

Pertama, kami membuat dua filter. The Filter1 menetapkan bahwa pemindaian permintaan akan mengambil elemen yang lebih besar dari row1, dan filter2 menetapkan bahwa kita tertarik hanya dalam baris yang memiliki kualifikasi sama untuk qualifier1 :

Filter filter1 = new PrefixFilter(row1); Filter filter2 = new QualifierFilter( CompareOp.GREATER_OR_EQUAL, new BinaryComparator(qualifier1)); List filters = Arrays.asList(filter1, filter2);

Kemudian kita bisa mendapatkan hasil dari kueri Pindai :

Scan scan = new Scan(); scan.setFilter(new FilterList(Operator.MUST_PASS_ALL, filters)); try (ResultScanner scanner = table.getScanner(scan)) { for (Result result : scanner) { System.out.println("Found row: " + result); } }

Saat membuat FilterList kita melewati Operator.MUST_PASS_ALL - itu berarti bahwa semua filter harus dipenuhi. Kita dapat memilih Operation.MUST_PASS_ONE jika hanya satu filter yang perlu dipenuhi. Dalam set yang dihasilkan, kami hanya akan memiliki baris yang cocok dengan filter yang ditentukan.

9. Menghapus Baris

Terakhir, untuk menghapus baris, kita bisa menggunakan kelas Hapus :

Delete delete = new Delete(row1); delete.addColumn(family1.getBytes(), qualifier1); table.delete(delete);

Kami menghapus baris1 yang berada di dalam keluarga1 .

10. Kesimpulan

Dalam tutorial singkat ini, kami fokus pada komunikasi dengan database HBase. Kami melihat bagaimana menghubungkan ke HBase dari perpustakaan klien Java dan bagaimana menjalankan berbagai operasi dasar.

Penerapan semua contoh dan cuplikan kode ini dapat ditemukan di proyek GitHub; ini adalah proyek Maven, jadi semestinya mudah untuk mengimpor dan menjalankannya apa adanya.