6.1 Siapa yang mencipta HBase dan mengapa
Dalam kuliah ini, kita akan bercakap tentang alat yang hebat seperti Hbase, yang baru-baru ini mendapat populariti yang hebat: sebagai contoh, Facebook menggunakannya sebagai asas sistem pemesejannya, dan ini sudah banyak berkata.
Kuliah ini akan membincangkan konsep Big Table dan pelaksanaan percumanya, ciri kerja dan perbezaan daripada kedua-dua pangkalan data hubungan klasik (seperti MySQL dan Oracle) dan storan nilai kunci seperti Redis, Aerospike dan memcached. Seperti biasa, mari kita mulakan dengan sejarah isu tersebut. Seperti kebanyakan projek BigData yang lain, Hbase lahir daripada konsep yang dibangunkan oleh Google. Prinsip di sebalik Hbase telah diterangkan dalam artikel Bigtable: Sistem Storan Teragih untuk Data Berstruktur .
Seperti yang kita bincangkan dalam kuliah sebelum ini, fail biasa agak sesuai untuk pemprosesan data kelompok menggunakan paradigma MapReduce. Sebaliknya, maklumat yang disimpan dalam fail agak menyusahkan untuk dikemas kini; Fail juga dilucutkan kemungkinan akses rawak. Untuk kerja yang cepat dan mudah dengan akses rawak, terdapat kelas sistem nosql seperti storan nilai kunci, seperti Aerospike, Redis, Couchbase, Memcached. Walau bagaimanapun, pemprosesan kelompok biasanya sangat menyusahkan dalam sistem ini. Hbase ialah percubaan untuk menggabungkan kemudahan pemprosesan kelompok dengan kemudahan pengemaskinian dan akses rawak.
![](https://cdn.codegym.cc/images/article/54d64a29-4642-4c59-8211-2b143dfcd48a/512.jpeg)
6.2 Model data
HBase ialah pangkalan data nilai kunci berbilang versi yang diedarkan, berorientasikan lajur.
- Data disusun ke dalam jadual yang diindeks oleh kunci utama yang dipanggil RowKey dalam Hbase.
- Untuk setiap kunci RowKey, set atribut (atau lajur) tanpa had boleh disimpan.
- Lajur disusun ke dalam kumpulan lajur yang dipanggil Keluarga Lajur. Sebagai peraturan, lajur yang mempunyai corak penggunaan dan storan yang sama digabungkan menjadi satu Keluarga Lajur.
- Untuk setiap atribut, beberapa versi berbeza boleh disimpan. Versi yang berbeza mempunyai cap masa yang berbeza.
Rekod disimpan secara fizikal dalam susunan disusun RowKey. Dalam kes ini, data yang sepadan dengan Keluarga Lajur yang berbeza disimpan secara berasingan, yang membenarkan, jika perlu, membaca data hanya daripada keluarga lajur yang dikehendaki.
Apabila atribut tertentu dipadamkan, ia tidak dipadamkan secara fizikal serta-merta, tetapi hanya ditandakan dengan bendera batu nisan khas. Pemadaman fizikal data akan berlaku kemudian, apabila operasi Pemadatan Utama dilakukan.
Atribut kepunyaan kumpulan lajur yang sama dan sepadan dengan kunci yang sama disimpan secara fizikal sebagai senarai diisih. Sebarang atribut boleh tiada atau hadir untuk setiap kunci, dan jika atribut tiada, ini tidak menyebabkan overhed menyimpan nilai kosong.
Nama kumpulan senarai dan lajur ditetapkan dan mempunyai reka letak yang jelas. Pada peringkat kumpulan lajur, parameter seperti masa untuk hidup (TTL) dan bilangan maksimum versi yang disimpan ditetapkan. Jika perbezaan antara cap masa untuk versi tertentu dan masa semasa adalah lebih besar daripada TTL, entri ditandakan untuk pemadaman. Jika bilangan versi untuk atribut tertentu melebihi bilangan maksimum versi, rekod juga ditandakan untuk dipadamkan.
![](https://cdn.codegym.cc/images/article/38a31201-f909-4a45-9792-a5d72225f060/512.jpeg)
Model data Hbase boleh diingati sebagai padanan nilai kunci:
<table, RowKey, Column Family, Column, timestamp> -> Value
6.3 Operasi yang disokong
Senarai operasi yang disokong dalam hbase agak mudah. 4 operasi utama disokong:
- Letakkan : tambah entri baru ke hbase. Cap masa entri ini boleh ditetapkan dengan tangan, jika tidak, ia akan ditetapkan secara automatik kepada masa semasa.
- Dapatkan : Dapatkan data untuk RowKey tertentu. Anda boleh menentukan Keluarga Lajur dari mana kami akan mengambil data dan bilangan versi yang ingin kami baca.
- Imbasan : baca rekod satu persatu. Anda boleh menentukan rekod dari mana kami mula membaca, rekod untuk dibaca, bilangan rekod untuk dibaca, Keluarga Lajur dari mana bacaan akan dilakukan dan bilangan maksimum versi untuk setiap rekod.
- Padam : Tandakan versi khusus untuk pemadaman. Tidak akan ada pemadaman fizikal, ia akan ditangguhkan sehingga Pemadatan Utama seterusnya (lihat di bawah).
6.4 Seni Bina
HBase ialah pangkalan data teragih yang boleh dijalankan pada berpuluh-puluh atau beratus-ratus pelayan fizikal, memastikan operasi tanpa gangguan walaupun beberapa daripadanya gagal. Oleh itu, seni bina HBase agak kompleks berbanding pangkalan data hubungan klasik.
![](https://cdn.codegym.cc/images/article/5bae086c-b213-47db-be33-a23d854a1543/1024.jpeg)
HBase menggunakan dua proses utama untuk kerjanya:
1. Pelayan Wilayah - Melayan satu atau lebih kawasan. Rantau ialah julat rekod yang sepadan dengan julat khusus RowKeys berturut-turut. Setiap wilayah mengandungi:
- Storan Berterusan ialah storan data utama dalam HBase. Data disimpan secara fizikal pada HDFS, dalam format HFile khas. Data dalam HFile disimpan dalam susunan disusun RowKey. Satu pasangan (rantau, keluarga lajur) sepadan dengan sekurang-kurangnya satu HFIle.
- MemStore - tulis penimbal. Memandangkan data disimpan dalam HFile d dalam susunan disusun, agak mahal untuk mengemas kini HFile setiap rekod. Sebaliknya, apabila menulis, data memasuki kawasan memori MemStore khas, di mana ia terkumpul untuk beberapa waktu. Apabila MemStore diisi kepada beberapa nilai kritikal, data ditulis ke HFile baharu.
- BlockCache - cache untuk membaca. Membolehkan anda menjimatkan masa dengan ketara pada data yang dibaca dengan kerap.
- Tulis Log Hadapan (WAL) . Memandangkan data ditulis ke memstore, terdapat beberapa risiko kehilangan data akibat ranap sistem. Untuk mengelakkan ini daripada berlaku, semua operasi sebelum pelaksanaan sebenar manipulasi jatuh ke dalam fail log khas. Ini membolehkan anda memulihkan data selepas sebarang kegagalan.
2. Master Server - pelayan utama dalam kelompok HBase. Master menguruskan pengedaran wilayah di kalangan Pelayan Wilayah, mengekalkan daftar wilayah, menguruskan pelancaran tugas biasa, dan melakukan kerja berguna lain.
Untuk menyelaraskan tindakan antara perkhidmatan, HBase menggunakan Apache ZooKeeper, perkhidmatan khas yang direka untuk mengurus konfigurasi dan menyegerakkan perkhidmatan.
Apabila jumlah data di rantau itu meningkat dan mencapai saiz tertentu, Hbase memulakan pemisahan, operasi yang membahagikan rantau ini sebanyak 2. Untuk mengelakkan pembahagian wilayah yang berterusan, anda boleh pratetapkan sempadan kawasan dan meningkatkan maksimumnya. saiz.
Memandangkan data untuk satu rantau boleh disimpan dalam beberapa HFiles, Hbase secara berkala menggabungkannya bersama-sama untuk mempercepatkan kerja. Operasi ini dipanggil pemadatan dalam Hbase. Pemadatan terdiri daripada dua jenis:
- Pemadatan kecil . Bermula secara automatik, berjalan di latar belakang. Mempunyai keutamaan yang rendah berbanding dengan operasi Hbase yang lain.
- Pemadatan utama . Ia dilancarkan dengan tangan atau apabila berlakunya pencetus tertentu (contohnya, oleh pemasa). Ia mempunyai keutamaan yang tinggi dan boleh memperlahankan kelompok dengan ketara. Pemadatan Utama sebaiknya dilakukan pada masa beban pada kelompok kecil. Major Compaction juga secara fizikal memadamkan data yang ditandakan dengan batu nisan sebelum ini.
6.5 Cara untuk bekerja dengan HBase
HBase Shell
Cara paling mudah untuk bermula dengan Hbase ialah menggunakan utiliti shell hbase. Ia tersedia serta-merta selepas memasang hbase pada mana-mana nod kluster hbase.![](https://cdn.codegym.cc/images/article/d13e20e1-fed9-444a-929c-15ab43d8209b/800.jpeg)
Cangkang Hbase ialah konsol jruby dengan sokongan terbina dalam untuk semua operasi asas Hbase. Berikut ialah contoh mencipta jadual pengguna dengan dua keluarga lajur, melakukan beberapa manipulasi padanya, dan menjatuhkan jadual pada penghujung dalam shell hbase:
create 'users', {NAME => 'user_profile', VERSIONS => 5}, {NAME => 'user_posts', VERSIONS => 1231231231}
put 'users', 'id1', 'user_profile:name', 'alexander'
put 'users', 'id1', 'user_profile:second_name', 'alexander'
get 'users', 'id1'
put 'users', 'id1', 'user_profile:second_name', 'kuznetsov'
get 'users', 'id1'
get 'users', 'id1', {COLUMN => 'user_profile:second_name', VERSIONS => 5}
put 'users', 'id2', 'user_profile:name', 'vasiliy'
put 'users', 'id2', 'user_profile:second_name', 'ivanov'
scan 'users', {COLUMN => 'user_profile:second_name', VERSIONS => 5}
delete 'users', 'id1', 'user_profile:second_name'
get 'users', 'id1'
disable 'users'
drop 'users'
API asli
Seperti kebanyakan projek berkaitan hadoop yang lain, hbase dilaksanakan dalam java, jadi api asli tersedia di Java. API Asli didokumentasikan dengan baik di laman web rasmi. Berikut ialah contoh penggunaan API Hbase yang diambil dari sana:
import java.io.IOException;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
public class MyLittleHBaseClient {
public static void main(String[] args) throws IOException {
Configuration config = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(config);
try {
Table table = connection.getTable(TableName.valueOf("myLittleHBaseTable"));
try {
Put p = new Put(Bytes.toBytes("myLittleRow"));
p.add(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier"),
Bytes.toBytes("Some Value"));
table.put(p);
Get g = new Get(Bytes.toBytes("myLittleRow"));
Result r = table.get(g);
byte [] value = r.getValue(Bytes.toBytes("myLittleFamily"),
Bytes.toBytes("someQualifier"));
String valueStr = Bytes.toString(value);
System.out.println("GET: " + valueStr);
Scan s = new Scan();
s.addColumn(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier"));
ResultScanner scanner = table.getScanner(s);
try {
for (Result rr = scanner.next(); rr != null; rr = scanner.next()) {
System.out.println("Found row: " + rr);
}
} finally {
scanner.close();
}
} finally {
if (table != null) table.close();
}
} finally {
connection.close();
}
}
}
Jimat, REST dan sokongan untuk bahasa pengaturcaraan lain
Untuk bekerja daripada bahasa pengaturcaraan lain, Hbase menyediakan API Thrift dan API Rehat. Berdasarkan mereka, pelanggan dibina untuk semua bahasa pengaturcaraan utama: python, PHP, Skrip Java, dll.
6.6 Beberapa ciri bekerja dengan HBase
-
Hbase menyepadukan keluar dari kotak dengan MapReduce, dan boleh digunakan sebagai input dan output menggunakan TableInputFormat dan TableOutputFormat khas.
-
Adalah sangat penting untuk memilih RowKey yang betul. RowKey mesti menyediakan pengedaran sekata yang baik di seluruh wilayah, jika tidak, terdapat risiko apa yang dipanggil "kawasan panas" - kawasan yang digunakan lebih kerap daripada yang lain, yang membawa kepada penggunaan sumber sistem yang tidak cekap.
-
Jika data tidak dimuat naik secara tunggal, tetapi serta-merta dalam kelompok besar, Hbase menyokong mekanisme BulkLoad khas yang membolehkan anda memuat naik data dengan lebih pantas daripada menggunakan Puts tunggal. BulkLoad pada asasnya ialah operasi dua langkah:
- Pembentukan HFile tanpa penyertaan meletakkan menggunakan kerja MapReduce khas
- Memasukkan fail ini terus ke dalam Hbase
-
Hbase menyokong pengeluaran metriknya ke pelayan pemantauan Ganglia. Ini boleh sangat membantu semasa mentadbir Hbase untuk mengetahui bahagian bawah isu hbase.
kunci baris
RowKey ialah ID pengguna, yang merupakan GUID, rentetan yang dijana khas untuk menjadi unik di seluruh dunia. GUIID diedarkan secara sama rata, yang memberikan pengedaran data yang baik merentas pelayan.
Keluarga Lajur
Storan kami menggunakan dua keluarga lajur:
- data. Kumpulan lajur ini menyimpan data yang tidak lagi berkaitan untuk tujuan pengiklanan, seperti fakta bahawa pengguna telah melawati URL tertentu. TTL untuk Keluarga Lajur ini ditetapkan kepada 2 bulan, had bilangan versi ialah 2000.
- longdata. Kumpulan lajur ini menyimpan data yang tidak kehilangan kaitannya dari semasa ke semasa, seperti jantina, tarikh lahir dan ciri pengguna "kekal" yang lain.
pembesar suara
Setiap jenis fakta pengguna disimpan dalam lajur yang berasingan. Contohnya, lajur Data:_v menyimpan URL yang dilawati oleh pengguna dan lajur LongData:jantina menyimpan jantina pengguna.
Cap masa fakta ini disimpan sebagai cap masa. Contohnya, dalam lajur Data:_v, cap masa ialah masa pengguna melawat URL tertentu.
Struktur storan data pengguna ini sangat sesuai dengan corak penggunaan kami dan membolehkan anda mengemas kini data pengguna dengan cepat, mendapatkan semua maklumat yang diperlukan tentang pengguna dengan cepat dan, menggunakan MapReduce, memproses data dengan cepat tentang semua pengguna sekaligus.
6.7 Alternatif
HBase agak rumit untuk ditadbir dan digunakan, jadi sebelum menggunakan HBase adalah masuk akal untuk melihat alternatif:
-
Pangkalan Data Hubungan . Alternatif yang sangat baik, terutamanya dalam kes apabila data dimuatkan pada satu mesin. Juga, pertama sekali, anda harus memikirkan pangkalan data hubungan dalam kes apabila transaksi indeks selain daripada yang utama adalah penting.
-
Storan Nilai-Kekunci . Storan seperti Redis dan Aerospike lebih sesuai apabila kependaman diperlukan dan pemprosesan kelompok kurang penting.
-
Fail dan pemprosesannya dengan MapReduce . Jika data hanya ditambah dan jarang dikemas kini/diubah, maka adalah lebih baik untuk tidak menggunakan HBase, tetapi hanya menyimpan data dalam fail. Untuk memudahkan kerja dengan fail, anda boleh menggunakan alatan seperti Hive, Pig dan Impala.
Penggunaan HBase adalah wajar apabila:
- Terdapat banyak data, dan mereka tidak muat pada satu komputer / pelayan
- Data kerap dikemas kini dan dipadamkan
- Terdapat "kunci" yang jelas dalam data, yang memudahkan untuk mengikat semua yang lain
- Perlu pemprosesan kelompok
- Perlu akses rawak kepada data dengan kunci tertentu
GO TO FULL VERSION