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.

  • 🔘 Ajanın anatomisi: Her Flume ajanı, bir kaynak, bir veya daha fazla kanal ve bir hedef içeren bir JVM işlemidir.
  • ☑️ Güvenilirlik: En iyi çaba gösteren teslimat, hiçbir düğüm arızasına tolerans göstermez; uçtan uca teslimat ise birden fazla düğüm arızasına dayanır.
  • Kurmak: Özel kaynak sınıfları, Flume lib dizinine bırakılan bir JAR dosyasına derlenir.
  • 🧪 yapılandırma: Bir özellik dosyası, kaynak, kanal ve hedef adlarını belirtir ve HDFS yolunu ve roll limitlerini ayarlar.
  • Başlatmak: İşlem hattını flume-ng agent komutuyla başlatın, agent'a bir isim verin ve flume.conf dosyasını işaret edin.
  • ⚠️ Tarihli örnek: Twitter v1.1 yayın akışı uç noktası Mart 2023'te kapatıldı, bu nedenle bu alıştırmayı özel kaynak kalıbı olarak değerlendirin.

Apache Flume eğitiminde ajan mimarisi, yapılandırma ve Hadoop akış örneği ele alınıyor.

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.

Flume mimarisi diyagramı, HDFS'ye veri sağlayan bir kaynak, kanal ve bir hedef içeren bir ajanı göstermektedir.

  1. 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.
  2. 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.
  3. 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).

Flume kurulumu başlamadan önce terminalde Linux kullanıcısı hduser'a geçiriliyor.

) 1 Adım 'FlumeTutorial' adında yeni bir klasör oluşturun.

sudo mkdir FlumeTutorial
  1. Okuma, yazma ve çalıştırma izinleri verin.
    sudo chmod -R 777 FlumeTutorial
  2. 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.

İndirilen dosyaların dosya izinlerini listeleyen terminal mesajı. Java kaynak dosyaları

) 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.

Apache Flume indirme sayfası, seçilebilecek ikili tarball bağlantısını gösteriyor.

Ardından, bir aynaya tıklayın.

Flume tarball bağlantısına tıkladıktan sonra Apache yansıtma sayfasına ulaşıldı.

) 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

Terminal extracFlume tar dosyasını sudo tar -xvf komutuyla açmak

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

Terminal, twitter4j çekirdek JAR dosyasındaki yürütme iznini iptal ediyor.

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/*"

Terminal, Flume kütüphanesi ve kaynak dizinlerini gösteren CLASSPATH'i dışa aktarıyor.

) 3 Adım Aşağıdaki komutu kullanarak kaynak kodu derleyin.

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Terminal, ikisini derliyor. Java javac ile kaynak dosyaları

) 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.

Manifest.txt dosyasını bir metin düzenleyicide açın ve "Main-Class" girdisini ekleyin.

Şimdi, 'MyTwitterSourceForFlume.jar' adlı JAR dosyasını aşağıdaki gibi oluşturun.

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

Derlenmiş sınıflar terminalde MyTwitterSourceForFlume.jar dosyasına paketleniyor.

) 5 Adım Bu JAR dosyasını kopyalayın /lib/.

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

Terminal, özel kaynak JAR dosyasını Flume lib dizinine kopyalıyor.

) 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

Terminal, flume-conf.properties.template dosyasını flume.conf olarak kopyalıyor.

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

Terminal, flume-env.sh.template dosyasını flume-env.sh olarak kopyalıyor.

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.

Uygulama listesine ulaşmak için Twitter geliştirici oturum açma sayfası kullanılıyor.

Oturum açtıktan sonra görüntülenen Twitter geliştirici hesabı ana sayfası.

) 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).

Twitter geliştirici portalının "Uygulamalarım" sayfası.

) 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.

İsim, açıklama ve web sitesi alanlarını içeren Twitter başvuru oluşturma formu.

) 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.

Şartlar onay kutusu ve Twitter formunun altındaki uygulama oluştur düğmesi

) 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.

Yeni Twitter uygulamasının API Anahtarları sekmesi, erişim belirteci oluşturulmadan önce.

"Erişim belirtecimi oluştur" düğmesi kullanıldıktan sonra erişim belirteci ayrıntıları görüntülenir.

) 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.

OAuth test ekranı, uygulamanın OAuth ayarlarını göstermektedir.

) 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.

OAuth ayarları, tüketici anahtarı, tüketici gizli anahtarı ve erişim belirteci değerlerini listeler.

'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

Flume.conf dosyasını bir düzenleyicide açın ve MyTwitAgent'ın kaynak, kanal ve hedef özelliklerini ekleyin.

) 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/

HDFS hedef dizinindeki hdfs.path özelliği, bir ana bilgisayar adı, bağlantı noktası numarası ve HDFS ana dizinini içerecek şekilde ayarlanır.

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.

core-site.xml dosyasındaki fs.defaultFS özelliği, ana bilgisayar adını ve bağlantı noktasını sağlar.

) 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"

JAVA_HOME ve FLUME_CLASSPATH ayarları yapılmış bir düzenleyicide flume-env.sh dosyasını açın.

) 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 ~/

Terminal, protobuf-java-2.4.1.jar dosyasını Flume lib dizininden dışarı taşıyor.

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

find . -name "guava*"

Terminalde "find" komutu ile paketlenmiş Guava JAR dosyasını bulma

Guava-10.0.1.jar dosyasını ' dizininden çıkarın. /lib'.

sudo mv guava-10.0.1.jar ~/

Terminal, guava-10.0.1.jar dosyasını Flume lib dizininden dışarı taşıyor.

c. guava-17.0.jar dosyasını indirin. Maven Deposu, aşağıda gösterilen.

Guava 17.0 için Maven deposu sayfası, indirilecek yedek JAR dosyası.

Ş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

Terminalde MyTwitAgent adlı Flume ajanını flume-ng komutuyla başlatıyorum.

Flume'un tweet'leri çektiği komut istemi penceresi şöyle görünüyor.

Komut isteminde Flume aracısının tweet'leri alıp HDFS'ye yazdığı gösteriliyor.

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ı.

HDFS tarayıcısı, yüklenen tweet dosyalarını içeren flume/tweets dizinini gösteriyor.

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.

SSS

Yazıldığı gibi değil. v1.1 akış durumları/filtre uç noktası 9 Mart 2023'te kullanımdan kaldırıldı ve API v2 yerine geçen sürüm ücretli bir katman gerektiriyor. Flume mekaniği hala özel kaynak kodlu bir uygulama olarak geçerliliğini koruyor.

Modeller, normal günlük hacmini ve mesaj şeklini temel alarak, sabit eşiklerin gözden kaçırdığı sapmaları işaretler. Ayrıca tekrarlanan yığınları da kümelendirirler. tracOlayları tek bir vakaya indirgeyerek olası neden taslağı hazırlayın ve önceliklendirme sürecini kısaltın.

Copilot, kaynak, kanal ve hedef bloklarını hızlı bir şekilde oluşturur, ancak özellik adlarını kendisi uydurur ve sürümleri karıştırır. Aracıyı başlatmadan önce, sürümünüz için Flume Kullanıcı Kılavuzu'ndaki her bir anahtarı kontrol edin.

Flume, günlükler gibi olay verilerini sürekli olarak HDFS'ye aktarır. Sqoop ise yapılandırılmış tabloları zamanlanmış gruplar halinde ilişkisel veritabanları ve Hadoop arasında taşır. Veri alımının farklı yönlerini kapsarlar ve birbirlerini iyi tamamlarlar.

Bellek kanalı en hızlısıdır ancak aracı ölürse tamponlanmış olayları kaybeder. Dosya kanalı diske yazar ve yeniden başlatmalardan etkilenmez, ancak daha düşük verimle çalışır. Yeniden gönderemeyeceğiniz her şey için kalıcılığı tercih edin.

Kafka, verileri saklaması ve birçok kullanıcıya hizmet vermesi nedeniyle şu anda genellikle varsayılan seçenek olarak kullanılıyor. Ekim 2022 tarihli Flume 1.11.0 ise HDFS'ye tek yönlü basit log toplama işlemleri için hala uygun.

Neredeyse her zaman bir JAR çakışması söz konusudur: Flume tarball'ı kendi Guava ve protobuf sürümlerini içerir ve bunlar Hadoop'un yüklediği sürümlerle çakışır. Eski paketlenmiş JAR dosyasını kaldırmak genellikle sorunu çözer.

Dosyanın ne zaman kapatılıp yenisinin açılacağına şu parametreler karar verir: rollSize bayt cinsinden, rollCount olay sayısına göre, rollInterval saniye cinsinden. Sıfır değeri, ilgili tetikleyiciyi devre dışı bırakır.

Bu yazıyı şu şekilde özetleyin: