Hive Bölüm 25: Hive On Tez

Hive’ı başka engine’lerle kullanabiliyoruz, Cloudera dünyasındaysanız Spark’ın execution engine olarak kullandığını muhtemelen biliyorsunuzdur, hatta belki kullanıyorsunuzdur. Bunun artı ve eksilerini Spark konusunu işlerken konuşacağız; ama ana çalışma konumuz Hive olduğu için, Spark’ın detaylarına girmeden o konuyu işlemek istemem. Hive’da kullanılabilen diğer engine ise Tez. Tez, Hortonworks’ün geliştirdiği Processing Engine’dir. Hortonworks kullananlar Tez’i zaten yakından tanıyor; […]

Hive Bölüm 24: Archiving

Çok şaşırmış olabilirsiniz, arşivlemek burada neden kullanılsın ki? Hani büyük veri tutuyorduk? 😊 Çok haklısınız veriler gerçekten büyük ve büyüdükçe problemler de büyümeye devam ediyor. En büyük problemlerimizin başında şüphesiz name node’da her bir dosya için meta data saklanması. Ayrıca bir problemimiz daha var, replication factor. Default olarak 3’tür, yani her bir dosya 3 kopya […]

Hive Bölüm 23: Parallel Execution

Birden fazla tabloyu sorguladığımız bir yapıda normal şartlar altında bunu birer stage olarak sırasıyla işler. Bazen bu sorgularımız birbirinden bağımsız olur ve yine aynı şekilde işlemeye devam eder. Oysa ki Hive birbirinden bağımsız olan sorguları paralel olarak işletip, toplam sorgu süremizi kısaltmamızı sağlayan bir özelliğe sahiptir: hive.exec.parallel. Default olarak değeri false’tur ve bunu uygun sorgunuzun […]

Hive Bölüm 22: Merge File

Hive, tablo oluşturma işlemini yürüttüğümüzde veya insert overwrite ifadeleri eklediğimizde Hadoop kümesinde internal olarak küçük dosyalar (small files) oluşturur. Bildiğiniz gibi, Hadoop küçük dosyalarla iyi çalışmaz, çünkü her dosyanın name node’da bir kaydı tutulur. Bu da cluster’da yavaşlık ve bir dizi performans problemlerine yol açar. Hive, small files problemine çözüm sağlayabilmek için bunları daha az […]

Hive Bölüm 21: Table Files

Hive’da tablo yaratırken çoğunlukla text file olarak oluşturduk; ama aslında kullanabileceğiniz çeşitli file formatları var. Fakat default olarak tipini belirtmezseniz TextFile olarak oluşturulacağını bilmelisiniz. Şimdi biraz daha detaylara girelim. SequenceFile Verileri anahtar / değer çiftleri olarak saklar. SequenceFiles içinde saklanan kayıtlar için üç format vardır: Uncompressed Çoğunlukla, sıkıştırılmamış SequenceFile, girdi / çıktı (I/O) için daha […]

Hive Bölüm 20: Transactional İşlemler

Hive üzerindeki tablolarda normal şartlar altında yalnızca Insert ve Select işlemleri yapılabilir. Temel mimarisi bir kez yazıp çok fazla okuma için optimize edildiğinden yapısı açısından bu tutarlı bir yaklaşım tarzıdır. Bununla birlikte Update ve Delete işlemleri yapmakta mümkün, tabii bunun kısıtları bulunuyor. Öncelikle transactional işlemler yalnızca ORC file formatında desteklenmektedirler. Yani bu tür yapı kurgulayacaksanız […]

Hive Bölüm 19: Index

Her yapıda olduğu gibi Hive’da da index arama işlemlerini hızlandırabilmek için oluşturulmuştur; ama performans problemlerine de çok fazla yol açabiliyor. Bu sebeple Hive 3.0 ile birlikte tamamen kaldırıldı. Şimdilik Cloudera CDH sürümleri kullandığımız için hala kullanılabilir durumda olsa da CDP geçişi yaptıysanız veya geçmek gibi bir planınız varsa index konusuna hiç girmemenizi tavsiye ederim. Ayrıca […]

