HBase Sorgu Örneği: put(), get() ve scan() Komutları
⚡ Akıllı Özet
HBase'de put, get ve scan komutları, veri yazma ve okuma için kullanılan temel komutlardır; bu komutlar sayesinde hücre değerlerini satır ve sütun bazında saklayabilir, tek bir satırı alabilir veya shell üzerinden birçok satırı inceleyebilirsiniz. Java API.
HBase Tablosuna Veri Yaz: Kabuk
Bu örnekler HBase'in şu şekilde olduğunu varsaymaktadır: yüklendi ve çalışıyorHBase kabuğu açık ve bir guru99 adlı tablo Aile eğitimi ve projeleri sütununda zaten mevcut.
`PUT` komutu, verileri bir tabloya kaydetmek için kullanılır.
Syntax: put <'tablename'>,<'rowname'>,<'columnvalue'>,<'value'>
Bu komut aşağıdaki amaçlar için kullanılır:
- Tanımlanmış veya belirtilen bir tabloya, satıra veya sütuna bir hücre 'değeri' koyacaktır.
- İsteğe bağlı olarak bir zaman damgası da eşleştirecektir.
Örneğin, burada “guru99” tablosuna r1 satırı ve c1 sütununa değerler yerleştiriyoruz:
hbase> put 'guru99', 'r1', 'c1', 'value', 10
Aşağıdaki ekran görüntüsünde gösterildiği gibi, "guru99" tablosuna 10, 15 ve 30 olmak üzere üç değer yerleştirdik.
Diyelim ki "guru99" tablosunun g gibi bir tablo referansı var. Bu tablo referansı üzerinde de şu komutu çalıştırabilirsiniz:
hbase> g.put 'guru99', 'r1', 'c1', 'value', 10
“guru99” alanına değerler girildikten sonra çıktı yukarıdaki ekran görüntüsünde gösterildiği gibi görünür.
HBase Tablosundan Verileri Okuyun: Kabuk
Bu bölümde aşağıdakileri kontrol edeceğiz. HBase kabuğu:
- HBase tablosu "guru99"a eklenen değerler.
- HBase tablosu guru99'da bulunan değerlere sahip sütun adları.
Aşağıdaki tarama çıktısı, "guru99"a girilen her değeri, satır ve sütun adlarıyla birlikte listeler:
Yukarıdaki ekran görüntüsünden şu çıkarımları yapabiliriz:
- HBase kabuğunda "scan" komutunu çalıştırdığımızda, "guru99" değişkenine eklenen değerler aşağıdaki gibi görüntülenecektir.
- HBase kabuğunda, kodumuz tarafından eklenen değerler sütun ve satır adlarıyla birlikte görüntülenecektir.
- Burada eklenen sütun adlarının "eğitim" ve "projeler" olduğunu görüyoruz.
- Bahsi geçen sütunlara "BigData" ve "HBase Tutorials" değerleri girilmiştir.
Tablodan veri okumak için `get` komutunu da kullanabilirsiniz.
Syntax: get <'tablename'>, <'rowname'>, {< Additional parameters>}
Burada ek parametreler arasında TIMESTAMP, TIMESTAMP, VERSIONS ve FILTERS yer almaktadır. Bu komutu kullanarak tablodaki bir satırı veya hücre içeriğini alabilirsiniz. Belirli bir satırı veya hücre içeriğini almak için TIMESTAMP, TIMERANGE, VERSIONS veya FILTERS gibi ek parametreler ekleyebilirsiniz. Aşağıdaki tablo bu parametreleri özetlemektedir:
| Parametre | Amaç |
|---|---|
| ZAMAN ARALIĞI | Belirtilen başlangıç ve bitiş zamanı aralığında zaman damgası bulunan hücreleri döndürür. |
| TIMESTAMP | Yalnızca belirli bir zaman damgasında saklanan hücre sürümünü döndürür. |
| VERSIONS | Bir hücrenin kaç farklı sürümünün döndürüleceğini belirler (varsayılan değer 1'dir). |
| FİLTRELER | Hangi satırların veya sütunların görüntüleneceğini kısıtlamak için bir filtre uygular. |
| SÜTUN | Sonucu belirli sütun aileleri veya niteleyicilerle sınırlandırır. |
İşte `get` komutunun bazı örnek çalışmaları:
hbase> get 'guru99', 'r1', {COLUMN => 'c1'}
Aşağıdaki ekran görüntüsünde gösterildiği gibi, bu komut kullanılarak "guru99" tablosunun r1. satırı ve c1. sütunundaki değerler görüntülenecektir.
hbase> get 'guru99', 'r1'
“guru99” tablosu için, r1 satırındaki değerler bu komut kullanılarak görüntülenecektir.
hbase> get 'guru99', 'r1', {TIMERANGE => [ts1, ts2]}
Bu komut kullanılarak “guru99” tablosu için ts1 ile ts2 zaman aralığındaki r1 satırının değerleri görüntülenecektir.
hbase> get 'guru99', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
Bu komut kullanılarak “guru99” tablosu için r1 satırı ve c1, c2 ve c3 sütun ailelerinin değerleri görüntülenecektir.
HBase Tablosuna Veri Yazma: JAVA API
Bu adımda, verileri HBase'deki "guru99" tablosuna yazacağız.
Öncelikle, HBaseLoading.java programını kullanarak HBase'den değer eklemek ve almak için kod yazmalıyız. Bir tabloya sütun düzeyinde değer oluşturmak ve eklemek için aşağıdaki gibi kod yazabilirsiniz.
Aşağıdaki ekran görüntüsü şunu gösteriyor: Java HBase yapılandırmasını oluşturan ve değerleri "guru99" değişkenine ekleyen kod:
Yukarıdaki ekran görüntüsünden:
- HBase yapılandırmasını oluşturduğumuzda, bu yapılandırma HBase kurulumu sırasında hbase-site.xml ve hbase-default.xml dosyalarında belirlediğimiz yapılandırmaları işaret eder.
- HTable metodu kullanılarak “guru99” tablosu oluşturuldu.
- "guru99" tablosuna 1. satır ekleniyor.
- "Eğitim" ve "projeler" sütun adlarını belirterek, ilgili satır 1'deki sütun adlarına değerler giriyoruz. Buraya girilen değerler şunlardır: BigData ve “HBaseTutorials”.
HBase Tablosundan Verileri Okuyun: Java API
Yukarıdaki bölümde HBase tablosuna yerleştirdiğimiz değerleri burada alıp görüntüleyeceğiz.
Aşağıdaki konsol çıktısı, HBase tablosu "guru99"dan okunan verileri göstermektedir:
“guru99”da saklanan sonuçları almak için:
- Burada, "eğitim" ve "projeler" sütun ailelerinde saklanan değerleri alacağız.
- “Get” komutunu kullanarak HBase tablosunda saklanan değerleri alacağız.
- “Scan” komutu kullanılarak tarama sonuçları görüntüleniyor. row1'de saklanan değerler konsolda gösterilecektir.
Kod yazıldıktan sonra çalıştırırsınız. Java uygulama bunun gibi:
HBaseLoading.java dosyasına sağ tıklayın -> Farklı Çalıştır -> Java Uygulama.
“HBaseLoading.java” çalıştırıldıktan sonra, değerler HBase'deki her sütuna “guru99” alanına eklenir ve aynı programda değerler de alınabilir.
İşte kodun tamamı:
import java.io.IOException; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; public class HBaseLoading { public static void main(String[] args) throws IOException { /* When you create a HBaseConfiguration, it reads in whatever you've set into your hbase-site.xml and in hbase-default.xml, as long as these can be found on the CLASSPATH*/ org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create(); /*This instantiates an HTable object that connects you to the "test" table*/ HTable table = new HTable(config, "guru99"); /* To add to a row, use Put. A Put constructor takes the name of the row you want to insert into as a byte array.*/ Put p = new Put(Bytes.toBytes("row1")); /*To set the value you'd like to update in the row 'row1', specify the column family, column qualifier, and value of the table cell you'd like to update. The column family must already exist in your table schema. The qualifier can be anything.*/ p.add(Bytes.toBytes("education"), Bytes.toBytes("col1"),Bytes.toBytes("BigData")); p.add(Bytes.toBytes("projects"),Bytes.toBytes("col2"),Bytes.toBytes("HBaseTutorials")); // Once you've adorned your Put instance with all the updates you want to make, to commit it do the following table.put(p); // Now, to retrieve the data we just wrote. Get g = new Get(Bytes.toBytes("row1")); Result r = table.get(g); byte [] value = r.getValue(Bytes.toBytes("education"),Bytes.toBytes("col1")); byte [] value1 = r.getValue(Bytes.toBytes("projects"),Bytes.toBytes("col2")); String valueStr = Bytes.toString(value); String valueStr1 = Bytes.toString(value1); System.out.println("GET: " +"education: "+ valueStr+"projects: "+valueStr1); Scan s = new Scan(); s.addColumn(Bytes.toBytes("education"), Bytes.toBytes("col1")); s.addColumn(Bytes.toBytes("projects"), Bytes.toBytes("col2")); ResultScanner scanner = table.getScanner(s); try { for (Result rr = scanner.next(); rr != null; rr = scanner.next()) { System.out.println("Found row : " + rr); } } finally { // Make sure you close your scanners when you are done! scanner.close(); } } }
API sürümleriyle ilgili not: Yukarıdaki örnek, eski HBase istemci API'sini yansıtan HTable sınıfını ve add() yöntemini kullanmaktadır. HBase 1.0'dan beri HTable kullanımdan kaldırılmıştır. Modern kod, ConnectionFactory.createConnection(…).getTable(…) aracılığıyla bir Tablo elde eder ve add() yerine addColumn() ile bir Put oluşturur. Put, get ve scan mantığı aynı kalır.






