Büyük veri nedir? | Ne işe yarar?

Yazılım Mühendisliği’nde 3.sınıfı bitirdikten sonra, bitirme tezi konusu bulma telaşım başladı. Uzun yıllardır veritabanı alanına ilgi duyuyordum ve tabiri caizse bu ilgimi daha da “büyütmek” istedim! 🙂

Nedir bu Büyük Veri (Big Data) ve Büyük Veri setleri ile neler yapılabilir? Diye araştırmaya başladım.

Basit bir ifadeyle Büyük Veri, düzenli veya düzensiz biçimde, hızla büyüyen ve depolanan büyük hacimli veriler olarak ifade edilebilir.

Zihninizde rahat canlandırabilmek için söyle düşünün,

Her gün saatlerce sosyal medya platformlarını kullanıyoruz. Örneğin Facebook’u ele alalım.
Bu platform 200 milyondan fazla aktif kullanıcıya sahip ve her birimiz her gün durum, resim, video vs. paylaşabiliyoruz. Ve bu paylaşımları yıllarca sürdürebiliyoruz. Yani sürekli veri üretiyoruz.
Facebook’un günde 20 TB dan fazla veri ürettiğini düşünelim.

Peki bu kadar fazla veri nasıl işlenir ve ihtiyaç durumunda bu verilere nasıl erişilebilir?

Facebook milyonlarca kullanıcısının verilerini Hadoop Distributed File System – HDFS (Hadoop Dağıtık Dosya Sistemi) üzerinde tutuyor, veritabanı olarakta Hive ve Casandra isimli veritabanlarını kullanıyor.

Bu teknolojilere daha sonra değineceğim ancak kısaca bahsetmek gerekirse, her geçen gün hızla üretilen bu verileri kaydetmek için yüksek hacimli veritabanlarına ihtiyaç var çünkü bu kadar fazla verinin içinde klasik SQL sorguları ile işlem yapmak çok zor hatta imkansızdır. Büyük verileri işlemek için ancak ona uygun bir platform olması gerekir. Hive / Casandra gibi büyük veriler için geliştirilmiş veritabanı sistemleri, Facebook için bu noktada işleme giriyor. Facebook’ta bizlerin ürettiği bu büyük datayı veritabanlarında saklıyor.

Tıpkı Facebook gibi, Google, Twitter, Instagram, Linkedin, Amazon gibi siteler de her gün büyük veri üretir ve bu verileri işlemek için çeşitli teknolojileri kullanır.

Google, klasik büyük veri işleme yöntemlerini kullanmak yerine kendisinin geliştirdiği teknolojiyi kullanıyor. Milyarlarca internet sayfasının verisini Google File System üzerinde tutuyor, veritabanı olarakta Big Table kullanıyor. Oluşan bu büyük veriyi işlemek içinse MapReduce kullanıyor. Bu teknolojilerin her biri düşük maliyetli ve binlerce bilgisayarın bir araya gelerek oluşturduğu bir sistem şeklinde çalışıyor.

Bu tarzda kendilerine has teknolojiler üreten firmalardan esinlenerek bir çok proje geliştirilmiştir ve hala geliştirilmektedir. Bunlara en güzel örnek, Apache projeleri olarak geliştirilen Lucene, Solr, Hadoop, HBase projelerdir. Bu teknolojileri örnekler ile çoğaltmak mümkün elbette.

Gelelim elde edilen bu büyük veri setleri ile neler yapılabileceğine;

Büyük veriler analiz edilerek,

  • Sisteminizle alakalı karar alırken daha seri ve stratejik olmak için size yol gösterebilir,
  • Gerçek zamanlı hata ve problemlerin temel sebeplerini belirleyebilir,
  • Müşterilerin satın alma alışkanlıklarını analiz ederek satış amaçlı kampanyalar üretmenize olanak sağlar,
  • Risk hesaplamayı çok daha kolay ve mümkün hale getirebilirsiniz.


Büyük Veri Analizi ile neler yapılabileceğini bir örnekle zihnimizde canlandırmaya çalışalım;

Öncelikle büyük veri üreten bir sistem hayal edelim.

Örneğin, milyonlarca müşterinin talep ve şikayetlerini paylaştıkları global bir ‘Şikayet Websitesi’ olsun.
Bir de bu sitede paylaşılan istek ve şikayetleri dikkate alıp müşterileri için hizmet kalitesini arttırmak isteyen global bir banka olduğunu düşünelim.

Eskiden bankaların, pazarlama ve ürün geliştirme departmanlarının,
müşteriye yönelik yeni kampanya stratejileri geliştirebilmesi için müşteri ile ilgili sınırlı bilgilere erişimleri, müşteri ihtiyaçlarını, hesap hareketlerinin takibini ve segmentasyonları vs. inceleyerek geleneksel yöntemlerle analiz etmesi ve her birini tek tek inceleyip çıkarım yapması gerekirdir.

Ancak şimdi bu banka Büyük Veri Analizi yardımı ile bahsi geçen şikayet sitesindeki şikayetleri belli kurallara göre, kelime bazında filtreleyip işleyerek, müşterilerinin nelerden şikayetçi olduğunu, bu sistem sayesinde binlerce müşteriden feedback alarak öğrenebilir durumda. Bu bilgiler ışığında yeni bir ürün veya hizmet geliştirerek, mevcut müşteri memnuniyetini arttırırken, müşterisi olmayan kişileri de nasıl potansiyel müşteri haline getirebileceklerini analiz edebiliyorlar. Hem de çok daha kısa bir sürede ve daha az efor sarf ederek!

Bu ve bunun gibi örnekleri çoğaltabiliriz. Büyük Veri’nin kullanım alanları gün geçtikçe artıyor, her geçen gün yeni bir teknoloji ile karşılaşıyoruz. Zamanı geldikçe Büyük veri ile ilgili farklı teknolojilerden bahsetmeye devam edeceğim.

Hayallerinize erişmek için parmaklarınızı kullanın, kız gibi kodlayın!

