21 Mart 2016 Pazartesi

FLUME -1


Merhaba,

Daha önceki bloglarımda bahsettiğim gibi sohbet babındaki yazılarıma ek olarak eski yazılarımda olduğu gibi teknik konular hakkında da yazılarıma devam edeceğimi yazmıştım.

Bu blog yazımda FLUME hakkında bahsedeceğim. Aşağıdaki soruların cevaplarını vermeye çalışacağım.  

Sanırım flume-1,2,3,4 şeklinde, flume ile ilgili yazılarımı bitirebilirim. 
Planım aşağıdadır.
4. Flume yazımda kafka ile entegrasyon kısmı anlatılacaktır. 
Ama öncesinde Kafka nedir? Nasıl kurulur? Kullanımı? Örnekleri? vs.vs. şeklinde bir yazı dizisi için de vereceğim.  
Aslında kafka ile message queue  işlemleri oldukça önemli ve uzun bir yazı dizisi şeklinde olacaktır.
Kafka’ da message queue işlemleri ile spark streaming ve cep projelerini de kapsamlı örnekleri ile anlatacağım.

Planım Aşağıdadır :
·         Flume – 1 Blog Yazımda :
o   Flume nedir?
o   Ne amaçla kullanılır?
o   Nasıl Kurulur?
o   Konfigürasyon – Yapılandırma işlemleri nasıl yapılır?

·         Flume – 2 Blog Yazımda :
o   Birkaç örnek yapılacaktır.  (“vmstat -1” , “tail –f file” )

·         Flume – 3 Blog Yazımda :
o   Twitter dinleme kapsamlı şekilde anlatılıp yapılacaktır.

·         Flume – 4 Blog Yazımda :
o   Flume ve kafka entegrasyonu


Flume Nedir?
   

Flume: Flume is a framework for populating Hadoop with data. Agents are populated throughout ones IT infrastructure – inside web servers, application servers and mobile devices, for example – to collect data and integrate it into Hadoop.


Flume: Hadoop’ a aktarılacak dosyaların (log datası, ftp dataları, twitter datası vs.vs. ) toplanması, aggregate edilmesi ve taşınmasını sağlayan bir uygulamadır.


Flume  bir java uygulaması olarak çalışır. Zaten hadoop’ un etrafındaki hemen hemen tüm uygulamalar java uygulamasıdır.
Bu java uygulamasına agent denilmektedir.  Bu agent kelimesini flume içinde çok kullanacağız.

Aşağıdaki resim flume’ un mimarisini anlatmaktadır.


Alıntıdır : resim flume apache org sitesinden alıntıdır. 
 Burada source olarak log dosyalarınız, twitter verisi vs.vs. alıp kendi hdfs sisteminize, source tarafta yeni bir dosya vs. geldiğinde hdfs sistemine yazmak isterseniz flume kullanabilirsiniz.


Aslında tüm bu işlemleri custom kendinizin yazacağı bir uygulama ile de yapabilirsiniz tabi ki.

Ben de custom – manuel script – uygulama yazma vs. şekilde çalışıyorum.
Source taraftan aktarılacak dosyaların hdfs ortamına düzenli şekilde aktarımı için kendi yazdığım custom uygulama-sh script vs.vs. kullanmaktayım.
Fakat kendiniz yazmak yerine hadoop’ un tool’ larıdan olan flume kullanabilirsiniz tabi ki. Tercih sizin.

Neden kendin yazıp, flume gibi bir tool kullanmıyorsun denilebilir?
Production ortamlarım da  flume kullanmamamı kötü anlamında yorumlamayın.
Kendimin yazdığı koda ve uygulamaya hakim olmam ve bugüne kadar hep kod tarafta kendi işimi kendim gördüğümden benim de tercihim bu şekilde olmaktadır. Aslında pek çok neden var. Ama asıl konumuzun dışına çıkmak istemiyorum. Tek neden kendi yazdığım kod olması değil yani.

Büyük bir firmada, kendi çapında büyük sayılabilecek csv dosyalarını ftp ortamından hdfs ortamına flume kullanarak aktarma işlemini yapanları biliyorum. Flume agent’ ları düzenli şekilde çalışmakta yani işlerini görmektedir. 

Kullanıp kullanmama konusunda kendi ortamlarınızda birkaç PoC yaparak karar vermenizi tavsiye ederim. Pek çok yerde flume çok kolay ve işinizi görmektedir. Eğer basit-hızlıca geliştirebileceğiniz bir şey arıyorsanız flume pek çok yerde işinizi görmektedir.


