Apache Flume Eğitimi: Nedir, Archidoku ve Hadoop Örneği

Hadoop'ta Apache Flume nedir?

Apaçi Kanalı büyük miktarda günlük verisini toplamak, birleştirmek ve taşımak için güvenilir ve dağıtılmış bir sistemdir. Akışlı veri akışlarına dayalı basit ancak esnek bir mimariye sahiptir. Apache Flume, web sunucularından günlük dosyalarında bulunan günlük verilerini toplamak ve analiz için HDFS'ye birleştirmek için kullanılır.

Hadoop'taki Flume, aşağıdakiler gibi birden fazla kaynağı destekler:

  • 'kuyruk' (yerel bir dosyadan veri aktarır ve Unix'in 'kuyruk' komutuna benzer şekilde Flume aracılığıyla HDFS'ye yazar)
  • Sistem günlükleri
  • Apache log4j (olanak vermek Java Flume aracılığıyla HDFS'deki dosyalara olay yazmak için uygulamalar).

suyolu Archidoku

A Kanal ajanı bir JVM 3 bileşeni olan süreç –Kanal Kaynağı, Kanal Kanalı ve Kanalizasyon Lavabo– olayların harici bir kaynakta başlatıldıktan sonra yayıldığı yol.

suyolu Archidoku
suyolu Archidoku
  1. Yukarıdaki şemada, harici kaynak (WebServer) tarafından oluşturulan olaylar Flume Veri Kaynağı tarafından tüketilmektedir. Harici kaynak, olayları Flume kaynağına hedef kaynak tarafından tanınan bir formatta gönderir.
  2. Flume Source bir olayı alır ve onu bir veya daha fazla kanala kaydeder. Kanal, olayı kanal lavabosu tarafından tüketilene kadar saklayan bir depo görevi görür. Bu kanal, bu olayları saklamak için yerel bir dosya sistemi kullanabilir.
  3. Flume havuzu, olayı bir kanaldan kaldırır ve HDFS gibi harici bir depoda saklar. Birden fazla kanal ajanı mevcut olabilir; bu durumda kanal batması, olayı akıştaki bir sonraki kanal ajanının kanal kaynağına iletir.

FLUME'un bazı önemli özellikleri

  • Flume, akışlı veri akışlarına dayalı esnek bir tasarıma sahiptir. Çoklu yük devretme ve kurtarma mekanizmalarıyla hataya dayanıklı ve sağlamdır. Flume Big data'nın sunduğu farklı güvenilirlik düzeyleri vardır; 'en iyi çabayla teslimat' ve bir 'uçtan uca teslimat'. En iyi çabayla teslimat Flume düğümü arızasını tolere etmezken 'uçtan uca teslimat' modu birden fazla düğüm arızası durumunda bile teslimatı garanti eder.
  • Flume, kaynaklar ve havuzlar arasında veri taşır. Bu veri toplama işlemi planlanmış veya olaya dayalı olabilir. Flume'un, her yeni veri kümesinin amaçlanan havuza taşınmadan önce dönüştürülmesini kolaylaştıran kendi sorgu işleme motoru vardır.
  • Mümkün Kanalizasyon lavaboları dahil HDFS ve HBazFlume Hadoop ayrıca ağ trafiği verileri, sosyal medya siteleri tarafından oluşturulan veriler ve e-posta mesajları dahil ancak bunlarla sınırlı olmamak üzere olay verilerini taşımak için de kullanılabilir.

Flume, kütüphane ve kaynak kodu kurulumu

Gerçek işleme başlamadan önce Hadoop'un kurulu olduğundan emin olun. Kullanıcıyı 'hduser' olarak değiştirin (Hadoop yapılandırması sırasında kullanılan kimlik, Hadoop yapılandırmanız sırasında kullanılan kullanıcı kimliğine geçebilirsiniz)

Flume, Kütüphane ve Kaynak Kodu Kurulumu

) 1 Adım 'FlumeTutorial' adında yeni bir dizin oluşturun

sudo mkdir FlumeTutorial
  1. Okuma, yazma ve yürütme izinleri verin
    sudo chmod -R 777 FlumeTutorial
  2. Dosyaları kopyala MyTwitterSource.java ve MyTwitterSourceForFlume.java bu dizinde.

Giriş Dosyalarını Buradan İndirin

Tüm bu dosyaların dosya izinlerini kontrol edin ve 'okuma' izinleri eksikse aynısını verin.

Flume, Kütüphane ve Kaynak Kodu Kurulumu

) 2 Adım Bir siteden 'Apache Flume'u indirin- https://flume.apache.org/download.html

Bu Flume eğitiminde Apache Flume 1.4.0 kullanılmıştır.

Flume, Kütüphane ve Kaynak Kodu Kurulumu

Sonraki Tıklama

Flume, Kütüphane ve Kaynak Kodu Kurulumu

) 3 Adım İndirilen tarball'ı istediğiniz dizine kopyalayın ve aşağıdaki komutu kullanarak içerikleri çıkarın

sudo tar -xvf apache-flume-1.4.0-bin.tar.gz

