GATHERING HADOOP METRICS TO GANGLIA

Standard

These days I was working with Ganglia. In UCD Lab, We have 10 slave + 1 master Hadoop Cluster. We need to monitor our cluster during Hadoop jobs. For this problem we used ganglia which is fancy monitoring tool. According to Ganglia People: “Ganglia is a scalable distributed monitoring system for high-performance computing systems such as clusters and Grids.” Also It provides Web UI so we can check our cluster status. It’s bit oldy but still is goldy. But it still receives updates.

I was looking for way to connect my hadoop cluster to ganglia. Fortunately, Hadoop community provide solution connecting Hadoop to ganglia.

Let’s configure…

For Master:

Change directory to Hadoop/etc/hadoop/

Edit hadoop-metrics2.properties(PS: period defines the number of seconds between each update cycle.)

namenode.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
namenode.sink.ganglia.period=10
namenode.sink.ganglia.servers=PUT_HERE_GMETAD_IP:8649

resourcemanager.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
resourcemanager.sink.ganglia.period=10
resourcemanager.sink.ganglia.servers=PUT_HERE_GMETAD_IP:8649

For each slave:

Change directory to Hadoop/etc/hadoop/

Edit hadoop-metrics2.properties

datanode.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
datanode.sink.ganglia.period=10
datanode.sink.ganglia.servers=PUT_HERE_GMETAD_IP:8649

nodemanager.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
nodemanager.sink.ganglia.period=10
nodemanager.sink.ganglia.servers=PUT_HERE_GMETAD_IP:8649

After editing, now restart Hadoop Cluster:

mr-jobhistory-deamon.sh stop historyserver
stop-yarn.sh
stop-dfs.sh

mr-jobhistory-deamon.sh start historyserver
start-yarn.sh
start-dfs.sh

Now restart gmetad

/etc/init.d/gmetad restart

As a last, restart each ganglia-monitor:

service ganglia-monitor restart

Perfect now you can monitor your cluster from heartbeat to jvm status.

ganglia-heartbeat

HADOOP FILE SYSTEM (HDFS)

Standard

HDFS, NTFS gibi datayı bloklara ayırarak depolar. NTFS gibi son derece oturmuş bir dosya sistemi yerine HDFS kullanılmasını amacı Hadoop uygulamalarının erişilebilirliği yüksek dağıtık dosya sistemine ihtiyacı vardır. NTFS bu açıdan bakıldığında yetersiz kalmaktadır.

NTFS LimitleriHDFS Limitleri
Eğer harddisk alanı dolduysa n’olur ? Hiç bir dosya depolanamaz.HDFS çeşitli clusterlarda veriyi tuttuğu için kolaylıkla bu alan arttırılabilir.
Eğer ana bilgisayar(server) veya harddisk hataya düşerse n’olur ?HDFS güvenilirdir. Bir hata oluşsa dahi diğer datanodelardan replikalarıyla değiştirilebilir.
NTFS & EXT3 dosya sistemleri genellikle 4 veya 8 KB bloklar halinde verileri tutarlar. Böylelikle birden fazla okunma yapılması gerekir.HDFS’in varsayılan blok büyüklüğü 64MB. böylelikle daha az dosya tutulur ve tutulması gereken metadata bilgiside bu sayede azalır. Ayrıca HDFS harddiskten okuma yapmak üzerine optimize edilmiştir.
NFS yönetimi genelde komut satırı veya genel sistem yönetimi araçlarıyla yapılır.HDFS bize performans durmunu ve dosyaları görüntülememiz için web sunucusu sunar.( Varsayılan portu 50070 tir.)

Ntfs ve hdfs karşılaştırması [1]

HDFS her dosyanın 3 kopyası(replication) tutulmaktadır. Bu sayede bir datanode ölse bile diğer datanodelerından veri kurtarılabilmektedir. İstendiği takdirde bu değer değiştirilebilmektedir. Bunun için hadoop’un klasöründe ki aşağıdaki dosya düzenlenmelidir.

hdfs-site.xml 

<property> 
<name>dfs.replication<name> 
<value>3<value> 
<description>Block Replication<description> 
<property>

Ya da bunun alternatifi olarak her dosyanın replikası sayısı tek tekte belirlenebilir. Bunun için aşağıdaki komut kullanılabilir. Buna bir ek daha aşağıdaki ikinci komut -R (özyinelemeli)recursive olarak tüm dosyalar için çalışacaktır.

hadoop fs –setrep –w 3 /hduser/somefile.txt
hadoop fs –setrep –w 3 -R /hduser/

