6.1 Sapa sing nemokke HBase lan ngapa

Ing kuliah iki, kita bakal ngomong babagan alat sing apik banget kaya Hbase, sing bubar entuk popularitas gedhe: contone, Facebook nggunakake minangka basis sistem olahpesen, lan iki wis ngandika akeh.

Kuliah bakal ngomong babagan konsep Big Table lan implementasine gratis, fitur karya lan prabédan saka database relasional klasik (kayata MySQL lan Oracle) lan panyimpenan nilai kunci kayata Redis, Aerospike lan memcached. Kaya biasane, ayo miwiti karo sejarah masalah kasebut. Kaya akeh proyek BigData liyane, Hbase lair saka konsep sing dikembangake dening Google. Prinsip ing mburi Hbase diterangake ing Bigtable: Sistem Panyimpenan Distribusi kanggo artikel Data Terstruktur .

Kaya sing wis dibahas ing kuliah sadurunge, file biasa cukup cocog kanggo pangolahan data batch nggunakake paradigma MapReduce. Ing tangan liyane, informasi sing disimpen ing file rada ora trep kanggo nganyari; File uga sangsoro saka kamungkinan akses acak. Kanggo karya sing cepet lan trep kanthi akses acak, ana kelas sistem nosql kayata panyimpenan nilai kunci, kayata Aerospike, Redis, Couchbase, Memcached. Nanging, pangolahan batch biasane ora trep ing sistem kasebut. Hbase minangka upaya kanggo nggabungake kenyamanan proses batch kanthi gampang nganyari lan akses acak.

6.2 Model data

HBase minangka basis data nilai kunci sing disebarake, orientasi kolom, multiversi.

  • Data kasebut disusun dadi tabel sing diindeks dening kunci utama sing diarani RowKey ing Hbase.
  • Kanggo saben tombol RowKey, set atribut (utawa kolom) tanpa watesan bisa disimpen.
  • Kolom disusun dadi klompok kolom sing diarani Column Family. Minangka aturan, kolom sing nduweni pola panggunaan lan panyimpenan sing padha digabung dadi siji Keluarga Kolom.
  • Kanggo saben atribut, sawetara versi beda bisa disimpen. Versi sing beda duwe stempel wektu sing beda.

Rekaman disimpen sacara fisik ing urutan RowKey. Ing kasus iki, data sing cocog karo Family Column beda disimpen kanthi kapisah, sing ngidini, yen perlu, kanggo maca data mung saka kulawarga kolom sing dikarepake.

Nalika atribut tartamtu dibusak, ora langsung dibusak sacara fisik, nanging mung ditandhani karo flag nisan khusus. Pambusakan fisik data bakal kedadeyan mengko, nalika operasi Compaction Utama ditindakake.

Atribut sing ana ing klompok kolom sing padha lan cocog karo tombol sing padha disimpen sacara fisik minangka dhaptar sing diurutake. Sembarang atribut bisa absen utawa saiki kanggo saben tombol, lan yen atribut ora ana, iki ora nyebabake overhead kanggo nyimpen nilai kosong.

Dhaptar lan jeneng klompok kolom tetep lan duwe tata letak sing jelas. Ing tingkat klompok kolom, paramèter kayata wektu urip (TTL) lan jumlah maksimum versi sing disimpen disetel. Yen prabédan antarane stempel wektu kanggo versi tartamtu lan wektu saiki luwih gedhe tinimbang TTL, entri kasebut ditandhani kanggo pambusakan. Yen jumlah versi kanggo atribut tartamtu ngluwihi jumlah maksimum versi, rekaman kasebut uga ditandhani kanggo pambusakan.

Model data Hbase bisa dieling-eling minangka match-value kunci:

<table, RowKey, Column Family, Column, timestamp> -> Value

6.3 Operasi sing didhukung

Dhaptar operasi sing didhukung ing hbase cukup prasaja. 4 operasi utama didhukung:

  • Put : nambah entri anyar menyang hbase. Stempel wektu entri iki bisa disetel kanthi tangan, yen ora bakal disetel kanthi otomatis menyang wektu saiki.
  • Entuk : Entuk data kanggo RowKey tartamtu. Sampeyan bisa nemtokake Kulawarga Column saka ngendi kita bakal njupuk data lan jumlah versi sing arep diwaca.
  • Pindai : maca cathetan siji-siji. Sampeyan bisa nemtokake rekaman saka ngendi kita miwiti maca, rekaman sing bakal diwaca, jumlah rekaman sing bakal diwaca, Keluarga Column saka ngendi maca bakal dileksanakake lan jumlah maksimum versi kanggo saben rekaman.
  • Busak : Tandhani versi tartamtu kanggo mbusak. Ora bakal ana pambusakan fisik, bakal ditundha nganti Compaction Utama sabanjure (ndeleng ngisor).