Hadoop Nedir?

Hadoop Nedir?

Önceki yazımda Big Data ve bunların işlenmesi ile alakalı teknolojilerden bahsetmiştim.

Bu yazımda Hadoop’un ne olduğundan bahsedeceğim.

Bildiğiniz gibi Big Data, büyük ölçekli verilerin oluşturduğu veri setlerine (Data Set) verilen isim ve biz bu büyük veri setlerini kaydetmek ve işlemek için çeşitli dosya sistemleri ve veritabanları kullanıyoruz.

Hadoop da büyük veri setleri ile birden fazla makinede paralel olarak işlem yapmamızı, verileri kaydetmemizi ve yönetmemizi sağlayan, MapReduce özelliklerini bir araya getiren, Java ile yazılmış açık kaynak kodlu kütüphanedir.

Hadoop içinde büyük verileri sakladığımız bileşene HDFS (Hadoop Distributed File System) denir.

HDFS nedir?
Açılımı Hadoop Distributed File System

yani Türkçesi ile Hadoop Dağıtık Dosya Sistemi.

Peki ne için böyle bir sisteme ihtiyaç duyulmuş?
Petabyte seviyesindeki büyük verileri saklamak için pahalı bir donanım satın almak yerine sıradan sunucuların disklerini bir araya getirerek büyük, tek bir sanal disk oluştururlar. Bu sunucu disklerine Cluster adı verilmektedir. Clusterların her biri aynı yerde durmak durumunda değildirler, farklı bölgelerde, farklı şehirlerde hatta farklı ülkelerde aynı sisteme hizmet edebilirler.

HDFS içine büyük boyuttaki veriler kopyalandıktan sonra bir çok kaynak üzerinden aynı anda ve oldukça hızlı erişim sağlanabilir. Bu dosya sistemi içinde büyük veriler küçük dosya blokları halinde saklanırlar.

HDFS, NameNode ve DataNode olarak iki ayrı süreçten oluşur.

NameNode, master(ana) düğümdür. Verilerin bloklar halinde parçalanarak dağıtıldığını düşünürsek bu parçaların her birinin diğer makinelere DataNode) dağılımından, yaratılmasından, silinmesinden, yeniden oluşturulmasından sorumlu düğümdür. (Serverlar arasındaki configürasyonu sağlayan ana makine)

DataNode, slave(işçi) düğümdür. Ona verilen blockları kendi yerel diskinde saklamaktan sorumludur. İlave olarak diğer DataNode’lardaki verilerin yedeklerini de saklayabilirler. Bir HDFS sistemde birden fazla olabilirler.

Şu görsel ile anladıklarımızı güçlendirelim;

Gelelim yukarıda bahsettiğimiz MapReduce’a,
MapReduce ise HDFS üzerindeki büyük verileri işleyebilmek amacıyla kullanılan bir yöntemdir. Bu yöntemin içeriğine bu linke tıklayarak ulaşabilirsiniz.

Hadoop şuanda Facebook, Twitter, Yahoo, Alibaba, EBay, Adobe() ve daha bir çok bilindik firmada büyük verileri analiz etmek amacı ile kullanılıyor.

Bunların yanısıra Hadoop projesi büyük verileri işlemek için başka projelere bir çatı görevi görüyor. Bu projelerden bazıları, Hive, Mahout, Cassandra, Pig, Zookeper.

Yazıyı yazarken: http://devveri.com/hadoop-nedir adresinden faydalanılmıştır.

Hadoop Kurulumu

Hadoop’un ne işe yaradığından önceki yazımda sizlere bahsetmiştim. Bugün Hadoop nasıl kurulur, bununla alakalı bilgi vermek istiyorum.

Öncelikle Hadoop, GNU / Linux platformu tarafından desteklenmektedir. Bu sebeple, Hadoop ortamını kurmak için bir Linux işletim sistemine ihtiyacımız var. Linux dışındaki bir işletim sisteminiz varsa, bir Virtualbox yazılımı yükleyebilir ve Linux’u Virtualbox’ın içine kurabilirsiniz.

Ön kurulum:

Başlangıçta, Hadoop dosya sistemini Unix dosya sisteminden ayırmak için Hadoop’a ait ayrı bir kullanıcı yaratmanızı öneririm. Bu sayede karmaşanın önüne geçmiş olacaksınız.

Bir kullanıcı oluşturmak için şu adımları uygulayın:

  • ”Su” komutunu kullanarak kök dizini açın.
  • ”Useradd kullanıcı adı” komutunu kullanarak kök hesabından bir kullanıcı oluşturun.
  • Artık “su kullanıcı adı” komutunu kullanarak mevcut bir kullanıcı hesabını açabilirsiniz.

Terminali açıp,aşağıdaki komutları yazalım,

$ su 
   password: 
# useradd hadoop  
# passwd hadoop 
   New passwd: 
   Retype new passwd 

“hadoop” yazan yerleri kendinize uygun biçimde değiştirebilirsiniz.
Ve işte yeni bir kullanıcı yaratmış oldunuz!


SSH Kurulumu ve Anahtar Üretimi

SSH kurulumu, cluster üzerinde başlatma, durdurma işlemleri gibi farklı işlemleri yapmak için gereklidir.
Anahtar üretimi de farklı Hadoop kullanıcılarını doğrulamak için gereklidir.
Hadoop kullanıcıları için ortak veya özel anahtar çifti oluşturulmalıdır. Bu anahtarlar kullanıcılar arasında paylaşılabilir.
Hadoop node’larının yönetilmesi için SSH erişimini ve anahtar üretimini aşağıdaki komutları yazarak sağlamamız gerekiyor.

$ ssh-keygen -t rsa 
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 
$ chmod 0600 ~/.ssh/authorized_keys

Java Kurulumu

Hadoop kurulumu için sisteminizde olması gerekenlerden biri de Java’dır. Java’nın bilgisayarınızda kurulu olup olmadığını anlamak için “java -version” komutunu kullanabilirsiniz.