HDFS’in birincil önceliği datanın güvenirliğini sağlamaktır. HDFS’te hata 3 tür durumda görülebilir:

  1. NameNode failure
  2. DataNode failure
  3. Network partitions failure

Her DataNode NameNode düzenli olarak heartbeat(kalp atışı) yollar. Network bölümlenmesi DataNodeların bağlantısını kaybetmesine sebep olabilir. Bu durumda NameNode heartbeat in ulaşmadığını tespit eder. Namenode bu heartbeat gelmeye node’u ölü olarak işaretler. Bu durumda yeni GÇ isteği yollamaz.Artık bu node HDFS erişilebilir değildir. Bu ölü data node belirlenen bazı bloklarının kopyalanmasına(çoğaltılmasına) yol açabilir. Böylelikle daima verinin güvenirliliği sağlamaktadır. [2]


Faydalı fs shell komutları:

hduser altında folder isimli dosya oluştur.

bin/Hadoop dfs -mkdir /hduser/folder

hduser altında folder isimli dosyayı siler.R parametresi, recursive olarak uygular yani tüm alt dosyalarıda siler.

bin/Hadoop fs -rm -R /hduser/folder

hduser altında folder isimli dosyanın içeriğini görüntüler

bin/Hadoop dfs -cat /hduser/folder

Bazı hdfs komutları


Referanslar
[1] http://news.sys-con.com/node/2665115
[2] http://hadoop.apache.org/docs/r1.2.1/hdfs_design.html

Hadoop nedir? (Büyük Veri ve Hadoop’a Giriş 2)

Standard

Hadoop, sıradan sunuculardan (commodity hardware) oluşan küme (cluster) üzerinde büyük verileri işlemek amaçlı uygulamaları çalıştıran ve Hadoop Distributed File System (HDFS) olarak adlandırılan bir dağıtık dosya sistemi ile Hadoop MapReduce özelliklerini bir araya getiren, Java ile geliştirilmiş açık kaynaklı bir kütüphanedir. Daha yalın bir dille anlatmak gerekirse, Hadoop, HDFS ve MapReduce bileşenlerinden oluşan bir yazılımdır.[1]

2005 yılında Mike Cafarella ve Doug Cutting (yazılıma çocuğunun oyuncak filinin adını vermiştir) tarafından oluşturulan Hadoop, başlangıçta web ile ilgili arama verileri için tasarlanmıştı. Bugün Hadoop, her çeşit kuruluş ve endüstride kullanılan Apache Software Foundation’ın açık kaynak kodlu ve topluluk tarafından oluşturulan bir projesidir.[2]

HDFS(Hadoop Distributed File System): Dağıtık dosya sistemi, Hadoop kümeleri içinde yüksek performanslı erişim imkânı sunan Hadoop uygulamaları tarafından kullanılan birincil depolama sistemidir. Hadoop çok sayıda sıradan sunuculara kurulacağı için server hataları oldukça fazla olabilir. HDFS geliştirilirken temel amaçlardan biri bu hataların mümkün mertebe tolere edebilmek için oluşturulur. Bu sayede bilgisayar düğümleri(node) arasındaki veri transferi ne kadar hızlı olsa da sistemin bu hatalardan sistem etkilenmeden çalışmaktadır.

Hadoop’ta 4 tip node(düğüm) bulunur. Bu düğümler:

  1. Name Node
  2. Data Node
  3. Job Tracker
  4. Task Tracker

    ŞEKİL 2.1 Hadoop’un Node(Düğümleri)

Görevlerin çalışmasını kontrol eden iki tip node vardır: jobtracker ve tasktracker dır. Jobtracker tasktracker da çalışacak bütün jobların çalışmasını kontrol eder. Tasktracker ise görevleri çalıştırarak, ilerleme raporlarını jobtracker’a gönderir. Jobtracker her job için genel ilerlemeyi tutar. Eğer task(görev) başarısız olursa jobtracker başka bir tasktracker da çalışması için programlayabilir.[1]

NameNode, filesystem namespace(dosya sistemi) kontrol eder. Dosya sistemi ağaçlarını ve bu ağaçlarda bütün dosyaların ve klasörlerin metadatalarını bakımlarını sürdürür. DataNode, client veya namenode tarafından istendiği takdir de blokları tutmak veya getirmekte görevlidirler. Düzenli olarak namenode’a hangi blokları tuttuklarını raporlar.

hadoopnodes

Referanslar
1. http://devveri.com/Hadoop-nedir
2. https://azure.microsoft.com/tr-tr/solutions/Hadoop/

Büyük Veri ve Hadoop’a Giriş

Standard