Flume, Kütüphane ve Kaynak Kodu Kurulumu

Bu komut adında yeni bir dizin yaratacaktır. apache-flume-1.4.0-bin ve dosyaları içine çıkartın. Bu dizin şu şekilde anılacaktır: makalenin geri kalanında.

) 4 Adım Flume kütüphane kurulumu

kopya twitter4j-core-4.0.1.jar, flume-ng-configuration-1.4.0.jar, flume-ng-core-1.4.0.jar, flume-ng-sdk-1.4.0.jar için

/lib/

Kopyalanan JAR'lardan birinin veya tamamının izin yürütmesi gerekmesi mümkündür. Bu, kodun derlenmesinde bir soruna neden olabilir. Bu nedenle, böyle bir JAR'ın yürütme iznini iptal edin.

Benim durumumda, Twitter4j-core-4.0.1.jar (önceki değeri) izni yürütmek zorunda. Aşağıdaki şekilde iptal ettim:

sudo chmod -x twitter4j-core-4.0.1.jar

Flume, Kütüphane ve Kaynak Kodu Kurulumu

Bu komuttan sonra 'okuma' izni verilir Twitter4j-core-4.0.1.jar her için.

sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar

Lütfen indirdiğimi unutmayın.

– twitter4j-core-4.0.1.jar itibaren https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core

- Tüm alev JAR'ları, yani, flume-ng-*-1.4.0.jar itibaren http://mvnrepository.com/artifact/org.apache.flume

Flume kullanarak Twitter'dan veri yükleme

) 1 Adım Kaynak kod dosyalarının bulunduğu dizine gidin.

) 2 Adım set CLASSPATH'E içeren /lib/* ve ~/FlumeTutorial/flume/mytwittersource/*

export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"

Flume kullanarak Twitter'dan Veri Yükleme

) 3 Adım Komutu kullanarak kaynak kodunu derleyin-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Flume kullanarak Twitter'dan Veri Yükleme

) 4 AdımBir kavanoz oluştur

İlk önce, Manifest.txt İstediğiniz bir metin düzenleyiciyi kullanarak dosyayı açın ve içine aşağıdaki satırı ekleyin.

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

.. Burada flume.mytwittersource.MyTwitterSourceForFlume ana sınıfın adıdır. Lütfen bu satırın sonunda enter tuşuna basmanız gerektiğini unutmayın.

Flume kullanarak Twitter'dan Veri Yükleme

Şimdi JAR'ı oluşturunMyTwitterSourceForFlume.jar' olarak-

jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class

Flume kullanarak Twitter'dan Veri Yükleme

) 5 Adım Bu kavanozu şuraya kopyala: /lib/

sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/

Flume kullanarak Twitter'dan Veri Yükleme

) 6 Adım Flume'un konfigürasyon dizinine gidin, /conf

flume.conf mevcut değilse, flume-conf.properties.template'i kopyalayın ve flume.conf olarak yeniden adlandırın.

sudo cp flume-conf.properties.template flume.conf

Flume kullanarak Twitter'dan Veri Yükleme

If flume-env.sh mevcut değilse kopyalayın flume-env.sh.template ve onu şu şekilde yeniden adlandırın: flume-env.sh

sudo cp flume-env.sh.template flume-env.sh

Flume kullanarak Twitter'dan Veri Yükleme

Twitter Uygulaması Oluşturma

) 1 Adım Oturum açarak bir Twitter uygulaması oluşturun https://developer.twitter.com/

Twitter Uygulaması Oluşturma

Twitter Uygulaması Oluşturma

) 2 Adım MyCAD'de yazılım Güncelleme ye git 'Uygulamalarım' (Bu seçenek şu durumlarda düşer: 'Yumurta' sağ üst köşedeki butonuna tıklanır)

Twitter Uygulaması Oluşturma

) 3 Adım Tıklayarak yeni bir uygulama oluşturun 'Yeni Uygulama Oluştur'

) 4 Adım Uygulamanın adını, açıklamasını ve web sitesini belirterek uygulama ayrıntılarını doldurun. Her giriş kutusunun altında verilen notlara başvurabilirsiniz.

Twitter Uygulaması Oluşturma

) 5 Adım Sayfayı aşağı kaydırın ve işaretleyerek şartları kabul edin 'Evet katılıyorum' ve düğmeye tıklayın'Twitter uygulamanızı oluşturun'

Twitter Uygulaması Oluşturma

) 6 Adım Yeni oluşturulan bir uygulamanın penceresinde sekmeye gidin, 'API Anahtarları' sayfayı aşağı kaydırın ve düğmeye tıklayın 'Erişim jetonumu oluştur'

Twitter Uygulaması Oluşturma

Twitter Uygulaması Oluşturma

) 7 Adım Sayfayı yenile.

) 8 Adım Tıklayın 'OAuth'u Test Et'. Bu görüntülenecek 'OAuth' uygulamanın ayarları.

Twitter Uygulaması Oluşturma

) 9 Adım değiştirmek 'flume.conf' bunları kullanmak OAuth ayarları. Değiştirme adımları 'flume.conf' aşağıda verilmiştir.

