Apache Hive
Apache Hive projesi SQL benzeri bir arayüz yardımıyla Hadoop üzerinde Java kullanmadan sorgulama ve analiz işlemlerini yapmak amacıyla Facebook tarafından geliştirilmiş, daha sonrasında Apache’ye devredilmiş açık kaynaklı bir projedir. Özellikle Veri Ambarı (Datawarehouse) uygulamalarını Hadoop kümeleri üzerinde geliştirebilmek için Hive projesi birçok firma tarafından kullanılmaktadır. Hive kurulumuna geçmeden önce Hadoop kurulumunun nasıl yapıldığını buradan inceleyebilirsiniz.
Hive ile Hadoop üzerinde belirli bir formata uygun şekilde bulunan dosyaları, örneğin .csv dosyalarını metadataları girerek tablo gibi tanıtabiliriz. Hive bu metadata bilgisini saklayarak daha sonra çalıştıracağımız SQL benzeri sorguları MapReduce kodlarına çevirerek bu dosyalar üzerinde select, join işlemlerini gerçekleştirir. Bu sayede çok büyük miktarda veriyi SQL gibi Hadoop üzerinde paralel olarak sorgulama şansımız olur.
Başlamadan önce örnek için gerekli olan dosyayı buradan indirebilirsiniz. Örnek dosya içerisinde tab ile ayrılmış iki kolon bilgi var. Bu örnek csv dosyasını example isimli bir klasör açıp Hadoop’a atıyoruz:
$ wget "http://devveri.com/wp-content/uploads/2012/09/example.csv" $ hadoop dfs -mkdir example $ hadoop dfs -put example.csv example/example.csv $ hadoop dfs -ls Found 2 items drwxr-xr-x - devveri supergroup 0 2012-09-06 00:43 /user/devveri/example drwxr-xr-x - devveri supergroup 0 2012-03-30 07:35 /user/devveri/test.txt
Hive kurulumu için Apache’nin sitesinden Hive ile ilgili paketi indirip /usr/java altına açıyoruz:
$ cd /usr/java $ wget "http://www.eu.apache.org/dist/hive/hive-0.9.0/hive-0.9.0-bin.tar.gz" $ gzip -dc hive-0.9.0-bin.tar.gz | tar xf - $ ln -s /usr/java/hive-0.9.0-bin hive
Hive’ın bin klasörünü $PATH değişkenimize eklemek için .bash_profile (ya da .bashrc) dosyamıza ekleme yapıyoruz:
HIVE_HOME=/usr/java/hive PATH=$PATH:$HIVE_HOME/bin
Hive kullanırken oluşan metadata bilgisini bulunduğu klasöre yazıyor. Bu sebeple hive_datawarehouse isimli bir klasör oluşturup workspace mantığında her zaman bu klasör içinde çalışmak anlamlı. Bunun için gerekli klasörleri açıyoruz ve ardından hive komutu ile Hive’ı çalıştırıyoruz:
$ mkdir /usr/java/hive_datawarehouse $ cd /usr/java/hive_datawarehouse $ hive WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated. Please use org.apache.hadoop.log.metrics.EventCounter in all the log4j.properties files. Logging initialized using configuration in jar:file:/usr/java/hive-0.9.0-bin/lib/hive-common-0.9.0.jar!/hive-log4j.properties Hive history file=/tmp/devveri/hive_job_log_devveri_201209051924_4942732.txt
Hive’ı konsol arayüzünden kullanabildiğiniz gibi -e parametresi ile de komut vererek de çalıştırabiliyorsunuz.
Hadoop üzerine attığımız example klasörü içerisindeki verileri CREATE TABLE komutunu kullanarak Hive’a bir tablo olarak tanıtıyoruz. LOCATION parametresi ile ben kendi HDFS adresimi belirttim, burada “hadoop dfs -ls” komutunu çalıştırarak example klasörünün sizdeki adresini öğrenip yazmanız gerekir.
hive> CREATE EXTERNAL TABLE products (PRODUCT_ID INT, PRODUCT_NAME STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE LOCATION '/user/devveri/example'; OK Time taken: 0.232 seconds
Bu komut ile bir tablo yaratacağımızı, bu tablonun int ve String tipinde iki kolondan oluştuğu, bu dosyanın tab karakterleri ile ayrıldığı, satırların \n karakteri ile bittiğini ve Hadoop üzerinde /usr/devveri/example klasörü üzerinde bulunduğunu belirtmiş oluyoruz.
products isimli tabloyu oluşturduğumuza göre, bu verileri SELECT komutu ile görebiliriz:
hive> select * from products; OK 1 Hadoop 2 MongoDB 3 Cassandra 4 Solr 5 ElasticSearch Time taken: 0.314 seconds
Artık daha kompleks sorgulamalar da yapabilecek durumdayız. Örneğin ID değeri 3 olan kaydı çekmek için aşağıdaki gibi bir sorgu yazarsak Hive bizim için bu sorguyu bir MapReduce olarak işleterek sonucu bize getirebilir:
hive> select * from products where PRODUCT_ID=3; Total MapReduce jobs = 1 Launching Job 1 out of 1 Number of reduce tasks is set to 0 since there's no reduce operator Starting Job = job_201209051913_0001, Tracking URL = http://localhost:50030/jobdetails.jsp?jobid=job_201209051913_0001 Kill Command = /usr/java/hadoop-1.0.3/libexec/../bin/hadoop job -Dmapred.job.tracker=localhost:9001 -kill job_201209051913_0001 Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0 2012-09-05 19:30:57,922 Stage-1 map = 0%, reduce = 0% 2012-09-05 19:31:03,976 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 1.11 sec 2012-09-05 19:31:04,988 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 1.11 sec 2012-09-05 19:31:06,002 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 1.11 sec 2012-09-05 19:31:07,013 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 1.11 sec 2012-09-05 19:31:08,024 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 1.11 sec 2012-09-05 19:31:09,038 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 1.11 sec 2012-09-05 19:31:10,048 Stage-1 map = 100%, reduce = 100%, Cumulative CPU 1.11 sec MapReduce Total cumulative CPU time: 1 seconds 110 msec Ended Job = job_201209051913_0001 MapReduce Jobs Launched: Job 0: Map: 1 Cumulative CPU: 1.11 sec HDFS Read: 260 HDFS Write: 12 SUCCESS Total MapReduce CPU Time Spent: 1 seconds 110 msec OK 3 Cassandra Time taken: 23.417 seconds
Hive’ın en büyük avantajı bu SQL benzeri bir arayüze sahip olmak. Ancak zayıf yönü ise üzerinde analiz yapmamız gereken verilerin mutlaka yapılandırılmış (structured) bir yapıda olması gerekliliği. Sorgulamak istediğiniz veriler yapısal değilse Hive ile üzerinde analiz yapabilmek için Hive’ın SerDe arayüzüne uygun bir kod yazmanız gerekiyor. Bunu da başka bir yazıda anlatmayı planlıyoruz.
Hive’ın tüm detaylarına Apache Hive sayfasından ulaşabilirsiniz.
Kaynak:
https://cwiki.apache.org/confluence/display/Hive/GettingStarted
https://cwiki.apache.org/confluence/display/Hive/Tutorial
Hadoop 1.0.3 Kurulumu Adım Adım Apache Pig
sizin yazınızda ” HDFS Read: 260 HDFS Write: 12″ bende ise “HDFS Read: 0 HDFS Write: 0” şeklinde bir sonuç veriyor. Burada okunan ve yazılan nedir?
Windows 8. e Hive Hadoop kurulabilir mi
Windows 8.1’e Hive Hadoop kurulabilir mi