Büyük veri, geleneksel veri işleme uygulamalarının yetersiz olduğu çok büyük ya da karmaşık (yapılandırılmamış) veri setleri için kullanılan bir terimdir. Veri setleri her geçen gün oldukça büyümektedir. Bu büyümeye en büyük etki, ucuz ve çok sayıda ki bilgi üreten çeşitli sensörlerdir. Veri büyümeleriyle ilgili gerçek örnekler[1]:

  • New York Borsası her gün yaklaşık 1 terabayt veri üretmektedir.
  • Facebook yaklaşık 10 milyar fotoğrafı tutmaktadır. Bu 1 petabayt yer kaplamaktadır.
  • Internet Archives(http://www.archive.org) 2 petabayt veri tutmakta ve her ay bu veri kabaca 20 terabayt büyümektedir.
  • Ancestry.com soyağacı sitesi, 2.5 petabayt verisi vardır.
  • İsviçre Cenevre’deki Büyük Hadron çarpıştırıcısı yılda yaklaşık 15 petabaytlık veri üretmektedir.

ŞEKİL 1.2 Hadoop’un çalışması[2]

Bu bilgilere bakıldığında veri çağında yaşanıldığı söylenebilir. Hadoop işte burada ortaya çıkan büyük verileri analiz etmek için çıkan etkili bir çözümdür. Hadoop ile büyük pahalı makineler yerine çok sayıda küçük ucuz makineler kümesi(cluster) kullanılarak hızlı işlem yapmak amaçlanmaktadır. Bunu yapabilmek için geliştirilen MapReduce tekniği yapılacak olan işlemin bu kümedeki işlemcilere dağıtılmasına ve bu düğümlerin(nodeların) paralel olarak çalışmalarına sağlar.

ŞEKİL 1.1 Hadoop kümeleri[2]

Nisan 2008’de Hadoop terabaytlık datayı sıralayarak dünyanın en hızlı sistemi olarak dünya rekoru kırmıştır. 910 tane düğümde çalışan Hadoop, 1 terabayt datayı sadece 209 saniyede sıralamayı başarmıştır. Aynı yılın eylül ayında Google MapReduce implementasyonu 68 saniyede 1 terabayt datayı sıralamıştır. Mayıs 2009 da Yahoo 1 terabayt datayı Hadoop kullanarak 62 saniyede sıralamıştır [1]. Yine Yahoo 2013 yılında Hadoop kullanarak 102.5 TB veriyi 4,328 saniyede 2100 düğüm kullanarak sıralamıştır.


Referanslar
1. Tom White (2012)Hadoop: The Definitive Guide / Tom White.ISBN:978-1-449-31152-0 pg 1,31
2. http://www.glennklockwood.com/data-intensive/Hadoop/overview.html

HADOOP KURULUMU

Standard

Dökümantasyon da yardımı geçen Hasan Akgün teşekkür’ü bir borç bilirim 😉

HADOOP ÖNCESİ PRE-REQUIREMENTS KURULUMLARI

İlk olarak java jre ve jdk yüklenir. Bunun için:

sudo apt-get install openjdk-7-jre

sudo apt-get install openjdk-7jdk

kurulur. Sonra

java -version
-> denilerek java nın kurulduğu check edilir.

Şimdi hadoop için user açmalıyız.

sudo addgroup hadoop
-> hadoop grubu oluşturuk.

sudo adduser –ingroup hadoop hduser
-> hduser kullanıcı oluşturduk bu kullanıcı hadoop grubuna dahil.

Şimdi SSH configure etmemiz gerekiyor.

Hadoop node ları yönetmek için ssh kullanır.Bunun için ssh yüklememiz lazım:

sudo apt-get install ssh

sudo apt-get install rsync

Şimdi ssh için anahtar çifti yaratacağız.

user@ubuntu:~$ su – hduser

hduser@ubuntu:~$ ssh-keygen -t rsa -P “”

Generating public/private rsa key pair.

Enter file in which to save the key (/home/hduser/.ssh/id_rsa):

Created directory ‘/home/hduser/.ssh’.

Your identification has been saved in /home/hduser/.ssh/id_rsa.

Your public key has been saved in /home/hduser/.ssh/id_rsa.pub.

The key fingerprint is:

9b:82:ea:58:b4:e0:35:d7:ff:19:66:a6:ef:ae:0e:d2 hduser@ubuntu

İkinci satır boş şifreli RSA anahtar çifti yaratıyor. Şimdi bu anahtar çifti için ssh erişimini onaylayalım.

hduser@ubuntu:~$ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

Son olarak ssh test edelim.

hduser@ubuntu:~$ ssh localhost

The authenticity of host ‘localhost (::1)’ can’t be established.

RSA key fingerprint is d7:87:25:47:ae:02:00:eb:1d:75:4f:bb:44:f9:36:26.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘localhost’ (RSA) to the list of known hosts.

Linux ubuntu 4.2.0-16-generic #19-Ubuntu SMP Thu Oct 8 15:35:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

HADOOP KURULUMU

hduser ile giriş yapılarak aşağıdaki adımlar izlenir.Aşağıdaki linkten hadoop setup dosyaları indirilir.



2.7.2 versiyonunun binary kodunu indiriyoruz. Çıkan linkten dosyalar indirilir.

URL : http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz


Aşağıdaki komut ile kopyalama yapılır.

sudo mv /home/hduser/Downloads/hadoop-2.7.2.tar.gz /usr/local/


cd /usr/local
-> diyerek local e gidilir.Sonra indirdiğimiz tar.gz yi çıkarmak için

sudo tar xzf hadoop-2.7.2.tar.gz
-> sudo yaptığınız userın admin olmasına dikkat edin hduser admin değil !

mv hadoop-2.7.2 hadoop
-> diyerek dosya adını hadoop yapıyoruz.

Dosyayı çıkardıktan sonra yetkisini değiştirmek için

chown hduser:hadoop /hadoop –R
->yaparak özyinelemeli olarak yetkilendirme işlemini yapabiliriz


Hadoop’un çalışması için doğru java pathini görmesi gerekmektedir. Bu yüzden aşağıdaki yolda bulunan hadoop-env.sh jobının içinde JAVA_HOME değerinin güncellemeliyiz.

cd /usr/local/hadoop/etc/hadoop
-> yaparak hadoop folderına gidiyoruz.Sonra hadoop-env.sh modifiye etmek için

nano /hadoop-env.sh
->yapılır.


export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

NOT: Siz burada kendi java home folder path ini yazmanız gerekiyor.

Hadoop şu ana kadar izlediğimiz adımlar Hadoopun çalışmasına yetecektir. Fakat daha etkin kullanım için aşağıdaki konfigürasyon ayarlarınında yapılması gerekmektedir.

Aşağıdaki komutlar ile hadoop.tmp.dir parametresinin ihtiyaç duyduğu dosya create edilir ve yetkilendirilir.

$ sudo mkdir -p /app/hadoop/tmp

$ sudo chown hduser:hadoop /app/hadoop/tmp

$ sudo chmod 750 /app/hadoop/tmp

  • core-site.xml üzerindeki düzenlemeler;

core-site.xml dosyası /usr/local/hadoop/etc/hadoop yolunda bulunmaktadır. Dosyayı editleyerek aşağıdaki scripti iki <configurations> arasına yazıyoruz.

<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property><name>fs.default.name</name>
<value>hdfs://localhost:54310</value>
<description>The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation. The uri’s scheme determines the config property (fs.SCHEME.impl) naming
the FileSystem implementation class. The uri’s authority is used to
determine the host, port, etc. for a filesystem.</description>
</property>


  • mapred-site.xml üzerindeki düzenlemeler;

    mapred-site.xml dosyası /usr/local/hadoop/etc/hadoop yolunda bulunmaktadır. Dosyayı editleyerek aşağıdaki scripti iki <configurations> arasına yazıyoruz.

<property>

<name>mapred.job.tracker</name>

<value>localhost:54311</value>

<description>The host and port that the MapReduce job tracker runs

at. If “local”, then jobs are run in-process as a single map

and reduce task.

</description>

</property>


  • conf/hdfs-site.xml üzerindeki düzenlemeler;

    mapred-site.xml dosyası /usr/local/hadoop/etc/hadoop yolunda bulunmaktadır. Dosyayı editleyerek aşağıdaki scripti iki <configurations> arasına yazıyoruz.

<property>

<name>dfs.replication</name>

<value>1</value>

<description>Default block replication.

The actual number of replications can be specified when the file is created.

The default is used if replication is not specified in create time.

</description>

</property>


Son olarak .bashrc modifiye edelim…Bunun için home folderdaki(/home/kullanıcıAdınız) .bashrc dosyasına aşağıdaki satırları ekleyin.(sizin kurulum yaptığınız java pathi olması lazım…)

export HADOOP_HOME=/usr/local/hadoop

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

 

Herşey tamamsa hadoop başlatabiliriz bunun için

/usr/local/hadoop/sbin/start-all.sh
-> ile hadoop start edilir.


Hadoop start edildikten sonra

jps

komutu ile aşağıdaki hadoop dosyalarının çalışırlığını kontrol etmeliyiz.