Hadoop, basit sunucular kullanılarak oluşturulan cluster’lar da büyük datasetleri barındıran Java Tabanlı Framework’dür. Bigdata projelerindeki ilk özgür yazılım tabanlı büyük ölçekli, kararlı projedir. Apache Foundation bu projenin Sponsorudur.

Hadoop dört ana katmandan oluşmaktadır.

– Hadoop Common: Diğer Hadoop modüllerine destek veren kütüphane ve faydalı programlardır.

– HDFS(Hadoop Distributed File System): Hadoop dağıtılmış dosya sistemini temsil eder ve dağıtık dosya sisteminin oluşturulması ve verilerin kontrollü ve güvenli bir şekilde diske yazılmasından sorumludur.

– YARN(Yet Another Resource Negotiator): HDFS için kullanılan işletim sistemidir.

– MapReduce: Hadoop clusterlar için orjinal işlem modelidir. İşleri cluster yada map olarak sınıflandırır, organize eder ve sonrasında node’lardan dönen sorguyu ilgili şekilde düzenleyerek cevabı hazırlar. Birçok işlem modeli Hadoop 2.x versiyonunda mevcuttur.

Hadoop cluster’ larının ayarlanması stand-alone moda göre nispeten daha karmaşıktır. Stand-alone mod da Hadoop’ u anlama, basit işlemleri gerçekleştirme ve uygulama daha kolaydır.

Bu makalemizde size Ubuntu 16.04 üzerinde stand-alone modda Hadoop kurulumundan bahsedeceğiz.

Gereksinimler

Öncelikle CloudEOS‘ a kayıt olarak bir adet Ubuntu 16.04 sunucunuzu oluşturmalısınız.

Kuruluma başlamadan önce Ubuntu sunucular için güvenlik açısından sudo yetkilerine sahip bir kullanıcı oluşturmanızı tavsiye ediyoruz.

Yeni Kullanıcı Ekleme

Sisteme size verilen root kullanıcı adı ve şifresi ile giriş yaptıktan sonra

$ adduser yenikullanici

ile kullanıcı oluşturmuş oluyoruz.

$ usermod -aG sudo yenikullanici

komutu ile de oluşturduğumuz kullanıcıya sudo yetkilerini vermiş olduk. Şimdi Hadoop kurulum adımlarına bu oluşturduğumuz sudo haklı kullanıcı ile devam edeceğiz.

Java Kurulumu

İlk olarak paket depomuzu güncelleyelim.

$ sudo apt-get update

Şimdi ubuntu paket dosyasında bulunan default Java Development Kit ve OpenJDK paketlerini kuralım.

$ sudo apt-get install default-jdk

Kurulum bitiminde aşağıdaki gibi java versiyonumuzu kontrol edelim.

$ java -version

Aşağıdaki gibi bir çıktı ile karşılaşacağız.

openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

Hadoop Kurulumu

Apache Hadoop sürümlerinin listelendiği sayfasına girelim ve şu andaki stable versiyonu bulalım. Bu dokümanda 2.8.2 versiyonunu kullanacağız.

Aşağıdaki gibi ilgili versiyonun yanındaki binary seçeneğini tıklayarak download edebileceğimiz URL’ i kopyalamak için ilgili sayfaya geçelim ve download linkini kopyalayalım.

 

Şimdi kopyaladığımız linki wget programı ile indirelim.

$ wget http://www-eu.apache.org/dist/hadoop/common/hadoop-2.8.2/hadoop-2.8.2.tar.gz

İndirdiğimiz bu dosyayı SHA-256 ile kontrol etmek isterseniz aşağıdaki gibi devam edebilirsiniz. İlk olarak kıyas yapacağımız .mds dosyasını indirelim.

$ wget http://www-eu.apache.org/dist/hadoop/common/hadoop-2.8.2/hadoop-2.8.2.tar.gz.mds

Şimdi de ilk indirdiğimiz dosyanın SHA-256 değerine bakalım.

$ shasum -a 256 hadoop-2.8.2.tar.gz
aea99c7ce8441749d81202bdea431f1024f17ee6e0efb3144226883207cc6292  hadoop-2.8.2.tar.gz

Şimdi sıra kontrol için indirdiğimiz .mds dosyasının içindeki SHA-256 değerine bakmaya geldi. Bunada aşağıdaki gibi bakıp değerleri karşılaştıralım.

$ cat hadoop-2.8.2.tar.gz.mds | grep SHA256
SHA256 = AEA99C7C E8441749 D81202BD EA431F10 24F17EE6 E0EFB314 42268832 07CC6292

Gördüğünüz üzere indirdiğimiz dosyada transfer sırasında herhangi bir bozukluk bulunmadığını garanti etmiş olduk.

İlk önce tar.gz formatındaki sıkıştırılmış dosyamızı açalım.

$ tar xzf hadoop-2.8.2.tar.gz

Şimdi çıkardığımız bu dosyaları /usr/local dizini altına kopyalayalım.

$ sudo mv hadoop-2.8.2 /usr/local/hadoop

Şu an ortamımızı ihtiyaçlarımıza göre ayarlamak için hazır durumdayız.

Hadoop’ un Java Ana Dizininin Ayarlanması

Hadoop, ortam değişkenleri ve Hadoop ayar dosyasının bulunduğu Java yolunun ayarlanmasına ihtiyaç duyar.