Hive Bölüm 18: Join

Esasında Hive gibi ortamlar join işlemleri için çok ideal değildir, verilerin denormalize tutulması, mümkünse join yapılmaması tercih edilir; fakat bunun yanında gerektiği durumlarda elbette join işlemi gerçekleştirilebiliyor. İlişkisel veritabanlarında olduğu gibi burada da sütun eşleştirmesi temelinde bir join yapısı mevcuttur. Çoğunuz bunları biliyorsunuzdur; ama ben yine de dile getirmiş olayım. Inner Join Seçilen tabloların kesişim […]

Hive Bölüm 17: Bucketing

Bucket, partition gibi verileri parçalara ayırmanın bir diğer yoludur. Peki ama partitioning varken neden bucketing kullanacağız? Partition yaptığınızda aslında bir dizin oluşturduğunuzu ve ilgili dosyaların ise bu dizinler altında toparlandığını anlatmıştık. Bucketing’te ise benzer veriler aynı yere fiziksel olarak yazılırlar, bu da bir arama esnasında ilgili veriyi getirmeyi oldukça kolaylaştıracaktır. Partitioning, veriler ancak eşit şekilde […]

Hive Bölüm 16: Partitioning

Partitioning performans için önemli bir etkendir. Temelde tablo verilerini partition key dediğimiz, belirli bir sütun değerine göre verileri parçalayarak saklarız. Petabyte boyutunda verileri tararken, sorgularımızda filtrelerken tüm tablo taranacağı için (full scan) veri boyutuna göre sürecin oldukça uzaması söz konusudur. Bu sebeple doğru partition key belirleyerek verileri filtrelemek istediğimizde sadece ilgili verilere ulaşmış oluruz. Bu […]

Hive Bölüm 15: Hive Shell (CLI)

Hive’a genelde Hue ile bağlanıp, editör üzerinden işlerimizi yapabiliyoruz, en yaygın kullanılan yapı da budur. Fakat bazen bir şeyleri programatik yapmak istiyorsak, yani bir cron job kurup belirli aralıklarla bir işi gerçekleştirmesini istiyorsak bunu Hue üzerinden yapamıyoruz. Bu tür durumlarda Hive Shell ortamını kullanmak avantajlı oluyor. Temelde Hive Shell’e bağlanmak çok basittir:

Bağlandığınızda: hive> […]

Hive Bölüm 14: Önemli Tablo Özellikleri

Immutable Immutable bir nesne, bir kez oluşturulduktan sonra bir daha değiştirilemeyen nesnedir. Bu şekilde tanımlanan tablolar da insert into gibi dml işlemleri yapılamaz. İlk kez Hive 0.13 versiyonunda kullanıma sunuldu. Temelde tablo ilk kez yaratıldığında içindeki veri sıfırdır. Bu sebeple ilk yüklemeyi yapmamıza olanak sağlar. Sonrasında ise yeni bir veri eklemenize izin vermek. Bu konuda […]

Hive Bölüm 13: RLike ve Rank

Rlike Rlike Java’nın Regullar Expression’ıdır. Hive bunu aynı şekilde kullanmamızı sağlar. Temelde aradığımız bir şeyi, aradığımız alanın içinde var mı diye kontrol eder ve true olanları döndürür. Basit bir örnek yapalım:

Bunun çıktısı true olarak dönecektir. Bunun dışında bir tablo içerisinde de filtreleme yapmamızı sağlar:

Bu ifade ile col1 sütunundaki verilerden içinde 0’dan […]

Hive Bölüm 12: Explode ve Lateral View