Flume içinde agent ifadesini çok kullanacağımızı belirtmiştim.

Resimde görüleceği üzere agent = source + channel + sink şeklinde ifadelerin tanımlanması ve ya bütününe denir.

Yani bir flume agent’ ı create etmek istediğinizde source + channel + sink tanımlamalısınız.

Source adı üstünde kaynak tarafı tanımlıyorsunuz.

Sink ise verinizin yazılacağı yer yani target.

Channel ise source ve sink arasında bağlantı kuran bir yapıdır.

Bu ara bağlantıda verilerinizin nerede tutulacağını belirtirsiniz.

Genelde memory seçilmektedir.

Aşağıdaki resimde agent = source + channel + sink ‘ i daha iyi anlatan bir resim bulunmaktadır.




Resim de aslında source – sink – channel nedir daha iyi anlaşılmaktadır.
Bu kadar teorik bilgiden sonra artık ellerimizi kirletmenin vakti geldi. Teorik bilgi bitmez biliyorsunuz.

Flume Kurulumu :
Daha önceki blog yazılarımı takip edenler bilirler.
Kurulumlarda hep aynı sıra vardır.
Kurulumlar sizleri korkutmasın.
Öncelikle apache sitesinden flume indirilir.  
Ben bu kurulumda Flume 1.3.1 versiyonunu kurulmasını anlatacağım.
Tüm versiyonların kurulumu ve konfigürasyonu aynıdır.
En son 1.6.0 kurmuştum. Ama eski eğitim notlarında 1.3.1 olduğundan ve eğitim notlarını güncellemek zor geldiğinden 1.3.1 kurulumu anlatacağım.

Apache sitesinden flume tar dosyası download edilir : http://flume.apache.org/download.html

Aşağıdaki komutu terminal üzerinden çalıştırıp flume dosyasını siteden kopyalamış oluyoruz.

Böylelikle flume klasörüne apache-flume-1.3.1-bin.tar.gz dosyası kopyalanmış oldu.
[hadoop@mmetincentosos flume]$ ls
    apache-flume-1.3.1-bin.tar.gz

apache-flume-1.3.1-bin.tar.gz dosyası tar komutu ile aynı yere açılır. Aşağıdaki komutu terminal üzerinden çalıştırınız.
[hadoop@mmetincentosos flume]$ tar zxpf apache-flume-1.3.1-bin.tar.gz
apache-flume-1.3.1-bin adında klasör oluşturulmuş olacaktır.

Klasörde yer alan isimlendirmede versiyon’ dan kurtulmak için mv apache-flume-1.3.1-bin flume yazmanız yeterlidir.

Flume Konfigürasyon - Yapılandırma İşlemleri:
           
Yine eski blog yazılarımı takip edenler bilirler. Kurulum işleminden sonra yapılandırma - konfigürasyon işlemi yapılacaktır.
Burada kurulumu yapılan flume klasöründe conf adında bir klasör yer almaktadır.

Flume conf klasöründe konfigürasyon dosyaları yer almaktadır.
[hadoop@mmetincentosos conf]$ pwd
/home/hadoop-1.2.0/flume/conf

conf klasöründe aşağıdaki iki dosya yer almaktadır. Bunları silmeden bu iki dosyadan kopyalama işlemi yapılır.
flume-conf.properties.template conf  =   flume.conf
flume-env.sh.template conf                   = flume-env.sh

[hadoop@mmetincentosos conf]$ cp flume-conf.properties.template flume.conf
[hadoop@mmetincentosos conf]$ cp flume-env.sh.template flume-env.sh

Buradaki en önemli dosyamız flume.conf dosyasıdır.
Yukarıda bahsettiğim gibi flume agent tanımlama bu dosya üzerinde gerçekleştirilecektir.
Yani source tanımlama – sink tanımlama ve channel tanımlama işlemlerini flume.conf dosyası üzerinde yapacağız.

Bir sonraki blog yazılarımda “vmstat 1” ve “tail –f dosya” linux komutlarının çıktılarını flume ile dinleyip hdfs ortamına sürekli aktarılmasını sağlayan blog yazımı paylaşacağım.

Bugünkü blog yazımız bu kadar.
Bir sonraki blog yazımda görüşmek dileğiyle.
Lütfen, yorumlarınızı bekliyorum.
mmetin
http://tr.linkedin.com/in/muratmetin


Hiç yorum yok:

Yorum Gönder