Apache Flume Eğitimi: Nedir, Archidoku ve Hadoop Örneği
⚡ Akıllı Özet
Apache Flume, büyük hacimli günlük verilerini toplayıp, bir araya getirip HDFS'ye taşımak için kullanılan, kaynak, kanal ve hedef noktaları birbirine bağlayan aracılar etrafında oluşturulmuş dağıtılmış bir hizmettir.
Hadoop'ta Apache Flume nedir?
Apache Flume, 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ış verisi akışlarına dayalı basit ancak esnek bir mimariye sahiptir. Apache Flume, web sunucularındaki günlük dosyalarında bulunan günlük verilerini toplamak ve bunları bir araya getirmek için kullanılır. HDFS analiz için.
Hadoop'taki Flume, aşağıdakiler de dahil olmak üzere birden fazla kaynağı destekler:
- 'tail' (yerel bir dosyadan veri alıp Flume aracılığıyla HDFS'ye yazan, Unix'teki 'tail' komutuna benzer bir komut)
- Sistem günlükleri
- Apache log4j (bu da mümkün kılar) Java Flume aracılığıyla HDFS'deki dosyalara olay yazmak için uygulamalar).
Şu anki sürüm Flume 1.11.025 Ekim 2022 tarihinde yayınlanmıştır ve şu adresten ulaşılabilir: Apache Flume indirme sayfasıBu kılavuz 1.4.0 sürümüne göre yazılmıştır, bu nedenle aşağıdaki bazı adımlarda güncel sürümün farklı davranabileceğine dair bir not bulunmaktadır.
suyolu Archidoku
Flume ajanı bir JVM Flume kaynağı, Flume kanalı ve Flume havuzu olmak üzere üç bileşenden oluşan bir süreç; olaylar harici bir kaynaktan başlatıldıktan sonra bu bileşenler üzerinden yayılır. Aşağıdaki diyagram bunların nasıl bağlandığını göstermektedir.
- Harici kaynak (bir web sunucusu) tarafından oluşturulan olaylar Flume kaynağı tarafından tüketilir. Harici kaynak, hedef kaynağın tanıdığı bir biçimde Flume kaynağına olaylar gönderir.
- Flume kaynağı bir olay alır ve bunu bir veya daha fazla kanala kaydeder. Kanal, olay Flume alıcısı tarafından tüketilene kadar onu saklayan bir depo görevi görür. Bu kanal, bu olayları depolamak için yerel bir dosya sistemi kullanabilir.
- Flume sink, olayı bir kanaldan kaldırır ve HDFS gibi harici bir depoya kaydeder. Birden fazla Flume ajanı olabilir; bu durumda Flume sink, olayı akıştaki bir sonraki ajanın Flume kaynağına iletir.
Su kanalının bazı önemli özellikleri
- Flume, akış verilerine dayalı esnek bir tasarıma sahiptir. Çoklu arıza toleransı ve kurtarma mekanizmalarıyla hataya dayanıklı ve sağlamdır. Flume, farklı güvenilirlik seviyeleri sunar, bunlar arasında şunlar yer alır: 'en iyi çabayla teslimat' hem de 'uçtan uca teslimat'. En iyi çabayla teslimat Flume düğümlerinde herhangi bir arızaya tolerans göstermezken, uçtan uca teslimat Birden fazla düğüm arızası durumunda bile teslimatı garanti eder.
- Flume, kaynaklar ve hedefler arasında veri taşır. Bu veri toplama işlemi planlı veya olay odaklı olabilir. Flume'un kendi sorgu işleme motoru vardır; bu da her yeni veri grubunun hedeflenen hedefe taşınmadan önce kolayca dönüştürülmesini sağlar.
- Mümkün Kanalizasyon lavaboları HDFS'yi dahil edin ve HBazFlume ayrıca ağ trafiği verileri, sosyal medya siteleri tarafından oluşturulan veriler ve e-posta mesajları gibi olay verilerini de aktarabilir.
Flume, kütüphane ve kaynak kodu kurulumu
Asıl işleme başlamadan önce, Hadoop'un kurulu olduğundan emin olun; kurulu değilse, aşağıdaki adımları izleyin. Hadoop nasıl kurulur? Öncelikle, kullanıcıyı 'hduser' olarak değiştirin (bu, Hadoop yapılandırması sırasında kullanılan kimliktir; kendi Hadoop yapılandırmanız sırasında kullandığınız kullanıcı kimliğine geçebilirsiniz).
) 1 Adım 'FlumeTutorial' adında yeni bir klasör oluşturun.
sudo mkdir FlumeTutorial
- Okuma, yazma ve çalıştırma izinleri verin.
sudo chmod -R 777 FlumeTutorial
- Dosyaları kopyala MyTwitterSource.java hem de MyTwitterSourceForFlume.java Bu dizine.
Giriş Dosyalarını Buradan İndirin
Aşağıdaki gibi tüm dosyaların dosya izinlerini kontrol edin ve eksikse 'okuma' izni verin.
) 2 Adım 'Apache Flume'u şuradan indirin: https://flume.apache.org/download.html.
Bu Flume eğitiminde Apache Flume 1.4.0 kullanılmıştır.
Ardından, bir aynaya tıklayın.
) 3 Adım İndirdiğiniz tarball dosyasını istediğiniz dizine kopyalayın ve çalıştırın.tracAşağıdaki komutu kullanarak içeriği değiştirebilirsiniz.
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Bu, apache-flume-1.4.0-bin adında yeni bir dizin oluşturur ve ex komutunu çalıştırır.tracDosyaları içine kaydeder. Bu dizine şu ad verilir: Makalenin geri kalanında.
) 4 Adım Flume kütüphane kurulumu. twitter4j-core-4.0.1.jar, flume-ng-configuration-1.4.0.jar, flume-ng-core-1.4.0.jar ve flume-ng-sdk-1.4.0.jar dosyalarını kopyalayın.
/lib/
Kopyalanan JAR dosyalarının birinde veya tamamında yürütme izni ayarlanmış olabilir; bu da kod derlemesinde sorunlara neden olabilir, bu nedenle bu izni iptal edin. Benim durumumda, twitter4j-core-4.0.1.jar dosyasında yürütme izni vardı. Aşağıdaki gibi bu izni iptal ettim.
sudo chmod -x twitter4j-core-4.0.1.jar
Bundan sonra, aşağıdaki komut twitter4j-core-4.0.1.jar dosyasına herkese 'okuma' izni verir.
sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar
Lütfen twitter4j-core-4.0.1.jar dosyasını şuradan indirdiğimi dikkate alın: Maven Deposuve tüm Flume JAR dosyaları, yani flume-ng-*-1.4.0.jar, org.apache.flume yapıtları.
Flume kullanarak Twitter'dan veri yükleme
) 1 Adım Kaynak kod dosyalarının bulunduğu dizine gidin.
) 2 Adım CLASSPATH'i içerecek şekilde ayarlayın. /lib/* ve ~/FlumeTutorial/flume/mytwittersource/*.
export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"
) 3 Adım Aşağıdaki komutu kullanarak kaynak kodu derleyin.
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
) 4 Adım Bir JAR dosyası oluşturun. Öncelikle, dilediğiniz bir metin düzenleyici kullanarak Manifest.txt dosyasını oluşturun ve aşağıdaki satırı içine ekleyin.
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
Burada flume.mytwittersource.MyTwitterSourceForFlume ana sınıfın adıdır. Lütfen aşağıdaki gibi bu satırın sonunda Enter tuşuna basmanız gerektiğini unutmayın.
Şimdi, 'MyTwitterSourceForFlume.jar' adlı JAR dosyasını aşağıdaki gibi oluşturun.
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
) 5 Adım Bu JAR dosyasını kopyalayın /lib/.
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
) 6 Adım Flume'un yapılandırma dizinine gidin, /conf.
Eğer flume.conf dosyası yoksa, flume-conf.properties.template dosyasını kopyalayın ve adını flume.conf olarak değiştirin.
sudo cp flume-conf.properties.template flume.conf
Eğer flume-env.sh dosyası yoksa, flume-env.sh.template dosyasını kopyalayın ve adını flume-env.sh olarak değiştirin.
sudo cp flume-env.sh.template flume-env.sh
Twitter Uygulaması Oluşturma
Önce bunu okuyun. v1.1 akışı statuses/filter Twitter4j 4.0.1'in ihtiyaç duyduğu uç nokta 9 Mart 2023'te kullanımdan kaldırıldı ve onun yerini alan API v2 filtrelenmiş akış artık şu anda mevcut. geliştirici.x.comÜcretli bir katmanın arkasında yer almaktadır. Aşağıdaki ekran görüntülerini özel kaynak kalıbı olarak ele alın, ardından aynı aracıyı bir dosyaya, yürütülebilir dosyaya veya Kafka kaynağına yönlendirin.
) 1 Adım Geliştirici portalına giriş yaparak bir Twitter uygulaması oluşturun.
) 2 Adım 'Uygulamalarım' bölümüne gidin (bu seçenek, sağ üst köşedeki 'Yumurta' düğmesine tıklandığında açılır).
) 3 Adım 'Yeni Uygulama Oluştur' seçeneğine tıklayarak yeni bir uygulama oluşturun.
) 4 Adım Başvuru bilgilerini, başvurunun adını, açıklamasını ve web sitesini belirterek doldurun. Her giriş kutusunun altında verilen notlara başvurabilirsiniz.
) 5 Adım Sayfayı aşağı kaydırın, 'Evet, kabul ediyorum' kutusunu işaretleyerek şartları onaylayın ve 'Twitter uygulamanızı oluşturun' düğmesine tıklayın.
) 6 Adım Yeni oluşturulan uygulamanın penceresinde, 'API Anahtarları' sekmesine gidin, sayfayı aşağı kaydırın ve 'Erişim belirtecimi oluştur' düğmesine tıklayın.
) 7 Adım Sayfayı yenile.
) 8 Adım 'OAuth'ı Test Et' seçeneğine tıklayın. Bu, uygulamanın 'OAuth' ayarlarını görüntüler.
) 9 Adım 'flume.conf' dosyasını bu OAuth ayarlarını kullanarak değiştirin. 'flume.conf' dosyasını değiştirme adımları aşağıda verilmiştir.
'flume.conf' dosyasını güncellemek için tüketici anahtarını, tüketici gizli anahtarını, erişim belirtecini ve erişim belirteci gizli anahtarını kopyalamamız gerekiyor.
Not: Bu değerler kullanıcıya aittir ve bu nedenle gizlidir, bu yüzden paylaşılmamalıdır.
'flume.conf' Dosyasını Değiştirin
) 1 Adım 'flume.conf' dosyasını yazma modunda açın ve aşağıdaki parametreler için değerleri ayarlayın.
sudo gedit flume.conf
Aşağıdaki içeriği kopyalayın.
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, TwitterAgent.sinks.HDFS.hdfs.path ayarını aşağıdaki gibi yapın.
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweetler/
Bulmak için , Ve Aşağıda gösterilen $HADOOP_HOME/etc/hadoop/core-site.xml dosyasında bulunan 'fs.defaultFS' parametresinin değerine bakın.
) 3 Adım Verilerin HDFS'ye geldiği anda aktarılmasını sağlamak için, aşağıdaki girdi varsa silin.
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
Örnek: Flume kullanarak Twitter Verilerini Aktarma
) 1 Adım 'flume-env.sh' dosyasını yazma modunda açın ve aşağıdaki parametreler için değerler belirleyin.
JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"
) 2 Adım Hadoop'u başlatın.
$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, bu nedenle bu Apache Flume örneğinde Flume'u Hadoop 2.2.0 ile uyumlu hale getirmek için aşağıdaki adımları izliyoruz. Bu JAR değişimi 1.4.0 dönemine ait bir düzeltmedir; Flume 1.11.0 zaten güncel protobuf ve Guava sürümlerini içeriyor, bu nedenle modern bir tarball'ın normalde bunlara ihtiyacı yoktur.
a. protobuf-java-2.4.1.jar dosyasını ' dizininden çıkarın. '/lib' dizinine gidin. Önce o dizine gidin.
CD /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Aşağıdaki gibi 'guava' adlı JAR dosyasını bulun.
find . -name "guava*"
Guava-10.0.1.jar dosyasını ' dizininden çıkarın. /lib'.
sudo mv guava-10.0.1.jar ~/
c. guava-17.0.jar dosyasını indirin. Maven Deposu, aşağıda gösterilen.
Şimdi, indirdiğiniz bu JAR dosyasını ' /lib'.
) 4 Adım ' adresine gidin '/bin' dosyasını açın ve Flume'u aşağıdaki gibi başlatın.
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Flume'un tweet'leri çektiği komut istemi penceresi şöyle görünüyor.
Komut penceresindeki mesajdan çıktının /user/hduser/flume/tweets/ dizinine yazıldığını görebiliriz. Şimdi, bu dizini bir web tarayıcısı kullanarak açın.
) 5 Adım Veri yükleme işleminin sonucunu görmek için, tarayıcınızda http://localhost:50070/ adresini açın, dosya sistemine göz atın ve ardından verilerin yüklendiği dizine gidin.
/flume/tweetler/
Hadoop 2'de NameNode web arayüzü 50070 numaralı portta bulunuyordu; Hadoop 3'te aynı sayfa 9870 numaralı porta taşındı.
Flume, yutmanın bir yarısıdır: kepçe Flume, tabloları toplu halde içe aktarır, olayları akış halinde işler, ardından Domuz or kovan Dosyaları şekillendirin ve Oozie Zincirin programlarını düzenler. Ayrıca bakınız. büyük veri analitiği araçları, MapReduce birleştirmeleri ve sayaçları hem de Talend.


