Explode temelde bir dizi şeklinde tuttuğunuz verileri satır satır çıktı almanızı sağlar. Elimizde şöyle bir tablo örneğimiz olsun. writer_tbl name books Yaşar Kemal İnce Memed:Yer Demir Gök Bakır:Ağrıdağı Efsanesi Aziz Nesin Zübük:Yaşar Ne Yaşar Ne Yaşamaz:Bir Sürgünün Anıları Noam Chomsky İktidarı Anlamak:Dünyayı Kim Yönetiyor:Halkın Sırtından Kazanç Pyotr A. Kropotkin Ekmeğin Fethi:Karşılıklı Yardımlaşma:Bir Devrimcinin Anıları   […]

Hive Bölüm 11: Hive Komutları – Koşullu İşlemler

If() Toplamda 3 parametre alıyor. İlk parametre koşulu belirttiğimiz kısımdır. Koşulun doğru olduğu durumda uygulanacak olan Koşula uymayan veya gelen değerin false olduğu durumda uygulanacak olan Genel olarak SELECT sorgularında kullanılırlar. Ör:

Bu sorguda col1 sütunumuzdaki değer Aranan ise col2 sütunu ekrana çıktı verilir, değilse col3 sütunu basılır. Case When Birden fazla koşula göre […]

Hive Bölüm 10: Hive Komutları – String

Concat() İki veya daha fazla string değeri birleştirmek için kullanılır:

Çıktı: AB  

Çıktı: A+B Length() İçindeki string değeri toplam karakter sayısını döndürür.

Çıktı: 17 Lower() İçindeki string’in tamamını küçük harflere dönüştürür. Yalnız Türkçe karakterlerde çalıştığınız sunucuya göre sorunlar yaşayabilme ihtimaliniz var.

Çıktı: deneme Upper() İçindeki string’in tamamını büyük harflere dönüştürür. […]

Hive Bölüm 9: Hive Komutları – Math

Ceil() / Ceiling() İki fonksiyon da aynı işi yapar. Fonksiyona verilen double değeri yukarı yuvarlar.

Çıktı: 10 Floor() Fonksiyona verilen double değeri aşağı yuvarlar.

Çıktı: 9 Round() Fonksiyona verilen double değeri, ikinci parametre olarak verilen değere göre noktadan sonraki yuvarlamayı yapar.

Çıktı: 10.00

Çıktı: 10

Çıktı: 9 Rand() Rastgele bir […]

Hive Bölüm 8: Hive Komutları – Date

Unix_Timestamp() Fonksiyona verilen tarihi, unix için uygun timestamp değerini döndürür.

Çıktı: 1615111502 From_UnixTime() Fonksiyona verilen Unix timestamp değerinin karşılığı olan tarih değerini döndürür.

Çıktı: 2021-03-07 10:05:02 To_Date() Fonksiyona verilen tarih ve saat bilgisini içeren değerden yalnızca tarih bilgisini döndürür.

Çıktı: 2021-03-07 Year() Fonksiyona verilen tarih ve saat bilgisini içeren değerden yalnızca yıl […]

Hive Bölüm 7: Hive Komutları – Sorting

Çoğu zaman tablolarımızdaki verilerimizi sıralama ihtiyacı hissederiz. Sıralama için kullanabileceğimiz söz dizimlerinden burada bahsedeceğiz. Order By Sorgunun tamamının sıralanması için kullanırız. Bu işlemi yaparken tek bir reducer kullanılır. Söz dizimi şu şekildedir:

Teoride kolay gibi gözükse de tek bir reducer job işletileceği için büyük veri setlerinde durum içinden çıkılmaz bir hal alabilir. Bu sebeple […]

Hive Bölüm 6: Hive Komutları – View

Temel olarak Hive’da view, kendisi herhangi bir veriye sahip olmayan ancak bir sorgunun sonuçlarıyla doldurulabilen, veritabanında bulunan bir tür aranabilir nesnedir. Kısaca view’lerin özelliklerini anlatmak gerekirse: Herhangi bir veri içermezler. Yalnızca Hive’da yürütülen bir sorgunun sonucudur. DML işlemleri view’ler üzerinde gerçekleştirilebilir. Tablo veya tabloların birleştirilmesini içeren bir sorgu ile oluşturulurlar. View’ler oluşturulduğunda kaynak olarak kullanılan […]