BigData: HBase

All lectures for UZ purposes
Daraja, Dars
Mavjud

6.1 Kim va nima uchun HBase yaratgan

Ushbu leksiyada biz Hbase kabi ajoyib vosita haqida gaplashamiz, bu so'nggi paytlarda katta ommalashgan: masalan, Facebook uni o'zining xabar almashish tizimining asosi sifatida foydalanadi, bu esa ko'p narsani bildiradi.

Leksiyada Big Table kontseptsiyasi va uning bepul amalga oshirilishi, ishlash xususiyatlari va MySQL va Oracle kabi klassik relyatsion ma'lumotlar bazalari hamda Redis, Aerospike va memcached kabi key-value saqlash joylaridan farqlari haqida so'z yuritiladi. Odatdagidek - savolning tarixidan boshlaymiz. BigData sohasidagi ko'plab boshqa loyihalar singari, Hbase Google kompaniyasida ishlab chiqilgan kontseptsiyadan kelib chiqqan. Hbase asosidagi prinsiplar Bigtable: A Distributed Storage System for Structured Data maqolasida tasvirlangan.

Avvalgi leksiyalarda ko'rib chiqqanimizdek, odatiy fayllar MapReduce paradigmasidan foydalanib, ma'lumotlarni paketli qayta ishlash uchun juda yaxshi mos keladi. Boshqa tomondan, fayllarda saqlanayotgan ma'lumotlarni yangilash juda noqulay; Fayllar, shuningdek, ixtiyoriy kirish imkoniyatiga ega emas. Ixtiyoriy kirish bilan tez va qulay ishlash uchun Aerospike, Redis, Couchbase, Memcached kabi nosql-tizim tipidagi key-value storage mavjud. Ammo odatda bu tizimlarda paketli ma'lumotlarni qayta ishlash juda noqulay. Hbase paketli qayta ishlashning qulayligini va yangilash va ixtiyoriy kirish qulayligini birlashtirishga urinishdir.

6.2 Ma'lumotlar modeli

HBase — bu tarqatilgan, ustun yo'naltirilgan, ko'p versiyali "kalit-qiymat" tipidagi baza.

  • Ma'lumotlar jadvallar sifatida tashkil etilgan, birlamchi kalit bilan indekslangan, bu Hbase-da RowKey deb ataladi.
  • Har bir RowKey uchun cheksiz atributlar (yoki ustunlar) to'plami saqlanishi mumkin.
  • Ustunlar ustun guruhlari, ya'ni Column Family-da tashkil etilgan. Odatda bir Column Family ga ishlatish va saqlash shablonlari bir xil bo'lgan ustunlar birlashtiriladi.
  • Har bir atribut uchun bir nechta turli xil versiyalar saqlanishi mumkin. Turli versiyalar har xil timestamp ga ega.

Yozuvlar jismonan RowKey bo'yicha saralangan holda saqlanadi. Shu bilan birga, turli Column Family ga mos keladigan ma'lumotlar alohida saqlanadi, bu esa zarur bo'lganda faqat kerakli ustunlar oilasidan ma'lumotlarni o'qishga imkon beradi.

Ma'lum bir atributni o'chirishda u jismonan darhol o'chirilmaydi, balki faqat maxsus tombstone belgilashi bilan belgilangan. Ma'lumotlarning jismoniy o'chirilishi keyingi Major Compaction amalida amalga oshiriladi.

Bitta ustun guruhiga tegishli atributlar va bitta kalitga mos keladiganlar jismonan saralangan ro'yxat sifatida saqlanadi. Har qanday atribut har bir kalit uchun mavjud yoki mavjud bo'lmasligi mumkin, shu bilan birga agar atribut yo'q bo'lsa - bu bo'sh qiymatlarni saqlashga qo'shimcha xarajatlarni chaqirmaydi.

Ustun guruhlari ro'yxati va nomlari qat'iy belgilangan va aniq sxemaga ega. Ustunlar guruhida time to live (TTL) va saqlanadigan maksimal versiyalar soni kabi parametrlar belgilanadi. Agar ma'lum bir versiyaning timestamp va hozirgi vaqt o'rtasidagi farq TTL-dan katta bo'lsa - yozuv o'chirish uchun belgilangan. Agar muayyan atributning versiyalari soni maksimal versiyalar sonidan oshib ketgan bo'lsa - yozuv ham o'chirish uchun belgilangan.