$ java -version

Eğer Java kurulu ise, size kurulu olan versiyon bilgisini görüntülenecektir.

java version "1.7.0_71" 
Java(TM) SE Runtime Environment (build 1.7.0_71-b13) 
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode) 

Eğer Java yüklü değilse aşağıdaki adımları izleyerek kurmanız gerekiyor.

Adım 1:

Öncelikle bu siteye girin, ve sizin işletim sisteminize uygun olan ve uzantısı tar.gz olan dosyayı indirin

http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html

Adım 2:

İndirdiğiniz bu dosyayı genelde indirilenler klasörünüzde bulacaksınız. tar.gz şeklindeki zipli bu dosyayı aşağıdaki komutlar ile ziptek çıkartalım.

$ cd Downloads/ 
$ ls 
jdk-7u71-linux-x64.gz 
$ tar zxf jdk-7u71-linux-x64.gz 
$ ls 
jdk1.7.0_71   jdk-7u71-linux-x64.gz 

Adım 3:
Java’yı rahat kullanabilmek için “/usr/local”konumuna taşıyalım. Bunun için kök dizini açıp aşağıdaki komutları yazmalıyız.

$ su 
password: 
# mv jdk1.7.0_71 /usr/local/ 
# exit 

Adım 4:
Şimdi de ~/.bashrc dosyasını açıp JAVA_HOME isimli değişkeni oluşturarak java’nın kurulu olduğu PATH‘i içerisine yazağız. Bu sayede Java’ya erişimimiz kolaylaşmış olacak.
~/.bashrc dosyasını açmak için vim ya da nano gibi metin düzenleyicileri kullanabilirsiniz kullanabilirsiniz. (Eğer bunlar yüklü değilse veya kullanmayı bilmiyorsanız not defteri’nde de düzenleyebilirsiniz)
Ben vim kullanarak açıyorum.

$ vim ~/.bashrc

Açılan doyaya şu komutları kopyalayıp yapıştırıyoruz:

export JAVA_HOME=/usr/local/jdk1.7.0_71 
export PATH=$PATH:$JAVA_HOME/bin 

Sonrasında ESC basıyoruz ve :wq yazıyoruz. Vim’den çıkmış olduk.

Şimdi tüm değişiklikleri geçerli çalışan sisteme uygulamak için aşağıdaki komutu yazın.

$ source ~/.bashrc

Şimdi java -version komutunu tekrar deneyin. Şuan yukarıda yazdığım gibi bir çıktı görüntülemiş olmanız gerekiyor.

Hadoop Kurulumu
Eveeet… Her şey hazırsa hadoop kurulumuna başlayabiliriz.
Aşağıdaki komutları kullanarak hadoop’un istediğiniz sürümünü indirebilirsiniz. Ben 2.7.4 versiyonunu kurdum

$ su 
password: 
# cd /usr/local 
# wget http://apache.claz.org/hadoop/common/hadoop-2.7.4/ 
hadoop-2.7.4.tar.gz 
# tar xzf hadoop-2.7.4.tar.gz 
# mv hadoop-2.7.4/* to hadoop/ 
# exit 

NOT: wget Linux/UNIX komut satırı dosya indirme aracıdır. Eğer wget’e sahip değilseniz ‘Homebrew’ paket yöneticisini kullanarak edinebilirsiniz. (Homebrew kurulumu,
wget kurulumu)

Hadoop Çalışma Modları

Hadoop’u indirdikten sonra, Hadoop cluster’ını desteklenen üç moddan birinde çalıştırabilirsiniz, bunları ihtiyacınıza hangisi uygun olacaksa o şekilde seçin.

1-)Yerel / Bağımsız Mod (Local/Standalone Mode): Sisteminizde Hadoop indirildikten sonra, varsayılan olarak tek başına bir modda yapılandırılır ve tek bir java işlemi olarak çalıştırılabilir.

2-)Pseudo Dağıtılmış Mod (Pseudo Distributed Mode): Tek makinede dağıtılmış bir simülasyon. Hdfs, Yarn, MapReduce vb. Gibi her Hadoop hizmet programı ayrı bir java işlemi olarak çalışacaktır. Bu mod geliştirme için yararlıdır.

3-)Tam Dağılımlı Mod (Fully Distributed Mode ): Bu mod, cluster olarak en az iki veya daha fazla makineye tamamen dağıtılır.

Ben ilk iki modun kurulumunu sizlere anlatacağım.

Yerel / Bağımsız Mod’da Hadoop Kurulumu:

Bu kurulum sağlandığında hadoop tek bir JVM(Java Virtual Machine)’de çalışır. Bağımsız Mod, MapReduce programlarını geliştirme sırasında çalıştırmak için uygundur. Tek JVM ile çalıştığı için test etmek ve hata ayıklamak kolaydır.

Hadoop’u kurma:
Az önce yukarıda JAVA_HOME için ~/.bashrc dosyasında değişiklikler yapmıştık. Aynı işlemi vim ile ~/.bashrc dosyasını açıp, HADOOP_HOME değişkenine hadoop’un PATH’ini aşağıdaki gibi yazıyoruz.

export HADOOP_HOME=/usr/local/hadoop 

Metin düzenleyicinizi kapattıktan sonra tüm değişiklikleri geçerli çalışan sisteme source komutu ile uygulayın.

$ source ~/.bashrc 

Devam etmeden önce, Hadoop’un düzgün çalıştığından emin olalım. Sadece aşağıdaki komutu çalıştırın:

$ hadoop version 

Kurulumda her şey yolunda giderse şu şekilde bir sonuç karşınıza çıkacak:

Hadoop 2.7.4 
Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1529768 
Compiled by hortonmu on 2017-11-06T06:28Z 
Compiled with protoc 2.5.0
From source with checksum 79e53ce7994d1628b240f09af91e1af4 

Bu çıktı, bağımsız modda kurulum işleminin tamamlandığı anlamına gelir. Şuan varsayılan olarak, Hadoop tek bir makinede dağınık olmayan bir modda çalışacak şekilde yapılandırılmıştır.