6.4 Arsitektur

HBase minangka basis data sing disebarake sing bisa mlaku ing puluhan utawa atusan server fisik, njamin operasi tanpa gangguan sanajan sawetara gagal. Mulane, arsitektur HBase cukup rumit dibandhingake database relasional klasik.

HBase nggunakake rong proses utama kanggo karyane:

1. Server Wilayah - Nglayani siji utawa luwih wilayah. Wilayah minangka sawetara rekaman sing cocog karo sawetara RowKeys sing berturut-turut. Saben wilayah ngandhut:

  • Panyimpenan Persisten minangka panyimpenan data utama ing HBase. Data kasebut disimpen sacara fisik ing HDFS, ing format HFile khusus. Data ing HFile disimpen ing urutan urut RowKey. Siji pasangan (wilayah, kulawarga kolom) cocog karo paling ora siji HFIle.
  • MemStore - nulis buffer. Wiwit data disimpen ing HFile d ing urutan, iku cukup larang kanggo nganyari HFile saben rekaman. Nanging, nalika nulis, data lumebu ing area memori MemStore khusus, ing ngendi akumulasi sawetara wektu. Nalika MemStore kapenuhan sawetara Nilai kritis, data ditulis kanggo HFile anyar.
  • BlockCache - cache kanggo maca. Ngidini sampeyan ngirit wektu kanthi signifikan ing data sing kerep diwaca.
  • Tulis Ahead Log (WAL) . Wiwit data ditulis kanggo memstore, ana sawetara risiko mundhut data amarga kacilakan. Kanggo nyegah kedadeyan kasebut, kabeh operasi sadurunge implementasine manipulasi kasebut tiba ing file log khusus. Iki ngidini sampeyan mbalekake data sawise gagal.

2. Master Server - server utama ing kluster HBase. Master ngatur distribusi wilayah ing antarane Server Wilayah, njaga daftar wilayah, ngatur peluncuran tugas biasa, lan nindakake pakaryan liyane sing migunani.

Kanggo koordinasi tumindak ing antarane layanan, HBase nggunakake Apache ZooKeeper, layanan khusus sing dirancang kanggo ngatur konfigurasi lan nyinkronake layanan.

Nalika jumlah data ing wilayah mundhak lan tekan ukuran tartamtu, Hbase wiwit pamisah, operasi sing pamisah wilayah dening 2. Kanggo ngindhari divisi pancet wilayah, sampeyan bisa pre-set wates wilayah lan nambah maksimum sing. ukuran.

Wiwit data kanggo siji wilayah bisa disimpen ing sawetara HFiles, Hbase periodik nggabungake bebarengan kanggo nyepetake karya. Operasi iki diarani pemadatan ing Hbase. Compaction ana rong jinis:

  • Kompaksi cilik . Miwiti kanthi otomatis, mlaku ing latar mburi. Nduwe prioritas kurang dibandhingake karo operasi Hbase liyane.
  • Kompaksi utama . Diluncurake kanthi tangan utawa nalika kedadeyan pemicu tartamtu (contone, kanthi timer). Nduwe prioritas dhuwur lan bisa nyuda kluster kanthi signifikan. Compactions Major paling apik rampung ing wektu nalika mbukak ing kluster cilik. Major Compaction uga mbusak data sing sadurunge ditandhani karo nisan.

6.5 Cara kanggo nggarap HBase

HBase Shell

Cara paling gampang kanggo miwiti Hbase yaiku nggunakake utilitas cangkang hbase. Kasedhiya sanalika sawise nginstal hbase ing sembarang simpul kluster hbase.

Cangkang Hbase minangka konsol jruby kanthi dhukungan sing dibangun kanggo kabeh operasi Hbase dhasar. Ing ngisor iki minangka conto nggawe tabel pangguna kanthi rong kulawarga kolom, nindakake sawetara manipulasi, lan nyelehake tabel ing pungkasan ing cangkang 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

Kaya umume proyek sing ana gandhengane karo hadoop, hbase diimplementasikake ing java, mula api asli kasedhiya ing Jawa. Native API didokumentasikan kanthi apik ing situs web resmi. Iki minangka conto nggunakake API Hbase sing dijupuk saka kono:

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();
 	}
  }
}

