Apache Hive Nedir?

Apache Hive, dağıtık dosya sistemlerinde petabayt seviyesindeki büyük veri setlerini okumayı, yazmayı ve yönetmeyi sağlayan SQL dili ile çok benzer biçimde interaktif sorgular yazabildiğimiz açık kaynak kodlu bir projedir.

Hadoop gibi dağıtık dosya sistemlerinde kayıtlı olan büyük verileri sorgulamak için kullanılıyor.
Alışık olduğumuz SQL sorgularını, Hive ile birlikte büyük verileri analiz etmek için yazabiliyoruz.

Hive ile yazılan sorgular aslında arkaplanda MapReduce komutlarına çevriliyorlar. Ancak iç içe onlarca sub-query(alt sorgu)’nin olduğu bir sorguda MapReduce ile sorgu yapmak oldukça güçleşecektir.MapReduce her ne kadar Hive’a göre daha güçlü bir kontrol sağlasa da Hive, SQL ile çok benzeyen sorgu dili ile hadoop ve diğer dağıtık dosya sistemlerini kullanan geliştiriciler için oldukça kolaylık sağlıyor.
Biraz Hive’ın sorgu biçimi inceleyim.
Hive’ın Select deyiminin yazım biçimini şu şekildedir;

SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[HAVING having_condition]
[CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list]]
[LIMIT number]

Eğer daha önce SQL kullandıysanız muhtemelen bu tarz bir sorguya aşinasınız. Ama ben yine de biraz açıklamak istiyorum.

  • SELECT, SQL’deki projeksiyon operatörüdür.
  • SELECT, FROM yan tümcesi tarafından belirtilen tabloyu tarar
  • WHERE, neyin filtreleneceğini belirtir
  • GROUP BY, kayıtların nasıl toplanacağını belirten sütunların bir listesini verir
  • CLUSTER BY, DISTRIBUTE BY, SORT BY sıralama düzenini ve algoritmasını belirtin.
  • LIMIT kaç adet kayıt alınacağını belirtir

Gördüğünüz gibi tıpkı SQL de olduğu gibi Hive’da bu şekilde kullanılarak büyük verileri rahatlıkla analiz etmeye yardımcı oluyor.

Hive’ın MapReduce ile farklı olarak sağladığı kolaylıktan biraz bahsedecek olursak,
Hive’da çeşitli tool’lar(araçlar) kullanarak Şema(Hive Shema) oluşturabiliyoruz. Şema mantığı aslında klasik SQL sorguları ile oluşturduğumuz tablo mantığı gibidir. Kolon isinleri ve veri tipleri ile oluşturulan tablolar, Hive’da da şema şeklinde oluşturuluyor. Hive ile belirli formattaki dosyaların(.csv, json vs.), metadataları içerisine girerek tablo gibi tanımlayabiliyoruz.
Bir örnek ile kavramaya çalışalım;

{
    “İsim": "Gülcan",
    "Soyisim": "Ertop",
    “Öğrenci_Bilgileri”: {
        “Id": 1234,
        “Bölüm": Yazılım Mühendisliği,
         “Sinif": “4"
    }
}

şeklinde bir örnek JSON dökümanımız olsun. İsmini de ogrenci.json verelim.
Buradaki verileri Hive’ı kullanarak tablo haline getirelim:

CREATE TABLE json_ogrenci_tablo ( json string );
 
LOAD DATA LOCAL INPATH  '/tmp/ogrenci.json' INTO TABLE json_ogrenci_tablo;

Biçimide bir sorgu query ile json dosyasının içeriğini json_ogrenci_tablo isimli bir tablo yaratıp aktarmış olduk.

Bu tablodaki her bir objeyi sorgulamak için Hive’da çeşitli yöntemler mevcut, bunlardan ilki olan get_json_object ile bir sorgu yazmayı deneyelim.

select get_json_object(json_ogrenci_tablo.json, '$.İsim') as Isim, 
       get_json_object(json_ogrenci_tablo.json, '$.Soyisim') as Soyisim,
       get_json_object(json_ogrenci_tablo.json, '$.Öğrenci_Bilgileri.Id') as Oid,
       get_json_object(json_ogrenci_tablo.json, '$.Öğrenci_Bilgileri.Bölüm') as Obolum,
       get_json_object(json_ogrenci_tablo.json, '$.Öğrenci_Bilgileri.Sinif') as Osinif
from json_table;

Bu sorgudan elde edilen sonuç şu şekildedir:

Isim   Soyisim  Oid     Obolum  Osinif
Gülcan Ertop    200901  Yazılım Mühendisliği4

Tıpkı get_json_object gibi json_tuple,json-serde gibi fonksiyonlarını kullanarakta sorgular yazabiliriz.
Bunları ileriki yazılarımda örnekleyerek açıklamaya çalışacağım.

 

Bir Cevap Yazın

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