Twitter Uygulaması Oluşturma

'flume.conf'u güncellemek için Tüketici anahtarı, Tüketici sırrı, Erişim belirteci ve Erişim belirteci sırrını kopyalamamız gerekiyor.

Not: Bu değerler kullanıcıya ait olduğundan gizli olduğundan paylaşılmamalıdır.

'flume.conf' Dosyasını Değiştirin

) 1 Adım Açılış 'flume.conf' yazma modunda ve aşağıdaki parametreler için değerleri ayarlayın-

sudo gedit flume.conf

Aşağıdaki içeriği kopyala-

MyTwitAgent.sources = Twitter
MyTwitAgent.channels = MemChannel
MyTwitAgent.sinks = HDFS
MyTwitAgent.sources.Twitter.type = flume.mytwittersource.MyTwitterSourceForFlume
MyTwitAgent.sources.Twitter.channels = MemChannel 
MyTwitAgent.sources.Twitter.consumerKey = <Copy consumer key value from Twitter App>
MyTwitAgent.sources.Twitter.consumerSecret = <Copy consumer secret value from Twitter App>
MyTwitAgent.sources.Twitter.accessToken = <Copy access token value from Twitter App>
MyTwitAgent.sources.Twitter.accessTokenSecret = <Copy access token secret value from Twitter App>
MyTwitAgent.sources.Twitter.keywords = guru99
MyTwitAgent.sinks.HDFS.channel = MemChannel
MyTwitAgent.sinks.HDFS.type = hdfs
MyTwitAgent.sinks.HDFS.hdfs.path = hdfs://localhost:54310/user/hduser/flume/tweets/
MyTwitAgent.sinks.HDFS.hdfs.fileType = DataStream
MyTwitAgent.sinks.HDFS.hdfs.writeFormat = Text
MyTwitAgent.sinks.HDFS.hdfs.batchSize = 1000
MyTwitAgent.sinks.HDFS.hdfs.rollSize = 0
MyTwitAgent.sinks.HDFS.hdfs.rollCount = 10000
MyTwitAgent.channels.MemChannel.type = memory
MyTwitAgent.channels.MemChannel.capacity = 10000
MyTwitAgent.channels.MemChannel.transactionCapacity = 1000

'Flume.conf' Dosyasını Değiştirin

) 2 Adım Ayrıca ayarla TwitterAgent.sinks.HDFS.hdfs.path aşağıda olduğu gibi,

TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweetler/

'Flume.conf' Dosyasını Değiştirin

Bilmek , ve , parametrenin değerine bakın 'fs.defaultFS' ayarlanmış $HADOOP_HOME/etc/hadoop/core-site.xml

'Flume.conf' Dosyasını Değiştirin

) 3 Adım Verileri HDFS'ye aktarmak için, eğer varsa aşağıdaki girişi silin,

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

Örnek: Flume kullanarak Twitter Verilerini Aktarma

) 1 Adım Açılış 'flume-env.sh' yazma modunda ve aşağıdaki parametreler için değerleri ayarlayın,

JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"

Flume kullanarak Twitter Verilerini Aktarma

) 2 Adım Hadoop'u başlat

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

) 3 Adım Flume tarball'ındaki JAR dosyalarından ikisi Hadoop 2.2.0 ile uyumlu değil. Dolayısıyla, Flume'u Hadoop 2.2.0 ile uyumlu hale getirmek için bu Apache Flume örneğinde aşağıdaki adımları izlememiz gerekecek.

a. Hareket protobuf-java-2.4.1.jar / ' /lib'.

MyCAD'de yazılım Güncelleme ye git ' /lib'

CD /lib

sudo mv protobuf-java-2.4.1.jar ~/

Flume kullanarak Twitter Verilerini Aktarma

b. Aşağıdaki gibi 'guava' JAR dosyasını bulun

find . -name "guava*"

Flume kullanarak Twitter Verilerini Aktarma

Hareket guava-10.0.1.jar / ' /lib'.

sudo mv guava-10.0.1.jar ~/

Flume kullanarak Twitter Verilerini Aktarma

c. İndiriniz guava-17.0.jar itibaren http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Flume kullanarak Twitter Verilerini Aktarma

Şimdi indirdiğiniz bu jar dosyasını şuraya kopyalayın: ' /lib'

) 4 Adım MyCAD'de yazılım Güncelleme ye git ' /çöp Kutusu' ve Flume'u şu şekilde başlatın:

./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf

Flume kullanarak Twitter Verilerini Aktarma

Flume'un Tweetleri getirdiği komut istemi penceresi-

Flume kullanarak Twitter Verilerini Aktarma

Komut penceresi mesajından çıktının yazıldığını görebiliriz. /user/hduser/flume/tweetler/ dizin.

Şimdi bu dizini bir web tarayıcısı kullanarak açın.

) 5 Adım Veri yüklemenin sonucunu görmek için açık bir tarayıcı kullanarak http://localhost:50070/ ve dosya sistemine göz atın, ardından verilerin yüklendiği dizine gidin;

/flume/tweetler/

Flume kullanarak Twitter Verilerini Aktarma