Irit, REST lan dhukungan kanggo basa pamrograman liyane

Kanggo nggarap basa pamrograman liyane, Hbase nyedhiyakake Thrift API lan Rest API. Adhedhasar kasebut, klien dibangun kanggo kabeh basa pemrograman utama: python, PHP, Java Script, lsp.

6.6 Sawetara fitur nggarap HBase

  1. Hbase nggabungake metu saka kothak karo MapReduce, lan bisa digunakake minangka input lan output nggunakake TableInputFormat lan TableOutputFormat khusus.

  2. Penting banget kanggo milih RowKey sing bener. RowKey kudu nyedhiyakake distribusi sing rata ing wilayah, yen ora ana risiko sing diarani "wilayah panas" - wilayah sing digunakake luwih asring tinimbang liyane, sing nyebabake panggunaan sumber daya sistem sing ora efisien.

  3. Yen data ora diunggah siji-sijine, nanging langsung ing kumpulan gedhe, Hbase ndhukung mekanisme BulkLoad khusus sing ngidini sampeyan ngunggah data luwih cepet tinimbang nggunakake siji Puts. BulkLoad ateges operasi rong langkah:

    • Tatanan HFile tanpa partisipasi nempatno nggunakake proyek MapReduce khusus
    • Nglebokake file kasebut langsung menyang Hbase
  4. Hbase ndhukung output metrik menyang server ngawasi Ganglia. Iki bisa mbiyantu banget nalika ngatur Hbase kanggo ngerteni masalah hbase.

tombol baris

RowKey minangka ID pangguna, yaiku GUUID, senar sing digawe khusus kanggo unik ing saindenging jagad. GUIIDs disebarake kanthi merata, sing menehi distribusi data sing apik ing server.

Kulawarga Kolom

Panyimpenan kita nggunakake rong kulawarga kolom:

  • data. Klompok kolom iki nyimpen data sing ora cocog maneh kanggo tujuan pariwara, kayata kasunyatan manawa pangguna wis ngunjungi URL tartamtu. TTL kanggo Keluarga Kolom iki disetel dadi 2 sasi, watesan jumlah versi yaiku 2000.
  • longdata. Klompok kolom iki nyimpen data sing ora ilang relevansi saka wektu, kayata jender, tanggal lair, lan karakteristik pangguna "langgeng" liyane.

pamicara

Saben jinis fakta pangguna disimpen ing kolom sing kapisah. Contone, kolom Data:_v nyimpen URL sing dibukak pangguna, lan kolom LongData:gender nyimpen jinis kelamin pangguna.

Stempel wektu saka kasunyatan iki disimpen minangka stempel wektu. Contone, ing kolom Data:_v, stempel wektu yaiku wektu pangguna ngunjungi URL tartamtu.

Struktur panyimpenan data pangguna iki pas banget karo pola panggunaan kita lan ngidini sampeyan nganyari data pangguna kanthi cepet, entuk kabeh informasi sing dibutuhake babagan pangguna kanthi cepet, lan, nggunakake MapReduce, ngolah data kanthi cepet babagan kabeh pangguna bebarengan.

6.7 Alternatif

HBase cukup rumit kanggo ngatur lan digunakake, mula sadurunge nggunakake HBase, sampeyan kudu ndeleng alternatif:

  • Database Relasional . A alternatif apik banget, utamané ing kasus nalika data pas siji mesin. Uga, pisanan kabeh, sampeyan kudu mikir babagan database relasional ing kasus nalika transaksi indeks liyane saka utami penting.

  • Simpenan Key-Nilai . Panyimpenan kaya Redis lan Aerospike luwih cocog nalika latensi dibutuhake lan pangolahan batch kurang penting.

  • File lan pangolahan karo MapReduce . Yen data mung ditambahake lan arang dianyari / diganti, luwih becik ora nggunakake HBase, nanging mung nyimpen data ing file. Kanggo nyederhanakake karya karo file, sampeyan bisa nggunakake alat kayata Hive, Pig lan Impala.

Panganggone HBase ditrapake nalika:

  • Ana akeh data, lan padha ora pas ing siji komputer / server
  • Data asring dianyari lan dibusak
  • Ana "kunci" sing eksplisit ing data, sing trep kanggo ngiket kabeh liyane
  • Perlu pangolahan batch
  • Perlu akses acak menyang data kanthi tombol tartamtu