Pseudo Dağıtılmış Mod’da Hadoop Kurulumu:

Gelelim diğer yöntem olan Pseudo Dağıtılmış Mod’a.
Bu modda kurulan Hadoop, tek bir makinede birden fazla makine varmış gibi simüle ederek, sahte sağıtılmış modda çalışır.

Hadoop Kurulum:

~/.bashrc dosyasına aşağıdaki komutları ekleyerek Hadoop ortam değişkenlerini ayarlayabilirsiniz.

export HADOOP_HOME=/usr/local/hadoop 
export HADOOP_MAPRED_HOME=$HADOOP_HOME 
export HADOOP_COMMON_HOME=$HADOOP_HOME 
export HADOOP_HDFS_HOME=$HADOOP_HOME 
export YARN_HOME=$HADOOP_HOME 
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin 
export HADOOP_INSTALL=$HADOOP_HOME

Şimdi tüm değişiklikleri geçerli çalışan sisteme uygulayın.

$ source ~/.bashrc 

Hadoop Yapıladırması(Hadoop Configuration)

Hadoop’ın bütün yapılandırma dosyaları
“$ HADOOP_HOME / etc / hadoop” dizinindedir.
Bu yapılandırma dosyalarında, Hadoop altyapınıza göre değişiklik yapmamız gerekiyor.

$ cd $HADOOP_HOME/etc/hadoop

Hadoop programlarını java’da geliştirmek için hadoop-env.sh dosyasındaki java ortam değişkenlerini JAVA_HOME değerini sisteminizdeki java konumuyla değiştirerek sıfırlamanız gerekir.

Bunun için yine vim kullanarak hadoop-env.sh dosyasını açıyoruz.

$ vim hadoop-env.sh

içerisine aşağıdaki kodu ekliyoruz.

 export JAVA_HOME=/usr/local/jdk1.7.0_71

Not: jdk1.7.0_71 sizin sisteminizde kurduğunuz sürüme göre değişkenlik gösterebilir.

Hadoop’u yapılandırmak için bir kaç tane dosyayı daha düzenlememiz gerekiyor.
İlk olarak core-site.xml dosyasını vim ile açıyoruz ve tagları arasına aşağıdakileri ekliyoruz. Ve kaydedip çıkıyoruz.

<configuration>

   <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:9000</value> 
   </property>
 
</configuration>

Sıradaki yapılandıracağımız dosya: hdfs-site.xml.
Hdfs-site.xml dosyası, yerel dosya sisteminizin çoğaltma verisinin, namenode yolunun ve datanode yollarının değeri gibi bilgileri içerir.(namenode ve datanode hakkında hadoop yazımda bilgi vermiştim, oradan öğrenebilirsiniz)
Bu dosyadaki değişikliklerin amacı, Hadoop altyapısını depolamak istediğiniz yeri göstermektir.
Dosyayı açalım ve aşağıdaki kodları tagları arasına yapıştıralım.

<configuration>

   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>
    
   <property>
      <name>dfs.name.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/namenode </value>
   </property>
    
   <property>
      <name>dfs.data.dir</name> 
      <value>file:///home/hadoop/hadoopinfra/hdfs/datanode </value> 
   </property>
       
</configuration>

Not: Yukarıdaki dosyada, tüm pathler kullanıcı tanımlıdır ve Hadoop altyapınıza göre değişiklik yapabilirsiniz.

Sırada yarn-site.xml yapılandırması var,
Yarn nedir diyecek olursanız, onu ayrıntılı açıklarım ama kısaca dağıtık sistemlerde kullanılan bir paket yöneticisi olduğunu bilmenizde fayda var.
yarn-site.xml dosyasını da bir öncekiler gibi yapılandıralım ve kaydedelim.

<configuration>
 
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value> 
   </property>
  
</configuration>

Son yapılandırılacak dosya olan mapred-site.xml ‘de sıra.
mapred-site.xml dosyası, hangi MapReduce frameworkünü kullandığımızı belirlemek için kullanılır.
Varsayılan olarak, Hadoop, bir yarn-site.xml şablonunu içerir. Her şeyden önce dosyayı sizdeki mapred-site.xml.template dosyasını koypalayıp ismini mapred-site.xml olarak verin. Bunun için aşağıdakileri yazın:
$ cp mapred-site.xml.template mapred-site.xml

Daha sonra mapred-site.xml dosyasını açın ve tagları arasınaaşağıdakileri yapıştırın. Ardından kaydedin.

<configuration>
 
   <property> 
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
   
</configuration>

Kurulumumuz nihayet burada bitiyor!
Son bir adım kaldı. O da Kurulumun doğrulanması. Çalışıp çalışmadığını anlamak için aşağıdaki adımları uygulayalım.

Hadoop Kurulum Doğrulama
Adım 1: Name-node Ayarı
Aşağıdaki komutları yazın.

$ cd ~ 
$ hdfs namenode -format 

Şu şekilde bir çıktı göreceksiniz:

10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************ 
STARTUP_MSG: Starting NameNode 
STARTUP_MSG:   host = localhost/192.168.1.11 
STARTUP_MSG:   args = [-format] 
STARTUP_MSG:   version = 2.4.1 
...
...
10/24/14 21:30:56 INFO common.Storage: Storage directory 
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted. 
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to 
retain 1 images with txid >= 0 
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0 
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************ 
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11 
************************************************************/

Adım 2: Hadoop dfs Doğrulama
Aşağıdaki komut, dfs’yi başlatmak için kullanılır. Bu komutu çalıştırdığımızda, Hadoop dosya sistemimiz başlayacaktır.

$ start-dfs.sh 

Beklenen çıktı şu şekildedir:

10/24/14 21:37:56 
Starting namenodes on [localhost] 
localhost: starting namenode, logging to /home/hadoop/hadoop
2.4.1/logs/hadoop-hadoop-namenode-localhost.out 
localhost: starting datanode, logging to /home/hadoop/hadoop
2.4.1/logs/hadoop-hadoop-datanode-localhost.out 
Starting secondary namenodes [0.0.0.0]

Adım 3: Yarn Script Doğrulama
yarn’ı çalıştırmak için kullanacağımız komut:

$ start-yarn.sh 

Beklenen çıktı:

starting yarn daemons 
starting resourcemanager, logging to /home/hadoop/hadoop
2.4.1/logs/yarn-hadoop-resourcemanager-localhost.out 
localhost: starting nodemanager, logging to /home/hadoop/hadoop
2.4.1/logs/yarn-hadoop-nodemanager-localhost.out 

Adım 4: Tarayıcınızdan Hadoop’a Bağlanma
Hadoop’a erişmek için varsayılan port numarası 50070‘dir. Tarayıcınızda Hadoop hizmetleri almak için aşağıdaki URL’yi kullanın.

http://localhost:50070/

Böyle bir ekran sizi karşılayacak.

Adım 5: Cluster için tüm uygulamaları doğrulayın

Clusterlardaki tüm uygulamalara erişmek için varsayılan port numarası 8088’dir. Bu porta aşağıdaki adresi tarayıcınıza yazarak erişebilirsiniz.

http://localhost:8088/

Yukarıdaki gibi bir ekran ile karşılaşacaksınız.
Buradan clusterlarınızdaki tüm uygulamalarınızı kontrol edebilirsiniz.

Hadoop kurulumu ile ilgili öğretici dökümanın sonuna geldik. Umarım faydalı olmuştur. Herkese iyi çalışmalar dilerim.

Map – Reduce Nedir?

Map-Reduce tanım olarak büyük verilerin işlendiği programlama yapısı olarak açıklanabilir.

Tipik bir Map-Reduce veri işleme biçimi birkaç adımdan oluşur. Bu adımlar Input, Splitting (Veriyi Bölmek), Mapping (İlgili Düğümlerde İşlemek) , Shufling (Her düğümde saymak), Reducing (Sonuçları Toplamak) ve Final Result (Raporlamak) şeklindedir.

Tüm bunları örnekler vererek, kümülatif bir şekilde anlatıp, Map-Reduce’un çalışma prensibini kavramanıza yardımcı olmaya çalışacağım.

Önce elimizde büyük veri olmadığını ve oldukça ufak bir müşteri bilgi sistemi geliştirdiğimizi düşünelim.

Bu ufak sistemin veritabanında yalnızca 100 müşterinin bazı bilgileri olsun.
Bu bilgiler, TC Kimlik Numarası, Ad, Soyad, Yaş alanları olsun.
Biz bu 100 kişi içinden soyadları ‘Yıldırım’ olan kişilerin içindeki en genç müşteriyi bulmak istesek

SELECT MIN(yas) FROM müsteri WHERE soyad=‘Yıldırım’

şeklinde bir SQL sorgusu ile sonuca rahatça ulaşabiliriz.

Peki, ya bu 100 kişilik sistem yerine, Türkiye’de yaşayan tüm insanlar olarak değiştirseydik?

Hatta veritabanındaki alanlara nüfus bilgisi, adres, telefon, meslek, gelir durumu, kullandıkları kredi kartları bilgileri,sipariş durumu, eğitim durumu alanları ekleseydik?
Daha sonra, soyadı ‘Yıldırım’, eğitim durumu ‘Üniversite’ olan insanların sayılarını bulmak istesek ne yapardık?

Düşündüğünüz gibi, oldukça büyük bir veri ile karşı karşıyayız ve klasik SQL sorgularını kullanarak bu analizi yapmak bir hayli uzun zaman alacaktır.

Bu durumda devreye Map-Reduce giriyor. Bu denli büyük verilerin onlarca sunucu(cluster) üzerinde(clusterlar daha fazla da olabilir) dağıtık olarak kayıtlandığını düşünelim.
(Dağıtık veri işleme sistemini Hadoop yazımı inceleyerek kavrayabilirsiniz)

Map-Reduce her bir clusterdaki verileri dolaşarak istediğimiz analizi hızlı ve etkin şekilde yapabilmemize imkan sağlıyor.

Yazılışı çeşitli dökümanlarda birleşik gibi görünsede Map-Reduce aslında Map(Mapping) ve Reduce(Reducing) iki ayrı işlem yapan, bir arada çalışarak dağıtık dosya sistemlerinde veri analizinin oldukça kolaylaştırılmasını sağlayan methodlardır.
Map, bir listedeki her bir elemana tek tek bir kuralı uygular.
Reduce, Map ile elde edilen sonuçları belli bir sistematik ile analiz ederek birleştirir.
Yaptığı analiz sonunda da bir değer döndürür.
Çok basit bir örnek ile zihnimizde canlandıralım;

Elimizde bir küme olduğunu düşünelim.
Bu kümenin her bir elemanına 5 ekleyelim.
5 eklediğimiz kümenin içindeki çift sayıların toplamını alacağımızı varsayalım.

Bu listenin her bir elemanına 5 ile toplama işlemini içeren bir fonksiyon uygulayacağız.

Bu işlem sonucu ikinci veri kümesini elde ettik. Her bir elemana aynı fonksiyonu uyguladı ve hepsinin ayrı ayrı değeri değişti.
Bu işlem Map leme işlemi olarak düşünülebilir, çalışma mantığı bu şekildedir.

Şimdi bu değerlerin içindeki çift sayıların toplamını alalım alalım. 9 sayısı haricindeki diğer tüm çift sayılar toplanacaktır.
Bu işlem de Reduce işlemi olarak düşünülebilir.
Yukarıda da gördüğünüz üzere başta 5 elemanlı bir veri kümesi iken, Reduce işlemi sonucu output olarak yalnızca bir değer elde ettik.

Map’leme işlemi, dağıtık halde bulunan sunucu disklerindeki (clusters) verilere, clusterların her birinin nerelerde olduğunu önemsemeksizin belli bir fonksiyonu o verilere uygular. Ve her bir cluster mapleme işlemi sonucu elde ettiği veriyi kendi diski üzerinde tutar.
Daha sonra Reduce işlemi her bir clusterdaki Map’lenmiş verileri alır ve belli bir kurala göre (bizim belirleyeceğimiz yönteme göre) analiz eder ve analiz edilmiş veriyi çıktı olarak verir. Örnekten de anlaşılabileceği gibi Map işleminde ilk işleme alınan kümenin eleman sayıları aynı kalırken, Reduce işlemi analiz sonucu bir çıktı vermektedir.

Map-Reducu aşamalarının  olduğu, her kelimeden kaçar tane olduğunu sayan örnek görseli inceleyelim;

 
Bu görselden da anladığınız üzere farklı clusterlar üzerinde karmaşık biçimde duran veriler,
Önce sayır satır Mapper’a iletiliyor,
Satırlar bölünüyor(Splitting),
Bölünmüş kelimeler sıralanarak sayılıyor. (Shuffling)
Sıralanıp sayılmış verilere sonraki adımda Recude Methodu uygulanıyor.(Reducing) Her kelimeden toplam ne kadar geçtiği hesaplanıyor.
Son aşamada ise uygulamadan isteden kelimelerin sayılmış hali Final Output olarak veriliyor.

Özet olarak, büyük verileri işleyebilmek için pahalı donanımlar satın almak yerine, bir veya birden fazla sıradan sunuculardan oluşan bir sistemde Map-Reduce ile aynı işlemi hızlı ve efektif bir biçimde uygulayabilirsiniz.

Günümüzde bu yapıyı, dağıtık dosya sistemi ile çalışan (Google,Facebook, Yahoo gibi.)bir çok büyük firma kullanmaktadır.

Umarım sizin için faydalı bir yazı olmuştur. Yorum ve görüşlerinizden bahsetmeyi unutmayın lütfen.

İyi çalışmalar dilerim.

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.

 

Web Server satın almak ve kurulum.

Nasıl Web Server (Web Sunucu) oluşturabilirim?

Sunucu (Server) nedir?

Sunucu bir ağ üzerinden bizim isteklerimizi (veri, dosya ve kaynak paylaşımı) karşılayan, donanımsal olarak yüksek özelliklere sahip olan hizmet sağlayıcı bilgisayarlara verilen isimdir.

Sunucularda veritabanı barındırabilir, bir ağ yönetebilir, dosya ya da uygulama paylaşabilir, email veya web sayfalarınızı barındırabilirsiniz. Her amaç için farklı biçimlerde üretilmiş sunucu bulmak mümkündür. Web Server (Web Sunucusu), File Server (Dosya Sunucusu), Database Server (Veritabanı Sunucusu), Mail Server (Eposta Sunucusu), Proxy Server (Vekil Sunucu) gibi çeşitleri vardır.

Ben size kendi ihtiyacım için scaleway.comdan satın aldığın bir server’ın adımlarını anlatacağım.

1. Öncelikle scaleway.com sitesine girip Login olmanız gerekiyor.
– ‘Terms of services’ kısmındaki ‘I have read and I accept the Terms of service’ kutucuğunu check edin.
– Sonraki adımda e-mailinizi doğrulamanız gerekiyor. E-mailinize girerek doğrulayın.
– Biling info bölümünden …
– Kart bilgilerinizi de girmelisiniz, çünkü sunucu satın aldığınızda sistem otomatik olarak siteye tanımladığınız karttan ücretini çekiyor.

2. Login olduktan sonra, Sağ üst köşedeki Create Server Butonuna tıklayın.

3. Name bölümü, server’ınıza vereceğiniz özel ismin yazılacağı yerdir. Buradan istediğiniz ismi kendi serverınıza verebilirsiniz.

4. Location bölümü, satın alacağınız server’ın hangi ülkede bulunmasını istiyorsanız orayı işaretleyeceğiniz bölüm. (Ben Amsterdam’dan satın aldım).

5. Server range bölümü. Bu bölüm 3 e ayrılıyor;
          – Starter, Baremental, Intensive.
          – Bu server tipleri, arzu ettiğiniz server’ın alan büyüklüklerine ve özelliklerine göre ayrım gösteriyorlar. Ben kendim için Starter bölümünden sunucu aldım. (Starter’daki sunucular uzaktaki bir makinenin üzerine kurulan sanal sunuculardan alınan hizmetlerdir.)

6. Starter bölümündeki ARM-64 tipindeki sunucular mobil cihazlar için kullanılan sunuculardır.
         – Ben bilgisayarımdaki fazla veriler ve büyük veri ile ilgili uygulamalarım için kullanmak üzere VC1L sunucusunu satın aldım.


– Benim bunu almamdaki en önemli etken 8GB RAM ‘e sahip olmasaydı.

8. Choose Image bölümünde, özelliklerini seçtiğiniz serverınıza bir işletim sistemi seçiyorsunuz.  

       – Resimde de gördüğünüz gibi Ubuntu’nun, CentOS’un, Debian’ın çeşitli versiyonları mevcut. Farklı özelliklere göre fiyatlandırma yapıyorlar(Ben, 2.99Euro’ya Ubuntu Zesty seçtim .)

9. Daha sonra Create Server’a tıklayın.

10. Ve sunucunuzu yarattınız.

Bundan sonraki adımlar sunucunuza nasıl bağlanacağınız ile ilgili;

1.  Ben sunucuma parola kullanmadan, SSH ile bağlanmak için kendi bilgisayarımda bir SSH Key yaratıp, oluşturduğum server’a tanımladım.

2. Bunun için öncelikle bilgisayarınızdan Terminali açın, aşağıdaki kodları yazın.

$ cd ~/.ssh 
$ ls -la

 

3. Eğer daha önceden oluşturulmuş bir SSH KEY’iniz var ise bu aşamada id_rsa ve id_rsa.pub dosyaları görüntülenir. Eğer var ise o dosyalardaki id_rsa’ı açın(Users/kullaniciadiniz/.ssh/id_rsa dizininde olmalı muhtemelen) ve içindekileri başında BEGIN ve END blogları olmadan kopyalayın.

4. Eğer bu dosyalara ls -la yazdığınızda id_rsa ve id_rsa.pub dosyaları görünmüyorsa, aşağıdaki kodları yazın

$ cd ..
$ ssh-keygen -t rsa

5. Enter file in which to save the key (Users/kullaniciadiniz/.ssh/id_rsa ) : kısmını göreceksiniz, Enter’a basın. Daha sonra sizden passphrase isteyecek Enter’a basın ve tekrar Enter’a basın.

İşte SSH Key’iniz oluştu!

6. şimdi tekrar .ssh dizinine gidin ve id_rsa dosyasını açın;

$ cd .ssh
$ cat id_rsa.pub

7.   Burada size id_rsa.pub dosyasının içindeki kod görüntülenecek, bu kodu isterseniz  terminalde aşağıdaki gibi sunucunuza kopyalayabilirsiniz.

      -Bunun için id’nizi scaleway.com’daki servers bölümünde satın aldığınız server’ın ‘ip adress’ bölümünden edinmelisiniz.  Benim 127.0.0.1 yazdığım yere kendi id’nizi yazmalısınız.

$ scp id_rsa.pub [email protected]

8. Ancak ben size daha kısa bir yol göstereceğim. scale.com‘a gidip sağ üstteki Basic Account’a tıklayın.

9. Credentials tab’ine tıklayıp  Use this SSH Key bölümüne yazıp kaydedebilirsiniz.

 Sunucunuza SSH Key’inizi kaydettiniz ve kullanılabilir hale getirdiniz.

10. Server’ınızın içerisine girmek ve yönetmek için aşağıdaki komutu kullanarak serverınıza bağlanın.

$ ssh [email protected]

Eğer terminal kullanmak istemiyorsanız FileZilla’yı kurup buradan da sunucunuza bağlanabilirsiniz.

11.  FileZilla’yı açın. Sol üstte ‘Open the site manager’ butonu bulunmakta. Ona tıklayın.

12.  New Site ‘a tıklayın.

13. Host kısmına server ip adresinizi yazın.

14. Port kısmını boş bırakın.

15.  Protocol kısmını ‘SFTP-SSH File Transfer Protocol’ olarak seçin.

16. Logon Type kısmını ‘Key File’ olarak seçin

17.  User kısmına ‘root’ yazın

18. Key file kısmına da id_rsa dosyanızın yolunu yazın. (Örn: /Users/kullaniciadiniz/.ssh/id_rsa)

19. Connect’e tıklayın.

Ve işte sunucunuza bağlandınız.

Umarım sizler için faydalı bir yazı olmuştur. Sonraki yazılarımda sunucumuza Hadoop, Hive ve Flume nasıl kurulur onlardan bahsediyor olacağım.

Hepinize iyi çalışmalar dilerim.

Apache Hive Kurulumu | 12 Adımda Hive Kurulumu | MySQL Metastore

Apache Hive’ ın ne olduğundan önceki yazımda bahsetmiştim. Bugün 12 Adımda sunucunuza Apache Hive Kurulumunu anlatacağım. Hive kurulumundan sonra da MySQL metastore yapılandırması gerçekleştireceğim.

Öncelikle kısaca Hive’ın ne olduğuna tekrar değineyim.

Hive, Hadoop üzerinde  sorgulama ve analiz işlemlerini yapmak amacıyla geliştirilmiş açık kaynak kodlu yazılımdır.

Peki nasıl kuracağız bu Hive’ı?

Bu sorunun yanıtı için aşağıdaki adımları izlemeniz gerekiyor, Hive için  öncelikle bilgisayarınıza veya sunucunuza Hadoop’u kurmanız gerekmekte. Bunun için Hadoop Kurulumu yazımı inceleyebilirsiniz.

Hive kurulumunu olabildiğince açık ve anlaşılır biçimde anlatmaya çalışacağım. Sorun yaşadığınız aşamada Bana Ulaşın panelinden mesaj bırakarak veya aşağıya yorum olarak yazmanız yeterli.

Ben Hive’ı kendi sunucuma kurdum. Configürasyon ayarlarını ona uygun yapacağım. Siz kendi localinize kuracaksanız onun için configürasyon ayarları değişecektir.

Adım 1:  Aşağıdaki linke tıkayın. Ardından kırmızı işaretli linklere tıklayarak resimdeki adımları izleyin.

http://www.apache.org/dyn/closer.cgi/hive/

hive-2.3.0 versionu indireceğiz.

apache-hive-2.3.0-bin.tar.gz dosyasını indirin.


Not: Eğer wget kullanıyorsanız linki kopyala diyerek terminal üzerinden direkt indirebilirsiniz.

Adım 2: Terminal ile Sunucunuza bağlanın.

Hive’ı kurmak istediğiniz dizine girin. Ben kurulum için /usr/local dizinini kullanacağım. Bu dizinin altına önce bir hive klasörü oluşturun.

$ mkdir hive
$ cd /usr/local/hive

Adım 3: Oluşturduğunuz hive klasörünün içine indirdiğiniz apache-hive-2.3.0-bin.tar.gz dosyasını kopyalayın. Bunun için [email protected]‘ den sonra, sucunuIP yazan kısmı dilip kendi sunucunuzun IP adresini yazmalısınız.

$scp ~/Users/gulcanertop/Downloads/apache-hive-2.3.0-bin.tar.gz [email protected]:/usr/local/hive

Adım 4: Kopyaladığınız hive kurulum dosyanızı bu sıkıştırılmış formattan çıkartmamız gerekiyor. Bunun için aşağıdaki komutu yazın.

$ tar zxvf apache-hive-0.14.0-bin.tar.gz
$ ls

Eğer herşey yolundaysa ekranda şunları göreceksiniz:

apache-hive-0.14.0-bin apache-hive-0.14.0-bin.tar.gz

Şimdi diğer ayarlar için hazırsınız.

Adım 5: ~/.bashrc dosyanızı açın ve aşağıdaki satırları ekleyin. Bu satırlar sizin Hive’ı kurduğunuz dizin yolunu tanımlamanızı sağlıyor. Kendi dosya yolunuzu düzgün biçimde yazmaya özen gösterin.(Ben editör olarak nano kullanıyorum, siz farklı bir editörle de açabilirsiniz. )

$ nano ~/.bashrc

şimdi bunları en alta yapıştırın. (Editörden çıkmak için CTRL+X’e basın, ardından ’Y’ yazın ve ENTER a basın.)

export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
export CLASSPATH=$CLASSPATH:/usr/local/Hadoop/lib/*:.
export CLASSPATH=$CLASSPATH:/usr/local/hive/lib/*:.

şimdi  ~/.bashrc dosyasını derleyin

$ source ~/.bashrc

Adım 6: Hive’ın congif ayarlarını yapacağız.

apache-hive-0.14.0-bin klasörünün altındaki conf klasöründe hive-env.sh.template dosyası mevcut.

hive-env.sh.template -> hive-env.sh

olarak kopyalayacağız ve yeniden yapılandıracağız

$ cd $HIVE_HOME/conf
$ ls
$ cp hive-env.sh.template hive-env.sh

Şimdi hive-env.sh içine girin

$ nano hive-env.sh

Aşağıdaki komutu yapıştırın.(Buraya mutlaka Hadoop’u kurduğunuz dizinin yolunu(path) yazmalısınız.)

export HADOOP_HOME=/usr/local/hadoop

Kaydedin ve editörden çıkın.

Adım 7: Şimdi Metastore’u yapılandırmak için harici bir veritabanı sunucusuna ihtiyacımız var. Ben bunun için mysql veritabanını kullanıyorum. Size de onu tavsiye ederim.

Aşağıdaki komut ile MySQL’i indirin.

$ sudo apt-get install mysql-server

Adım 8: MySQL Java Connector yükleyeyin.

$ sudo apt-get install libmysql-java

Şimdi Hive dizinin içindeki lib klasörüne Java Connector’ün jar dosyasının linkini verin.

$ ln -s /usr/share/java/mysql-connector-java.jar $HIVE_HOME/lib/mysql-connector-java.jar

Adım 9: $ HIVE_HOME/scripts/metastore/upgrade/mysql dizininde bulunan hive-schema-0.14.0.mysql.sql dosyasını (veya yüklü Hive sürümünüze karşılık gelen dosyayı) kullanarak Başlangıç veritabanı şemasını(Initial database schema)oluşturun.

$ mysql -u root -p

Enter password:

mysql> CREATE DATABASE metastore;
mysql> USE metastore;
mysql> SOURCE $HIVE_HOME/scripts/metastore/upgrade/mysql/hive-schema-0.14.0.mysql.sql;

Adım 10: Metastore erişirken Hive’ın kullanması için bir MySQL kullanıcı hesabına da ihtiyacınız var. Bu kullanıcı hesabının haricinde başka bir müdehale ile metastore veritabanı şemasındaki tabloların oluşturulmasını veya değiştirilmesini önlemek çok önemlidir.

mysql> CREATE USER 'hiveuser'@'%' IDENTIFIED BY 'hivepassword';
mysql> GRANT all on *.* to 'hiveuser'@localhost identified by 'hivepassword';
mysql>  flush privileges;

Not: Buradaki oluşturduğunuz hiveuser, ileride hive-site.xml dosyasını yapılandırırken kullanacağımız ConnectionUserName dir.

Dip Not: MySQL’den exit; komutu ile çıkış yapabilirsiniz.

Adım 11: Şimdi de $HIVE_HOME/conf dizinindeki hive-default.xml.template dosyasını kopyalayıp hive-site.xml ismi ile kaydedin.

$ cp $HIVE_HOME/conf/hive-default.xml.template hive-site.xml

Şimdi hive-site.xml’i yapılandıralım.
hive-site.xml’in içinde default değer olarak tanımlı olan propertyleri overrite etmeniz gerekiyor.

<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value> 
<description>metadata is stored in a MySQL server</description> 
</property> 
<property> 
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value> 
<description>MySQL JDBC driver class</description>
</property> 
<property>
<name>javax.jdo.option.ConnectionUserName</name> 
<value>hiveuser</value> 
<description>user name for connecting to mysql server</description>
</property>
<property> 
<name>javax.jdo.option.ConnectionPassword</name> 
<value>hivepassword</value>
<description>password for connecting to mysql server</description> 
</property> 
</configuration>

Not: Eğer bu aşamada “com.mysql.jdbc.Driver not found” hatası alırsanız, Adım 8’e gidin ve mysql-java connector jar dosyası için link verebildiğinizden emin olun. Herşey yolunda ise artık Hive’i çalıştırabiliriz.

Adım 12: Hive’ı çalıştırın ve bir tablo yaratın.

$ cd $HIVE_HOME
$ bin/hive

Hive çalıştığında hive> şeklinde görüntülenecek. Şimdi aşağıdaki komutları kullanarak bir tablo yaratalım.

hive> create table kizgibikodla(id int, name string);

Tablomuz tanımlandı. Şuan bunu tabloyu MySQL’de görüntüleyelim.

mysql -u root -p

Enter password:

mysql> use metastore;
mysql> show tables ;

Hive’da oluşturduğunuz metastore şemalarını (veritabanları), MySQL’de aşağıdaki gibi bir query ile görüntüleyebilirsiniz.

mysql> select * from TBLS;

Bu adımdan sonra oluşturduğunuz tablolar burada göüntülenecektir.

İşte Apache Hive’ı kurdunuz!

Soru ve önerileriniz için yorum bırakabilirsiniz.

Keyifli kodlamalar dilerim.