Hbase ma'lumotlar modelini kalit qiymat mosligi sifatida eslab qolish mumkin:

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

6.3 Qo'llab-quvvatlanadigan operatsiyalar

Hbase-da qo'llab-quvvatlanadigan operatsiyalar ro'yxati juda oddiy. 4 ta asosiy operatsiya qo'llab-quvvatlanadi:

  • Put: hbase-ga yangi yozuv qo'shish. Ushbu yozuvning timestamp-si qo'lda o'rnatilishi mumkin, aks holda u avtomatik ravishda joriy vaqt sifatida belgilanadi.
  • Get: ma'lum bir RowKey bo'yicha ma'lumotlarni olish. Qaysi Column Family dan ma'lumotlarni olishimiz kerakligini va qancha versiyalarni o'qishni xohlayotganimizni ko'rsatishimiz mumkin.
  • Scan: yozuvlarni ketma-ket o'qish. Qaysi yozuvdan boshlab o'qishni boshlashimiz kerakligini, qaysi yozuvga qadar o'qishimiz kerakligini, nechta yozuvni hisoblash kerakligini, qaysi Column Family dan o'qish amalga oshirilishini va har bir yozuv uchun maksimal versiyalar sonini ko'rsatishimiz mumkin.
  • Delete: ma'lum bir versiyani o'chirish uchun belgilash. Bunda jismoniy o'chirish sodir bo'lmaydi, u keyingi Major Compaction gacha kechiktiriladi (quyida qarang).

6.4 Arxitektura

HBase tarqatilgan ma'lumotlar bazasi bo'lib, o'nlab va yuzlab fizik serverlarda ishlashi mumkin, ba'zi birlarining ishdan chiqishida ham uzluksiz ishni ta'minlaydi. Shuning uchun HBase arxitekturasi klassik relyatsion ma'lumotlar bazalari bilan solishtirganda ancha murakkab.

HBase ish uchun ikkita asosiy jarayonni ishlatadi:

1. Region Server — bir yoki bir nechta hududlarga xizmat qiladi. Hudud — bu ma'lum bir ketma-ket RowKey oraliqiga mos keladigan yozuvlar oraliqidir. Har bir hudud o'z ichiga oladi:

  • Persistent Storage — HBase'dagi asosiy ma'lumotlar saqlash joyi. Ma'lumotlar HDFS'da, maxsus HFile formatida jismonan saqlanadi. HFile'dagi ma'lumotlar RowKey bo'yicha saralangan tartibda saqlanadi. Bitta (hudud, column family) juftligi uchun kamida bitta HFIle mos keladi.
  • MemStore — yozuvlar uchun bufer. HFile ma'lumotlari tartibli ravishda saqlanganligi sababli, har bir yozuv uchun HFile ni yangilash qimmat. Buning o'rniga ma'lumotlar maxsus MemStore xotira hududiga tushadi, u yerda ma'lum vaqt yig'iladi. MemStore ma'lum bir kritik qiymatgacha to'lganda, ma'lumotlar yangi HFile'ga yoziladi.
  • BlockCache — o'qish uchun kesh. Tez-tez o'qiladigan ma'lumotlarda vaqtni sezilarli darajada tejashga imkon beradi.
  • Write Ahead Log (WAL). Yozuvlarni MemStore'da saqlashda ba'zi arx kengayishli stsenariylarda ma'lumotlar yo'qolishi xavfi mavjud. Buning oldini olish uchun barcha operatsiyalar aslida amalga oshirilmasdan oldin maxsus log-faylga tushadi. Bu har qanday nosozlikdan so'ng ma'lumotlarni tiklashga imkon beradi.

2. Master Server — HBase klasteridagi asosiy server. Master Region Server'lar bo'yicha hududlarni taqsimlashni boshqaradi, hududlar registrini yuritadi, muntazam vazifalarni ishga tushirishni boshqaradi va boshqa foydali ishlarni bajaradi.

