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.

- 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.
- 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.
- 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)
) 1 Adım 'FlumeTutorial' adında yeni bir dizin oluşturun
sudo mkdir FlumeTutorial
- Okuma, yazma ve yürütme izinleri verin
sudo chmod -R 777 FlumeTutorial
- 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.
) 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.
Sonraki Tıklama
) 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
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
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/*"
) 3 Adım Komutu kullanarak kaynak kodunu derleyin-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
) 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.
Şimdi JAR'ı oluşturunMyTwitterSourceForFlume.jar' olarak-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
) 5 Adım Bu kavanozu şuraya kopyala: /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
) 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
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
Twitter Uygulaması Oluşturma
) 1 Adım Oturum açarak bir Twitter uygulaması oluşturun https://developer.twitter.com/
) 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)
) 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.
) 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'
) 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'
) 7 Adım Sayfayı yenile.
) 8 Adım Tıklayın 'OAuth'u Test Et'. Bu görüntülenecek 'OAuth' uygulamanın ayarları.
) 9 Adım değiştirmek 'flume.conf' bunları kullanmak OAuth ayarları. Değiştirme adımları 'flume.conf' aşağıda verilmiştir.
'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
) 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/
Bilmek , ve , parametrenin değerine bakın 'fs.defaultFS' ayarlanmış $HADOOP_HOME/etc/hadoop/core-site.xml
) 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"
) 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 ~/
b. Aşağıdaki gibi 'guava' JAR dosyasını bulun
find . -name "guava*"
Hareket guava-10.0.1.jar / ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. İndiriniz guava-17.0.jar itibaren http://mvnrepository.com/artifact/com.google.guava/guava/17.0
Ş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'un Tweetleri getirdiği komut istemi penceresi-
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/