Java yolu, /etc/alternatives/java yoluna sembolik link ile bağlı /usr/bin/java yoludur. Biz burada readlink komutunu -f parametresi ile kullanarak bu yol üzerindeki tüm linkleri recursive olarak takip edeceğiz. Daha sonrasında sed komutu ile JAVA_HOME’ un doğru değerini almasını sağlayacağız.

$ readlink -f /usr/bin/java | sed "s:bin/java::"

Aşağıdaki gibi bir çıktı ile karşılaşacağız.

/usr/lib/jvm/java-8-openjdk-amd64/jre/

Şimdi bu çıktıyı statik olarak veya readlink ile dinamik olarak ayarlayabilirsiniz.

İlk olarak hadoop-env.sh dosyasına girelim, bu dosyada export JAVA_HOME=${JAVA_HOME} olan satırın başına # karakteri yerleştirerek bu satırı yorum satırı haline getirip ilgili dosyanın altına doğru JAVA_HOME değerini aşağıdaki gibi düzenlemeliyiz.

$ sudo nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh

1. Seçenek: Değeri Statik ayarlama

...
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/
...

2. Seçenek: Değeri Readlink Kullanarak Dinamik Ayarlama

...
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
...

Dosyayı kaydedip çıkalım.

Hadoop’ u Çalıştırma

Artık Hadoop’u çalıştırabiliriz.

$ /usr/local/hadoop/bin/hadoop

Aşağıdaki gibi bir çıktı ile karşılaşacağız.

örnek hadoop çıktısı

Yukarıdaki çıktı ile karşılaştıysanız Hadoop’ u stand-alone modda başarılı şekilde kurmuşsunuz demektir. Şimdi örnek MapReduce programı ile herşeyin doğru çalıştığını kontrol edelim. İlk olarak bu işlemi yapmak için HOME dizininde input adında bir dizin yaratalım ve sonrasında Hadoop ayar dosyasını bu dizine kopyalayalım.

$ mkdir ~/input
$ cp /usr/local/hadoop/etc/hadoop/*.xml ~/input

Şimdi MapReduce hadoop-mapreduce-examples programını aşağıdaki komut ile çalıştıracağız. hadoop-mapreduce-examples içinde birçok örnek bulunmakta ve input dizini olan input ve output dizini olan grep_example dizinlerini grep programı ile kısıt koyarak içlerinde var mı yok mı bu kısıtlara direk olarak bakacağız. MapReduce grep programı harfi harfine uyan veya regular expression olarak eşleşen eşleşmeleri saymaktadır. Regular expression ile principal kelimesini kelime içinde veya bildirilen cümle içinde var mı yok mu onu kontrol edeceğiz. Bu sorgu büyük küçük harf duyarlı olacak o yüzden aradığımız kelime cümle başında ise bu arama sonucumuza yansımayacaktır.

$ /usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.0.jar grep ~/input ~/grep_example 'principal[.]*'

Komut sonrası aşağıdaki gibi bir çıktı ile karşılaşacaksınız.

...
 File System Counters
 FILE: Number of bytes read=1273122
 FILE: Number of bytes written=2501414
 FILE: Number of read operations=0
 FILE: Number of large read operations=0
 FILE: Number of write operations=0
 Map-Reduce Framework
 Map input records=2
 Map output records=2
 Map output bytes=37
 Map output materialized bytes=47
 Input split bytes=115
 Combine input records=0
 Combine output records=0
 Reduce input groups=2
 Reduce shuffle bytes=47
 Reduce input records=2
 Reduce output records=2
 Spilled Records=4
 Shuffled Maps =1
 Failed Shuffles=0
 Merged Map outputs=1
 GC time elapsed (ms)=61
 Total committed heap usage (bytes)=259776512
 Shuffle Errors
 BAD_ID=0
 CONNECTION=0
 IO_ERROR=0
 WRONG_LENGTH=0
 WRONG_MAP=0
 WRONG_REDUCE=0
 File Input Format Counters
 Bytes Read=151
 File Output Format Counters
 Bytes Written=37

Eğer output dizini daha önceden mevcut ise aşağıdaki gibi örnek hatalar ile karşılaşmanız olasıdır.

...
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

Şimdi sonuçlarımız output dizininde depolanmakta ve bunlara aşağıdaki gibi cat komutu ile bakalım.

$ cat ~/grep_example/*

Aşağıdaki gibi benzer bir çıktı ile karşılaşacaksınız.

hadoop örnek çıktı 2

Yukarıdaki sonuç bize Hadoop stand-alone versiyonunun kurulum ve çalışmasında herhangi bir sorun yaşamadığımızı görmüş oldu. Yukarıda principal kelime içinde ( principal, principally, principality vs. ) 6 kere geçtiğini ve 1 kere de cümle sonunda bulunduğunu bize söylemektedir. Ancak sistem üzerinde hakkı olmayan kullanıcıların Hadoop’ u kullanma ve üzerinde işlem yapmaya yetkisi bulunmamaktadır.

Bu dokümanda, makalede yazan komutları, çözümleri uygulamak tamamen kullanıcının kendi sorumluluğunda ve insiyatifin de olan bir konudur, mevcut komutların uygulanması ile doğabilecek, oluşabilecek her türlü sorumluluk ve sonuçlar kullanıcının kendisine aittir, CloudEOS’ un bu konuda herhangi bir sorumluluğu bulunmamaktadır.

15 Paylaşımlar