DevVeri.com

Boğulacaksan büyük veride boğul!

Hive ile HBase Entegrasyonu

hbase_logoHadoop ekosistemindeki projelerin en büyük avantajlardan birisi de birbirleriyle uyumlu olarak çalışabilmeleri. Bu yazımızda HBase üzerindeki verileri Hive üzerinden sorgulamayı inceleyeceğiz.

HBase ile Hive’ı entegre edebilmek için ilk adım olarak gerekli kütüphanelerin classpath üzerinden erişilebilir olmasını sağlamak. Aşağıdaki jar dosyalarını (tabii ki uygun versiyon numaraları ile) Hive’ın ya da direkt olarak Hadoop’un lib dizini içerisine bulunması gerekiyor:

hive-hbase-handler-0.9.0.jar
hbase-0.92.0.jar
zookeeper-3.3.4.jar
guava-r09.jar

Örnek olması açısından HBase tarafında bir tablo yaratmak amacıyla Sqoop kullanabiliriz. Veritabanımızda bulunan mevcut bir tabloyu HBase’e Sqoop üzerinden aktarıyoruz:

sqoop import --driver com.mysql.jdbc.Driver --connect "jdbc:mysql://myhost/test" --username myuser --password mypass --table mytable --hbase-table mytable --column-family c --hbase-create-table

Sqoop parametrelerinde –hbase-create-table ile verileri HBase’e aktaracağımızı, –hbase-table ile de HBase tarafındaki tablo ismini belirtiyoruz. Komutun çalışması sona erdikten sonra HBase shell üzerinden verileri kontrol edebiliriz:

$ hbase shell
HBase Shell; enter 'help' for list of supported commands.
Type "exit" to leave the HBase Shell
Version 0.94.6-cdh4.5.0, rUnknown, Wed Nov 20 15:46:19 PST 2013

hbase(main):001:0>scan 'mytest', {LIMIT=>1}
ROW                                           COLUMN+CELL
 1                                            column=c:field1, timestamp=1392992550443, value=val1
 1                                            column=c:field2, timestamp=1392992550443, value=test1
1 row(s) in 0.1050 seconds

Daha sonrasında Hive tarafında HBase’deki tablomuzu external table olarak tanımlıyoruz:

CREATE EXTERNAL TABLE mytest(rowkey STRING, field1 STRING, field2 STRING)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ('hbase.columns.mapping' = ':key,c:field1,c:field2')
TBLPROPERTIES ('hbase.table.name' = 'mytest');

Tanımı yaparken HBaseStorageHandler sınıfını kullanıyoruz. Tabloyu yaratırken verdiğimiz kolon tanımları ile SerDe tanımlarının birebir örtüşmesi gerekiyor. Yani :key ile HBase tarafındaki rowkey değerini rowkey alanı ile, c:field1 alanını da field1 alanı ile örtüştürüyoruz. hbase.table.name parametresi ile de HBase tarafındaki tablo ismini belirtiyoruz.

Tanımı yaptıktan sonra artık Hive tarafında sorgulama yapabilir hale geliyoruz:

hive> SELECT * FROM mytest limit 3;
OK
1	val1	test1
2	val2	test2
3	val3	test3

Her ne kadar HBase üzerindeki verileri Hive ile sorgulamak kulağa çok hoş gelse de bu entegrasyon halen geliştirme aşamasında. Yaptığım denemelerde çok verimli sonuç aldığımı malesef söyleyemeyeceğim. Sorgular ya çok uzun sürüyor ya da bir noktada başarısız oluyor. Ancak geliştirmeler tamamlandığında oldukça kullanışlı olacağını tahmin ediyorum.

Daha detaylı bilgi için ilgili sayfayı ziyaret edebilirsiniz.

, ,

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.