HBase xizmatlari o'rtasidagi harakatlarni muvofiqlashtirish uchun Apache ZooKeeper'dan foydalanadi, bu konfiguratsiyalarni boshqarish va xizmatlarni sinxronlashtirish uchun mo'ljallangan maxsus xizmat.

Hududdagi ma'lumotlar miqdori oshganda va ma'lum o'lchamga yetganda Hbase split ishga tushiradi, bu ikki hududni ajratishga operatsiyasi. Hududlarni doimiy ajratishdan saqlanish uchun hududlar chegaralarini oldindan belgilash va ularning maksimal o'lchamini oshirish mumkin.

Bitta hudud bo'yicha ma'lumotlar bir nechta HFile'da saqlanishi mumkinligi sababli, Hbase ishni tezlashtirish uchun ularni birlashtiradi. Bu operatsiya Hbase'da compaction deb ataladi. Compaction'lar ikki turga ega:

  • Minor Compaction. Avtomatik ishga tushiriladi, fon rejimida bajariladi. Hbase boshqa operatsiyalari bilan solishtirganda past ustuvorlikka ega.
  • Major Compaction. Qo'lda yoki muayyan triggerlar (masalan, taymer bo'yicha) sodir bo'lganda ishga tushiriladi. Yuqori ustuvorlikka ega bo'lib, klasterning ishini sezilarli darajada sekinlashtirishi mumkin. Major Compaction'larni yaxshi klaster yuklanishi kam bo'lgan vaqtida bajarish afzal. Major Compaction davomida ham oldin tombstone belgilari bilan belgilangan ma'lumotlarning jismoniy o'chirilishi sodir bo'ladi.

6.5 HBase bilan ishlash usullari

HBase Shell

Hbase bilan ishlashning eng oddiy usuli - hbase shell utitilasidan foydalanish. Bu hbase klasterining har qanday tuguniga o'rnatilgandan so'ng darhol mavjud.

Hbase shell jruby-konsol bo'lib, barcha asosiy Hbase operatsiyalarini qo'llab-quvvatlashga ega. Quyida hbase shell tilida users jadvalini ikki column family bilan yaratish, ularda ba'zi manipulyatsiyalarni bajarish va oxirida jadvalni o'chirish misoli keltirilgan:

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'

Native API

Ko'pgina boshqa hadoop-loyihalar singari, hbase Java tilida amalga oshirilgan, shuning uchun Java tilida dostup bo'lgan native api mavjud. Native API rasmiys saytda juda yaxshi hujjatlangan. Mana u yerdan olingan Hbase API dan foydalanish misoli:


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

Thrift, REST va boshqa dasturlash tillarini qo'llab-quvvatlash

Boshqa dasturlash tillaridan foydalanish uchun Hbase Thrift API va Rest API ni taqdim etadi. Ularning asosida python, PHP, Java Script va boshqa asosiy dasturlash tillari uchun mijozlar yaratilgan.

6.6 HBase bilan ishlashning ba'zi xususiyatlari

  1. Hbase MapReduce bilan "qutidan chiqadigan" integratsiyaga ega va maxsus TableInputFormat va TableOutputFormat yordamida kirish va chiqish ma'lumotlari sifatida ishlatilishi mumkin.

  2. RowKey ni to'g'ri tanlash juda muhimdir. RowKey hududlar bo'yicha yaxshi teng taqsimotni ta'minlashi kerak, aks holda "issiq hududlar" deb ataladigan, qolganlariga nisbatan ko'proq foydalaniladigan hududlar paydo bo'lish xavfi mavjud, bu esa tizim resurslarini samarali ishlatmaslikka olib keladi.

  3. Agar ma'lumotlar bir marta joylashtirilmasa, balki darhol katta to'plamda joylashtirilsa - Hbase ma'lumotlarni alohida Put'lar yordamida joylashtirishdan ko'ra ancha tezroq BulkLoad maxsus mexanizmiga ega. BulkLoad asosan ikki bosqichli operatsiya:

    • Maxsus MapReduce job yordamida put'larsiz HFile yaratish
    • Bu fayllarni to'g'ridan-to'g'ri Hbase ga qo'yish
  4. Hbase o'z metrikalarini Ganglia monitoring serveriga chiqarishni qo'llab-quvvatlaydi. Bu Hbase masalalarini tushunish uchun Hbase ni boshqarishda juda foydali bo'lishi mumkin.

RowKey

RowKey sifatida foydalanuvchi identifikatori ishlatiladi, bu GUUID, butun dunyoda noyob bo'lgan maxsus yaratilgan qator. GUUID'lar teng taqsimlanadi, bu esa ma'lumotlarni serverlar bo'yicha yaxshi taqsimlanishini ta'minlaydi.

Column Family

Bizning saqlashimizda ikkita column family ishlatiladi:

  • Data. Ushbu ustun guruhida reklama maqsadlari uchun o'z ahamiyatini yo'qotadigan ma'lumotlar, masalan, foydalanuvchining ma'lum URL'larni tashrif buyurish faktlari saqlanadi. TTL ushbu Column Family ga 2 oy o'lchamida o'rnatilgan, versiyalarning cheklanishi - 2000.
  • LongData. Ushbu ustun guruhida uzoq vaqt davomida o'z ahamiyatini yo'qotmaydigan ma'lumotlar, masalan, jins, tug'ilgan kun va boshqa foydalanuvchining "abadiy" xususiyatlari saqlanadi.

Ustunlar

Foydalanuvchi haqida ma'lumotlarning har bir turi alohida ustunda saqlanadi. Masalan, Data:_v ustunida foydalanuvchi tomonidan tashrif buyurilgan URL'lar saqlanadi, LongData:gender ustunida - foydalanuvchining jinsi.

Jo'natuvchi vaqtida vaqt tamg'asi sifatida saqlanadi. Masalan, Data:_v ustunida - timestamp sifatida foydalanuvchining ma'lum URL'ga kirish vaqti ishlatiladi.

Ushbu foydalanuvchi ma'lumotlarini saqlash tarkibi bizning foydalanish shablonimizga juda mos keladi va foydalanuvchilarning ma'lumotlarini tezda yangilash, foydalanuvchilar haqida barcha zarur ma'lumotlarni tezda olish imkonini beradi va MapReduce ni ishlatib, barcha foydalanuvchilar haqida bir vaqtning o'zida ma'lumotlarni tezda qayta ishlash imkonini beradi.

6.7 Alternativlar

HBase-ni boshqarish va ishlatish juda qiyin, shuning uchun HBase-dan foydalanishdan oldin quyidagi alternativlarga e'tibor berish mantiqan:

  • Relyatsion ma'lumotlar bazalari. Bitta mashinaga sig'adigan ma'lumotlar holatida juda yaxshi alternativa. Birlamchi kalitdan boshqa indekslar muhim bo'lganda ham relyatsion ma'lumotlar bazalari haqida birinchi navbatda o'ylash kerak.

  • Key-Value saqlash joylari. Redis va Aerospike kabi saqlash joylari latency'ni minimallashtirish kerak bo'lganda va ma'lumotlar paketli qayta ishlash unchalik muhim bo'lmaganida yaxshiroq mos keladi.

  • Fayllar va ular bilan MapReduce orqali ishlash. Agar ma'lumotlar faqat qo'shilayotgan bo'lsa va kamdan-kam yangilanayotgan/o'zgartirilayotgan bo'lsa, HBase dan foydalanmasdan, ma'lumotlarni fayllarda saqlagan yaxshiroqdir. Fayllar bilan ishlashni osonlashtirish uchun Hive, Pig va Impala kabi vositalardan foydalanish mumkin.

HBase dan foydalanish o'rinli bo'lganda:

  • Ma'lumotlar ko'p va ular bitta kompyuter/serverga sig'maydi
  • Ma'lumotlar tez-tez yangilanadi va o'chiriladi
  • Ma'lumotlarda aniq "kalit" mavjud va unga barcha boshqalarni bog'lash qulay
  • Ma'lumotlarni paketli qayta ishlash zarur
  • Muayyan kalitlar bo'yicha ma'lumotlarga ixtiyoriy kirish zarur

Shardlash, BigData va MapReduce

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION