Apache Flume - Hızlı Kılavuz

Flume nedir?

Apache Flume, çeşitli kaynaklardan merkezi bir veri deposuna günlük dosyaları, olaylar (vb.) Gibi büyük miktarda akış verisini toplamak ve taşımak için bir araç / hizmet / veri alma mekanizmasıdır.

Flume, son derece güvenilir, dağıtılmış ve yapılandırılabilir bir araçtır. Temel olarak akış verilerini (günlük verileri) çeşitli web sunucularından HDFS'ye kopyalamak için tasarlanmıştır.

Flume Uygulamaları

Bir e-ticaret web uygulamasının belirli bir bölgedeki müşteri davranışını analiz etmek istediğini varsayın. Bunu yapmak için, mevcut günlük verilerini analiz için Hadoop'a taşımaları gerekir. Burada, Apache Flume kurtarmaya geliyor.

Flume, uygulama sunucuları tarafından oluşturulan günlük verilerini daha yüksek bir hızda HDFS'ye taşımak için kullanılır.

Flume'un Avantajları

İşte Flume kullanmanın avantajları -

  • Apache Flume kullanarak, verileri herhangi bir merkezi mağazada (HBase, HDFS) saklayabiliriz.

  • Gelen verilerin hızı, verilerin hedefe yazılabilme hızını aştığında, Flume, veri üreticileri ile merkezi depolar arasında aracı görevi görür ve aralarında sabit bir veri akışı sağlar.

  • Flume özelliği sağlar contextual routing.

  • Flume'deki işlemler, her mesaj için iki işlemin (bir gönderici ve bir alıcı) sürdürüldüğü kanal tabanlıdır. Güvenilir mesaj teslimini garanti eder.

  • Flume güvenilir, hataya dayanıklı, ölçeklenebilir, yönetilebilir ve özelleştirilebilirdir.

Flume'un Özellikleri

Flume'un dikkate değer özelliklerinden bazıları şu şekildedir:

  • Flume, günlük verilerini birden çok web sunucusundan merkezi bir depoya (HDFS, HBase) verimli bir şekilde alır.

  • Flume kullanarak, verileri birden çok sunucudan anında Hadoop'a alabiliriz.

  • Günlük dosyalarının yanı sıra Flume, Facebook ve Twitter gibi sosyal ağ siteleri ve Amazon ve Flipkart gibi e-ticaret web siteleri tarafından üretilen büyük hacimli olay verilerini içe aktarmak için de kullanılır.

  • Flume, çok sayıda kaynak ve hedef türünü destekler.

  • Flume, çoklu sekme akışlarını, fan giriş çıkış akışlarını, bağlamsal yönlendirmeyi vb. Destekler.

  • Kanal yatay olarak ölçeklenebilir.

Big Data,bildiğimiz gibi, geleneksel hesaplama teknikleri kullanılarak işlenemeyen büyük veri kümelerinin bir koleksiyonudur. Büyük Veri analiz edildiğinde değerli sonuçlar verir.Hadoop basit programlama modelleri kullanarak bilgisayar kümeleri arasında dağıtılmış bir ortamda Büyük Verileri depolamaya ve işlemeye olanak tanıyan açık kaynaklı bir çerçevedir.

Akış / Günlük Verileri

Genel olarak, analiz edilecek verilerin çoğu, uygulama sunucuları, sosyal ağ siteleri, bulut sunucuları ve kurumsal sunucular gibi çeşitli veri kaynakları tarafından üretilecektir. Bu veriler şu şekilde olacaktırlog files ve events.

Log file - Genel olarak, bir günlük dosyası bir filebir işletim sisteminde meydana gelen olayları / eylemleri listeleyen. Örneğin, web sunucuları, sunucuya yapılan her isteği günlük dosyalarında listeler.

Bu tür günlük verilerini toplarken aşağıdakiler hakkında bilgi alabiliriz:

  • uygulama performansını ve çeşitli yazılım ve donanım arızalarını tespit edin.
  • kullanıcı davranışı ve daha iyi iş içgörüleri elde etme.

Verileri HDFS sistemine aktarmanın geleneksel yöntemi, putkomut. Nasıl kullanılacağını görelimput komut.

HDFS komutu koydu

Günlük verilerini işlemedeki ana zorluk, birden çok sunucu tarafından üretilen bu günlükleri Hadoop ortamına taşımaktır.

Hadoop File System ShellHadoop'a veri eklemek ve ondan okumak için komutlar sağlar. Şunu kullanarak Hadoop'a veri ekleyebilirsiniz.put komutu aşağıda gösterildiği gibi.

$ Hadoop fs –put /path of the required file  /path in HDFS where to save the file

Put Komutu ile ilgili sorun

Kullanabiliriz putHadoop'un bu kaynaklardan HDFS'ye veri aktarma komutu. Ancak, aşağıdaki dezavantajlardan muzdariptir -

  • Kullanma put komut aktarabiliriz only one file at a timeveri üreticileri ise çok daha yüksek hızda veri üretir. Eski veriler üzerinde yapılan analizler daha az doğru olduğu için, verileri gerçek zamanlı olarak aktarmak için bir çözüme ihtiyacımız var.

  • Eğer kullanırsak putkomutu, verilerin paketlenmesi ve yükleme için hazır olması gerekir. Web sunucuları sürekli veri ürettikleri için bu çok zor bir iştir.

Burada ihtiyacımız olan şey, aşağıdaki olumsuzlukların üstesinden gelebilecek bir çözümdür. put "veri akışı" komutunu veri üreticilerinden merkezi depolara (özellikle HDFS) daha az gecikmeyle aktarın.

HDFS ile ilgili sorun

HDFS'de dosya bir dizin girişi olarak bulunur ve dosyanın uzunluğu kapanana kadar sıfır olarak kabul edilir. Örneğin, bir kaynak HDFS'ye veri yazıyorsa ve işlemin ortasında ağ kesintiye uğradıysa (dosya kapatılmadan), dosyaya yazılan veriler kaybolacaktır.

Bu nedenle, günlük verilerini HDFS'ye aktarmak için güvenilir, yapılandırılabilir ve bakımı yapılabilir bir sisteme ihtiyacımız var.

Note- POSIX dosya sisteminde, bir dosyaya eriştiğimizde (örneğin yazma işlemini gerçekleştirirken), diğer programlar bu dosyayı (en azından dosyanın kaydedilen kısmını) hala okuyabilir. Bunun nedeni, dosyanın kapatılmadan önce diskte bulunmasıdır.

Mevcut Çözümler

Çeşitli kaynaklardan HDFS'ye akış verilerini (günlük dosyaları, olaylar vb.) Göndermek için, aşağıdaki araçlara sahibiz -

Facebook'un Katibi

Scribe, günlük verilerini toplamak ve yayınlamak için kullanılan son derece popüler bir araçtır. Çok fazla sayıda düğüme ölçeklenecek ve ağ ve düğüm hatalarına karşı dayanıklı olacak şekilde tasarlanmıştır.

Apache Kafka

Kafka, Apache Software Foundation tarafından geliştirilmiştir. Açık kaynaklı bir mesaj komisyoncusudur. Kafka'yı kullanarak, yüksek verimli ve düşük gecikmeli yayınların üstesinden gelebiliriz.

Apache Flume

Apache Flume, çeşitli web sunucularından günlük verileri, olaylar (vb.) Gibi büyük miktarlarda akış verisini toplamak ve merkezi bir veri deposuna taşımak için bir araç / hizmet / veri alma mekanizmasıdır.

Temelde akış verilerini çeşitli kaynaklardan HDFS'ye aktarmak için tasarlanmış, oldukça güvenilir, dağıtılmış ve yapılandırılabilir bir araçtır.

Bu eğitimde, Flume'un nasıl kullanılacağını bazı örneklerle ayrıntılı olarak tartışacağız.

Aşağıdaki çizim, Flume'un temel mimarisini tasvir etmektedir. Resimde gösterildiği gibi,data generators (Facebook, Twitter gibi) bireysel Flume tarafından toplanan verileri üretir agentsonlara koşuyor. Bundan sonra birdata collector (aynı zamanda bir aracıdır), toplanan ve HDFS veya HBase gibi merkezi bir depoya gönderilen aracılardan verileri toplar.

Flume Etkinliği

Bir event içinde taşınan verinin temel birimidir Flume. Kaynaktan hedefe isteğe bağlı başlıklar eşliğinde taşınacak bir bayt dizisi yükü içerir. Tipik bir Flume etkinliği aşağıdaki yapıya sahip olacaktır:

Flume Ajan

Bir agentFlume'de bağımsız bir arka plan programı sürecidir (JVM). Verileri (olayları) istemcilerden veya diğer aracılardan alır ve bir sonraki hedefine (havuz veya aracı) iletir. Flume'un birden fazla ajanı olabilir. Aşağıdaki şema birFlume Agent

Diyagramda gösterildiği gibi bir Flume Agent üç ana bileşen içerir: source, channel, ve sink.

Kaynak

Bir source Veri üreticilerinden veri alan ve bunları Flume olayları biçiminde bir veya daha fazla kanala aktaran bir Aracı bileşenidir.

Apache Flume birkaç tür kaynağı destekler ve her kaynak belirli bir veri üreticisinden olayları alır.

Example - Avro kaynağı, Thrift kaynağı, twitter% 1 kaynağı vb.

Kanal

Bir channelolayları kaynaktan alan ve havuzlar tarafından tüketilinceye kadar tamponlayan geçici bir depodur. Kaynaklar ve lavabolar arasında bir köprü görevi görür.

Bu kanallar tamamen işlemseldir ve herhangi bir sayıda kaynak ve havuz ile çalışabilirler.

Example - JDBC kanalı, Dosya sistemi kanalı, Bellek kanalı vb.

Lavabo

Bir sinkverileri HBase ve HDFS gibi merkezi mağazalarda depolar. Kanallardan gelen verileri (olayları) tüketir ve hedefe iletir. Lavabonun varış yeri başka bir acente veya merkezi mağazalar olabilir.

Example - HDFS havuzu

Note- Bir kanal aracısının birden fazla kaynağı, havuzu ve kanalı olabilir. Desteklenen tüm kaynakları, havuzları, kanalları bu eğiticinin Flume yapılandırma bölümünde listeledik.

Flume Agent'ın Ek Bileşenleri

Yukarıda tartıştığımız şey, ajanın ilkel bileşenleridir. Buna ek olarak, olayların veri üreticisinden merkezi depolara aktarılmasında hayati rol oynayan birkaç bileşene daha sahibiz.

Önleyiciler

Durdurucular, kaynak ve kanal arasında aktarılan kanal olaylarını değiştirmek / incelemek için kullanılır.

Kanal Seçiciler

Bunlar, birden fazla kanal olması durumunda hangi kanalın veri aktarımının seçileceğini belirlemek için kullanılır. İki tür kanal seçici vardır -

  • Default channel selectors - Bunlar, her bir kanaldaki tüm olayları kopyaladıkları çoğaltma kanal seçicileri olarak da bilinir.

  • Multiplexing channel selectors - Bunlar, kanalın o olayın başlığındaki adrese göre bir olay göndermesine karar verir.

Lavabo İşlemcileri

Bunlar, seçilen havuz grubundan belirli bir lavaboyu çağırmak için kullanılır. Bunlar havuzlarınız için yük devretme yolları oluşturmak veya bir kanaldaki birden fazla havuzda dengeleme olaylarını yüklemek için kullanılır.

Flume, günlük verilerini HDFS'ye taşımak için kullanılan bir çerçevedir. Genellikle olaylar ve günlük verileri günlük sunucuları tarafından oluşturulur ve bu sunucularda çalışan Flume aracıları bulunur. Bu aracılar, verileri veri üreticilerinden alır.

Bu aracılardaki veriler, şu adla bilinen bir ara düğüm tarafından toplanacaktır: Collector. Tıpkı ajanlar gibi, Flume'da birden fazla koleksiyoncu olabilir.

Son olarak, tüm bu toplayıcılardan gelen veriler toplanacak ve HBase veya HDFS gibi merkezi bir mağazaya aktarılacaktır. Aşağıdaki şema, Flume'daki veri akışını açıklamaktadır.

Çok sekmeli Akış

Flume içinde birden fazla temsilci olabilir ve nihai varış noktasına ulaşmadan önce, bir etkinlik birden fazla temsilci aracılığıyla seyahat edebilir. Bu olarak bilinirmulti-hop flow.

Fan-out Akışı

Bir kaynaktan birden çok kanala veri akışı şu şekilde bilinir: fan-out flow. İki çeşittir -

  • Replicating - Verilerin tüm yapılandırılmış kanallarda kopyalanacağı veri akışı.

  • Multiplexing - Olayın başlığında belirtilen, verilerin seçilen bir kanala gönderileceği veri akışı.

Fan Giriş Akışı

Verilerin birçok kaynaktan tek bir kanala aktarılacağı veri akışı, fan-in flow.

Arıza İdaresi

Flume'da her olay için iki işlem gerçekleşir: biri gönderen, diğeri alıcıda. Gönderen, olayları alıcıya gönderir. Verileri aldıktan hemen sonra, alıcı kendi işlemini gerçekleştirir ve gönderene bir "alınan" sinyal gönderir. Sinyali aldıktan sonra, gönderen işlemi gerçekleştirir. (Gönderen, alıcıdan bir sinyal alana kadar işlemini gerçekleştirmeyecektir.)

Önceki bölümde Flume'un mimarisini zaten tartışmıştık. Bu bölümde, Apache Flume'un nasıl indirilip kurulacağına bakalım.

Devam etmeden önce, sisteminizde bir Java ortamına sahip olmanız gerekir. Öncelikle sisteminizde Java'nın kurulu olduğundan emin olun. Bu eğitimdeki bazı örnekler için Hadoop HDFS'yi (havuz olarak) kullandık. Bu nedenle, Java ile birlikte Hadoop'u yüklemenizi tavsiye ederiz. Daha fazla bilgi toplamak için bağlantıyı takip edin -http://www.tutorialspoint.com/hadoop/hadoop_enviornment_setup.htm

Flume Kurulumu

Öncelikle Apache Flume yazılımının en son sürümünü web sitesinden indirin. https://flume.apache.org/.

Aşama 1

Web sitesini açın. Tıkladownloadana sayfanın sol tarafındaki bağlantı. Sizi Apache Flume'un indirme sayfasına götürecektir.

Adım 2

İndirme sayfasında, Apache Flume'un ikili ve kaynak dosyalarının bağlantılarını görebilirsiniz. Apache-flume-1.6.0-bin.tar.gz bağlantısına tıklayın

Bu aynalardan herhangi birine tıklayarak indirmeye başlayabileceğiniz bir ayna listesine yönlendirileceksiniz. Aynı şekilde apache-flume-1.6.0-src.tar.gz dosyasına tıklayarak Apache Flume'un kaynak kodunu indirebilirsiniz .

Aşama 3

Kurulum dizinlerinin bulunduğu dizinde Flume adıyla bir dizin oluşturun. Hadoop, HBaseve diğer yazılımlar (zaten herhangi birini yüklediyseniz) aşağıda gösterildiği gibi yüklendi.

$ mkdir Flume

4. adım

İndirilen tar dosyalarını aşağıda gösterildiği gibi çıkarın.

$ cd Downloads/ 
$ tar zxvf apache-flume-1.6.0-bin.tar.gz  
$ tar zxvf apache-flume-1.6.0-src.tar.gz

Adım 5

Apache'nin içeriğini taşı-flume-1.6.0-bin.tar dosyaya Flumeaşağıda gösterildiği gibi daha önce oluşturulmuş dizin. (Flume dizinini Hadoop adlı yerel kullanıcıda oluşturduğumuzu varsayalım.)

$ mv apache-flume-1.6.0-bin.tar/* /home/Hadoop/Flume/

Flume'u Yapılandırma

Flume'u yapılandırmak için üç dosyayı değiştirmeliyiz: flume-env.sh, flumeconf.properties, ve bash.rc.

Yolu / Sınıfyolunu Ayarlama

İçinde .bashrc dosyasında, ana klasörü, yolu ve Flume için sınıf yolunu aşağıda gösterildiği gibi ayarlayın.

conf Klasörü

Açarsan conf Apache Flume klasöründe aşağıdaki dört dosyaya sahip olacaksınız -

  • flume-conf.properties.template,
  • flume-env.sh.template,
  • flume-env.ps1.template ve
  • log4j.properties.

Şimdi yeniden adlandır

  • flume-conf.properties.template olarak dosyala flume-conf.properties ve

  • flume-env.sh.template gibi flume-env.sh

flume-env.sh

Açık flume-env.sh dosyasını ayarlayın ve JAVA_Home Java'nın sisteminizde kurulu olduğu klasöre.

Kurulumu Doğrulama

Apache Flume kurulumunu şuraya göz atarak doğrulayın: bin klasör ve aşağıdaki komutu yazarak.

$ ./flume-ng

Flume'u başarıyla yüklediyseniz, aşağıda gösterildiği gibi bir Flume yardım istemi alacaksınız.

Flume'u kurduktan sonra, bir Java özellik dosyası olan yapılandırma dosyasını kullanarak yapılandırmamız gerekir. key-value pairs. Dosyadaki anahtarlara değerler aktarmamız gerekiyor.

Flume yapılandırma dosyasında, ihtiyacımız olan -

  • Mevcut aracının bileşenlerini adlandırın.
  • Kaynağı tanımlayın / yapılandırın.
  • Lavaboyu tanımlayın / yapılandırın.
  • Kanalı açıklayın / yapılandırın.
  • Kaynağı ve havuzu kanala bağlayın.

Genellikle Flume'de birden fazla ajanımız olabilir. Her bir temsilciyi benzersiz bir ad kullanarak ayırt edebiliriz. Ve bu adı kullanarak, her ajanı yapılandırmamız gerekiyor.

Bileşenleri Adlandırma

Her şeyden önce, aşağıda gösterildiği gibi, kaynaklar, alıcılar ve aracının kanalları gibi bileşenleri adlandırmanız / listelemeniz gerekir.

agent_name.sources = source_name 
agent_name.sinks = sink_name 
agent_name.channels = channel_name

Flume, çeşitli kaynakları, havuzları ve kanalları destekler. Aşağıda verilen tabloda listelenmiştir.

Kaynaklar Kanallar Lavabolar
  • Avro Kaynağı
  • Tasarruf Kaynağı
  • Yürütme Kaynağı
  • JMS Kaynağı
  • Biriktirme Dizini Kaynağı
  • Twitter% 1 firehose Kaynak
  • Kafka Kaynağı
  • NetCat Kaynağı
  • Sıra Üreteci Kaynağı
  • Sistem Günlüğü Kaynakları
  • Syslog TCP Kaynağı
  • Multiport Syslog TCP Kaynağı
  • Syslog UDP Kaynağı
  • HTTP Kaynağı
  • Stres Kaynağı
  • Eski Kaynaklar
  • Thrift Eski Kaynak
  • Özel Kaynak
  • Yazı Kaynağı
  • Bellek Kanalı
  • JDBC Kanalı
  • Kafka Kanalı
  • Dosya Kanalı
  • Dökülebilir Bellek Kanalı
  • Sözde İşlem Kanalı
  • HDFS Lavabo
  • Kovan Lavabo
  • Logger Lavabo
  • Avro Lavabo
  • Tasarruflu Lavabo
  • IRC Lavabo
  • File Roll Lavabo
  • Boş Lavabo
  • HBaseSink
  • AsyncHBaseSink
  • MorphlineSolrSink
  • ElasticSearchSink
  • Uçurtma Veri Seti Evyesi
  • Kafka Lavabo

Bunlardan herhangi birini kullanabilirsiniz. Örneğin, Twitter verilerini Twitter kaynağı kullanarak bir bellek kanalı üzerinden bir HDFS havuzuna aktarıyorsanız ve temsilci adı kimliğiTwitterAgent, sonra

TwitterAgent.sources = Twitter 
TwitterAgent.channels = MemChannel 
TwitterAgent.sinks = HDFS

Aracının bileşenlerini listeledikten sonra, kaynak (lar) ı, havuz (lar) ı ve kanal (lar) ı, özelliklerine değerler sağlayarak tanımlamanız gerekir.

Kaynağı Tanımlama

Her kaynağın ayrı bir özellik listesi olacaktır. "Tür" adlı özellik her kaynak için ortaktır ve kullandığımız kaynağın türünü belirtmek için kullanılır.

"Tür" özelliğinin yanı sıra, tüm required aşağıda gösterildiği gibi yapılandırmak için belirli bir kaynağın özellikleri.

agent_name.sources. source_name.type = value 
agent_name.sources. source_name.property2 = value 
agent_name.sources. source_name.property3 = value

Örneğin, twitter sourceYapılandırmak için değerler sağlamamız gereken özellikler aşağıdadır .

TwitterAgent.sources.Twitter.type = Twitter (type name) 
TwitterAgent.sources.Twitter.consumerKey =  
TwitterAgent.sources.Twitter.consumerSecret = 
TwitterAgent.sources.Twitter.accessToken =   
TwitterAgent.sources.Twitter.accessTokenSecret =

Lavaboyu Tanımlamak

Aynı kaynak gibi, her havuzda ayrı bir özellik listesi olacaktır. "Tür" adlı özellik her havuzda ortaktır ve kullandığımız havuzun türünü belirtmek için kullanılır. "Tür" özelliğinin yanı sıra, tümrequired aşağıda gösterildiği gibi yapılandırmak için belirli bir havuzun özellikleri.

agent_name.sinks. sink_name.type = value 
agent_name.sinks. sink_name.property2 = value 
agent_name.sinks. sink_name.property3 = value

Örneğin, düşünürsek HDFS sinkYapılandırmak için değerler sağlamamız gereken özellikler aşağıdadır .

TwitterAgent.sinks.HDFS.type = hdfs (type name)  
TwitterAgent.sinks.HDFS.hdfs.path = HDFS directory’s Path to store the data

Kanalı Tanımlamak

Flume, kaynaklar ve havuzlar arasında veri aktarımı için çeşitli kanallar sağlar. Bu nedenle kaynaklar ve kanallar ile birlikte aracıda kullanılan kanalın açıklanması gerekmektedir.

Her bir kanalı açıklamak için, aşağıda gösterildiği gibi gerekli özellikleri ayarlamanız gerekir.

agent_name.channels.channel_name.type = value 
agent_name.channels.channel_name. property2 = value 
agent_name.channels.channel_name. property3 = value

Örneğin, düşünürsek memory channelYapılandırmak için değerler sağlamamız gereken özellikler aşağıdadır .

TwitterAgent.channels.MemChannel.type = memory (type name)

Kaynağı ve Sink'i Kanala Bağlamak

Kanallar kaynakları ve alıcıları bağladığından, aşağıda gösterildiği gibi her ikisinin de kanala bağlanması gerekir.

agent_name.sources.source_name.channels = channel_name 
agent_name.sinks.sink_name.channels = channel_name

Aşağıdaki örnek, kaynakların ve havuzların bir kanala nasıl bağlanacağını gösterir. Burada düşünüyoruztwitter source, memory channel, ve HDFS sink.

TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sinks.HDFS.channels = MemChannel

Flume Aracısının Başlatılması

Yapılandırmadan sonra, Flume ajanını başlatmalıyız. Aşağıdaki gibi yapılır -

$ bin/flume-ng agent --conf ./conf/ -f conf/twitter.conf 
Dflume.root.logger=DEBUG,console -n TwitterAgent

nerede -

  • agent - Flume ajanını başlatma komutu

  • --conf ,-c<conf> - conf dizinindeki yapılandırma dosyasını kullanın

  • -f<file> - Eksikse, bir yapılandırma dosyası yolu belirtir

  • --name, -n <name> - Twitter temsilcisinin adı

  • -D property =value - Bir Java sistem özelliği değeri ayarlar.

Flume'u kullanarak çeşitli hizmetlerden veri alabilir ve bunları merkezi mağazalara (HDFS ve HBase) taşıyabiliriz. Bu bölüm, Twitter hizmetinden verilerin nasıl alınacağını ve Apache Flume kullanılarak HDFS'de nasıl saklanacağını açıklar.

Flume Architecture'da tartışıldığı gibi, bir web sunucusu günlük verilerini üretir ve bu veriler Flume'daki bir aracı tarafından toplanır. Kanal, bu verileri bir havuzda arabelleğe alır ve bu da sonunda onları merkezi mağazalara iter.

Bu bölümde verilen örnekte, Apache Flume tarafından sağlanan deneysel twitter kaynağını kullanarak bir uygulama oluşturacak ve ondan tweetleri alacağız. Bu tweet'leri tamponlamak için bellek kanalını ve bu tweet'leri HDFS'ye göndermek için HDFS havuzunu kullanacağız.

Twitter verilerini almak için aşağıda verilen adımları izlememiz gerekecek -

  • Twitter Uygulaması Oluşturun
  • HDFS'yi Kur / Başlat
  • Flume'u Yapılandır

Twitter Uygulaması Oluşturma

Twitter'dan tweetleri alabilmek için bir Twitter uygulaması oluşturulması gerekiyor. Bir Twitter uygulaması oluşturmak için aşağıdaki adımları izleyin.

Aşama 1

Bir Twitter uygulaması oluşturmak için aşağıdaki bağlantıya tıklayın https://apps.twitter.com/. Twitter hesabınızda oturum açın. Twitter Uygulamaları oluşturabileceğiniz, silebileceğiniz ve yönetebileceğiniz bir Twitter Uygulama Yönetimi penceresine sahip olacaksınız.

Adım 2

Tıkla Create New Appbuton. Uygulamayı oluşturmak için bilgilerinizi doldurmanız gereken bir başvuru formu alacağınız bir pencereye yönlendirileceksiniz. Web sitesi adresini doldururken, örneğin tam URL modelini verin,http://example.com.

Aşama 3

Ayrıntıları doldurun, kabul edin Developer Agreement bittiğinde, tıklayın Create your Twitter application buttonbu sayfanın alt kısmındadır. Her şey yolunda giderse, aşağıda gösterildiği gibi verilen ayrıntılarla bir Uygulama oluşturulacaktır.

4. adım

Altında keys and Access Tokens sekmesinde, sayfanın altındaki bir düğme görebilirsiniz. Create my access token. Erişim belirtecini oluşturmak için üzerine tıklayın.

Adım 5

Son olarak, Test OAuthsayfanın sağ üst tarafında bulunan buton. Bu, sizi görüntüleyen bir sayfaya götürür.Consumer key, Consumer secret, Access token, ve Access token secret. Bu ayrıntıları kopyalayın. Bunlar, ajanı Flume'da yapılandırmak için kullanışlıdır.

HDFS'yi başlatma

Verileri HDFS'de sakladığımız için, Hadoop'u kurmamız / doğrulamamız gerekiyor. Hadoop'u başlatın ve Flume verilerini depolamak için içinde bir klasör oluşturun. Flume'u yapılandırmadan önce aşağıda verilen adımları izleyin.

1. Adım: Hadoop'u Kurun / Doğrulayın

Hadoop'u yükleyin . Hadoop sisteminize zaten kuruluysa, aşağıda gösterildiği gibi Hadoop sürüm komutunu kullanarak kurulumu doğrulayın.

$ hadoop version

Sisteminiz Hadoop içeriyorsa ve yol değişkenini ayarladıysanız, aşağıdaki çıktıyı alırsınız -

Hadoop 2.6.0 
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 
e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1 
Compiled by jenkins on 2014-11-13T21:10Z 
Compiled with protoc 2.5.0 
From source with checksum 18e43357c8f927c0695f1e9522859d6a 
This command was run using /home/Hadoop/hadoop/share/hadoop/common/hadoop-common-2.6.0.jar

2. Adım: Hadoop'u Başlatma

Göz atın sbin Hadoop dizini ve start ipliği ve Hadoop dfs (dağıtılmış dosya sistemi) aşağıda gösterildiği gibi.

cd /$Hadoop_Home/sbin/ 
$ start-dfs.sh 
localhost: starting namenode, logging to
   /home/Hadoop/hadoop/logs/hadoop-Hadoop-namenode-localhost.localdomain.out 
localhost: starting datanode, logging to 
   /home/Hadoop/hadoop/logs/hadoop-Hadoop-datanode-localhost.localdomain.out 
Starting secondary namenodes [0.0.0.0] 
starting secondarynamenode, logging to 
   /home/Hadoop/hadoop/logs/hadoop-Hadoop-secondarynamenode-localhost.localdomain.out
  
$ start-yarn.sh 
starting yarn daemons 
starting resourcemanager, logging to 
   /home/Hadoop/hadoop/logs/yarn-Hadoop-resourcemanager-localhost.localdomain.out 
localhost: starting nodemanager, logging to 
   /home/Hadoop/hadoop/logs/yarn-Hadoop-nodemanager-localhost.localdomain.out

3. Adım: HDFS'de Dizin Oluşturun

Hadoop DFS'de şu komutu kullanarak dizinler oluşturabilirsiniz. mkdir. İçinde gezinin ve adıyla bir dizin oluşturuntwitter_data aşağıda gösterildiği gibi gerekli yolda.

$cd /$Hadoop_Home/bin/ 
$ hdfs dfs -mkdir hdfs://localhost:9000/user/Hadoop/twitter_data

Flume'u Yapılandırma

Kaynak, kanal ve havuzu, içindeki yapılandırma dosyasını kullanarak yapılandırmamız gerekir. confKlasör. Bu bölümde verilen örnek, Apache Flume tarafından sağlanan deneysel bir kaynağı kullanır.Twitter 1% Firehose Bellek kanalı ve HDFS havuzu.

Twitter% 1 Firehose Kaynağı

Bu kaynak oldukça deneyseldir. Akış API'sini kullanarak% 1'lik örnek Twitter Firehose'a bağlanır ve sürekli olarak tweet'ler indirir, bunları Avro formatına dönüştürür ve Avro olaylarını aşağı akışlı bir Flume havuzuna gönderir.

Bu kaynağı Flume kurulumuyla birlikte varsayılan olarak alacağız. jar bu kaynağa karşılık gelen dosyalar şurada bulunabilir: lib klasörü aşağıda gösterildiği gibi.

Sınıf yolunu ayarlama

Yı kur classpath değişken lib Flume klasörü Flume-env.sh dosya aşağıda gösterildiği gibi.

export CLASSPATH=$CLASSPATH:/FLUME_HOME/lib/*

Bu kaynağın aşağıdaki gibi ayrıntılara ihtiyacı var Consumer key, Consumer secret, Access token, ve Access token secretBir Twitter uygulamasının. Bu kaynağı yapılandırırken, aşağıdaki özelliklere değer sağlamanız gerekir -

  • Channels

  • Source type : org.apache.flume.source.twitter.TwitterSource

  • consumerKey - OAuth tüketici anahtarı

  • consumerSecret - OAuth tüketici sırrı

  • accessToken - OAuth erişim belirteci

  • accessTokenSecret - OAuth jetonunun sırrı

  • maxBatchSize- Bir twitter grubunda olması gereken maksimum twitter mesajı sayısı. Varsayılan değer 1000'dir (isteğe bağlı).

  • maxBatchDurationMillis- Bir grubu kapatmadan önce beklenecek maksimum milisaniye sayısı. Varsayılan değer 1000'dir (isteğe bağlı).

Kanal

Hafıza kanalını kullanıyoruz. Bellek kanalını yapılandırmak için , kanalın türüne değer sağlamanız gerekir .

  • type- Kanalın türünü tutar. Örneğimizde türMemChannel.

  • Capacity- Kanalda saklanan maksimum olay sayısıdır. Varsayılan değeri 100'dür (isteğe bağlı).

  • TransactionCapacity- Kanalın kabul ettiği veya gönderdiği maksimum olay sayısıdır. Varsayılan değeri 100'dür (isteğe bağlı).

HDFS Lavabo

Bu havuz, verileri HDFS'ye yazar. Bu havuzu yapılandırmak için aşağıdaki ayrıntıları sağlamanız gerekir .

  • Channel

  • type - hdfs

  • hdfs.path - HDFS'deki verilerin depolanacağı dizinin yolu.

Ve senaryoya bağlı olarak bazı isteğe bağlı değerler sağlayabiliriz. Aşağıda, uygulamamızda yapılandırdığımız HDFS havuzunun isteğe bağlı özellikleri verilmiştir.

  • fileType - Bu, HDFS dosyamız için gerekli dosya formatıdır. SequenceFile, DataStream ve CompressedStreambu akışta kullanılabilen üç tür vardır. Örneğimizde, kullanıyoruzDataStream.

  • writeFormat - Yazılı veya yazılabilir olabilir.

  • batchSize- Bir dosyaya HDFS'ye yüklenmeden önce yazılan olayların sayısıdır. Varsayılan değeri 100'dür.

  • rollsize- Bir ruloyu tetikleyen dosya boyutudur. Varsayılan değer 100'dür.

  • rollCount- Dosyaya aktarılmadan önce yazılan olayların sayısıdır. Varsayılan değeri 10'dur.

Örnek - Yapılandırma Dosyası

Aşağıda, yapılandırma dosyası için bir örnek verilmiştir. Bu içeriği kopyalayın ve farklı kaydedintwitter.conf Flume'un conf klasöründe.

# Naming the components on the current agent. 
TwitterAgent.sources = Twitter 
TwitterAgent.channels = MemChannel 
TwitterAgent.sinks = HDFS
  
# Describing/Configuring the source 
TwitterAgent.sources.Twitter.type = org.apache.flume.source.twitter.TwitterSource
TwitterAgent.sources.Twitter.consumerKey = Your OAuth consumer key
TwitterAgent.sources.Twitter.consumerSecret = Your OAuth consumer secret 
TwitterAgent.sources.Twitter.accessToken = Your OAuth consumer key access token 
TwitterAgent.sources.Twitter.accessTokenSecret = Your OAuth consumer key access token secret 
TwitterAgent.sources.Twitter.keywords = tutorials point,java, bigdata, mapreduce, mahout, hbase, nosql
  
# Describing/Configuring the sink 

TwitterAgent.sinks.HDFS.type = hdfs 
TwitterAgent.sinks.HDFS.hdfs.path = hdfs://localhost:9000/user/Hadoop/twitter_data/
TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream 
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text 
TwitterAgent.sinks.HDFS.hdfs.batchSize = 1000
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0 
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000 
 
# Describing/Configuring the channel 
TwitterAgent.channels.MemChannel.type = memory 
TwitterAgent.channels.MemChannel.capacity = 10000 
TwitterAgent.channels.MemChannel.transactionCapacity = 100
  
# Binding the source and sink to the channel 
TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sinks.HDFS.channel = MemChannel

Yürütme

Flume ana dizinine göz atın ve aşağıda gösterildiği gibi uygulamayı çalıştırın.

$ cd $FLUME_HOME 
$ bin/flume-ng agent --conf ./conf/ -f conf/twitter.conf 
Dflume.root.logger=DEBUG,console -n TwitterAgent

Her şey yolunda giderse, tweetlerin HDFS'ye akışı başlayacaktır. Aşağıda, tweetleri getirirken komut istemi penceresinin anlık görüntüsü verilmiştir.

HDFS'yi doğrulama

Hadoop Yönetimi Web Kullanıcı Arayüzüne aşağıda verilen URL'yi kullanarak erişebilirsiniz.

http://localhost:50070/

Adlı açılır menüye tıklayın Utilitiessayfanın sağ tarafında. Aşağıda verilen anlık görüntüde gösterildiği gibi iki seçenek görebilirsiniz.

Tıklamak Browse the file systemve tweet'leri sakladığınız HDFS dizininin yolunu girin. Örneğimizde yol olacak/user/Hadoop/twitter_data/. Ardından, aşağıda verildiği gibi HDFS'de depolanan twitter günlük dosyalarının listesini görebilirsiniz.

Önceki bölümde, twitter kaynağından HDFS'ye nasıl veri getirileceğini gördük. Bu bölümde verilerin nasıl alınacağı açıklanmaktadır.Sequence generator.

Önkoşullar

Bu bölümde verilen örneği çalıştırmak için, kurmanız gerekir. HDFS ile birlikte Flume. Bu nedenle, devam etmeden önce Hadoop kurulumunu doğrulayın ve HDFS'yi başlatın. (HDFS'nin nasıl başlatılacağını öğrenmek için önceki bölüme bakın).

Flume'u Yapılandırma

Kaynak, kanal ve havuzu, içindeki yapılandırma dosyasını kullanarak yapılandırmamız gerekir. confKlasör. Bu bölümde verilen örnek birsequence generator source, bir memory channel, ve bir HDFS sink.

Sıra Üreteci Kaynağı

Olayları sürekli üreten kaynaktır. 0'dan başlayıp 1 artan bir sayaç bulundurur. Test amaçlı kullanılır. Bu kaynağı yapılandırırken, aşağıdaki özelliklere değer sağlamanız gerekir -

  • Channels

  • Source type - seq

Kanal

Biz kullanıyoruz memorykanal. Hafıza kanalını yapılandırmak için, gereken kanal türüne bir değer sağlar. Aşağıda, bellek kanalını yapılandırırken sağlamanız gereken özelliklerin listesi verilmiştir -

  • type- Kanalın türünü tutar. Örneğimizde tür MemChannel'dir.

  • Capacity- Kanalda saklanan maksimum olay sayısıdır. Varsayılan değeri 100'dür. (İsteğe bağlı)

  • TransactionCapacity- Kanalın kabul ettiği veya gönderdiği maksimum olay sayısıdır. Varsayılan değeri 100'dür. (İsteğe bağlı).

HDFS Lavabo

Bu havuz, verileri HDFS'ye yazar. Bu havuzu yapılandırmak için aşağıdaki ayrıntıları sağlamanız gerekir .

  • Channel

  • type - hdfs

  • hdfs.path - HDFS'deki verilerin depolanacağı dizinin yolu.

Ve senaryoya bağlı olarak bazı isteğe bağlı değerler sağlayabiliriz. Aşağıda, uygulamamızda yapılandırdığımız HDFS havuzunun isteğe bağlı özellikleri verilmiştir.

  • fileType - Bu, HDFS dosyamız için gerekli dosya formatıdır. SequenceFile, DataStream ve CompressedStreambu akışta kullanılabilen üç tür vardır. Örneğimizde, kullanıyoruzDataStream.

  • writeFormat - Yazılı veya yazılabilir olabilir.

  • batchSize- Bir dosyaya HDFS'ye yüklenmeden önce yazılan olayların sayısıdır. Varsayılan değeri 100'dür.

  • rollsize- Bir ruloyu tetikleyen dosya boyutudur. Varsayılan değer 100'dür.

  • rollCount- Dosyaya aktarılmadan önce yazılan olayların sayısıdır. Varsayılan değeri 10'dur.

Örnek - Yapılandırma Dosyası

Aşağıda, yapılandırma dosyası için bir örnek verilmiştir. Bu içeriği kopyalayın ve farklı kaydedinseq_gen .conf Flume'un conf klasöründe.

# Naming the components on the current agent 

SeqGenAgent.sources = SeqSource   
SeqGenAgent.channels = MemChannel 
SeqGenAgent.sinks = HDFS 
 
# Describing/Configuring the source 
SeqGenAgent.sources.SeqSource.type = seq
  
# Describing/Configuring the sink
SeqGenAgent.sinks.HDFS.type = hdfs 
SeqGenAgent.sinks.HDFS.hdfs.path = hdfs://localhost:9000/user/Hadoop/seqgen_data/
SeqGenAgent.sinks.HDFS.hdfs.filePrefix = log 
SeqGenAgent.sinks.HDFS.hdfs.rollInterval = 0
SeqGenAgent.sinks.HDFS.hdfs.rollCount = 10000
SeqGenAgent.sinks.HDFS.hdfs.fileType = DataStream 
 
# Describing/Configuring the channel 
SeqGenAgent.channels.MemChannel.type = memory 
SeqGenAgent.channels.MemChannel.capacity = 1000 
SeqGenAgent.channels.MemChannel.transactionCapacity = 100 
 
# Binding the source and sink to the channel 
SeqGenAgent.sources.SeqSource.channels = MemChannel
SeqGenAgent.sinks.HDFS.channel = MemChannel

Yürütme

Flume ana dizinine göz atın ve aşağıda gösterildiği gibi uygulamayı çalıştırın.

$ cd $FLUME_HOME 
$./bin/flume-ng agent --conf $FLUME_CONF --conf-file $FLUME_CONF/seq_gen.conf 
   --name SeqGenAgent

Her şey yolunda giderse, kaynak, HDFS'ye günlük dosyaları biçiminde gönderilecek sıra numaraları oluşturmaya başlar.

Aşağıda, sıra oluşturucu tarafından oluşturulan verileri HDFS'ye getiren komut istemi penceresinin bir anlık görüntüsü verilmiştir.

HDFS'yi doğrulama

Hadoop Yönetimi Web Kullanıcı Arayüzüne aşağıdaki URL'yi kullanarak erişebilirsiniz -

http://localhost:50070/

Adlı açılır menüye tıklayın Utilitiessayfanın sağ tarafında. Aşağıdaki şemada gösterildiği gibi iki seçeneği görebilirsiniz.

Tıklamak Browse the file system ve sıra oluşturucu tarafından oluşturulan verileri sakladığınız HDFS dizininin yolunu girin.

Örneğimizde yol olacak /user/Hadoop/ seqgen_data /. Ardından, aşağıda verildiği gibi HDFS'de depolanan, sıra oluşturucu tarafından oluşturulan günlük dosyalarının listesini görebilirsiniz.

Dosyanın İçeriğini Doğrulama

Tüm bu günlük dosyaları, sıralı biçimde sayılar içerir. Dosya sistemindeki bu dosyaların içeriğini şurayı kullanarak doğrulayabilirsiniz:cat komutu aşağıda gösterildiği gibi.

Bu bölüm, olayları nasıl oluşturabileceğinizi ve daha sonra bunları konsola nasıl kaydedebileceğinizi açıklamak için bir örnek alır. Bunun için kullanıyoruzNetCat kaynak ve logger lavabo.

Önkoşullar

Bu bölümde verilen örneği çalıştırmak için, kurmanız gerekir. Flume.

Flume'u Yapılandırma

Kaynak, kanal ve havuzu, içindeki yapılandırma dosyasını kullanarak yapılandırmamız gerekir. confKlasör. Bu bölümde verilen örnek birNetCat Source, Memory channelve bir logger sink.

NetCat Kaynağı

NetCat kaynağını yapılandırırken, kaynağı yapılandırırken bir port belirlememiz gerekiyor. Şimdi kaynak (NetCat kaynağı) verilen portu dinliyor ve o porta girdiğimiz her satırı ayrı bir olay olarak alıyor ve belirtilen kanal üzerinden havuza aktarıyor.

Bu kaynağı yapılandırırken, aşağıdaki özelliklere değer sağlamanız gerekir -

  • channels

  • Source type - netcat

  • bind - Bağlanacak ana bilgisayar adı veya IP adresi.

  • port - Kaynağın dinlemesini istediğimiz bağlantı noktası numarası.

Kanal

Biz kullanıyoruz memorykanal. Hafıza kanalını yapılandırmak için, gereken kanal türüne bir değer sağlar. Aşağıda, bellek kanalını yapılandırırken sağlamanız gereken özelliklerin listesi verilmiştir -

  • type- Kanalın türünü tutar. Örneğimizde türMemChannel.

  • Capacity- Kanalda saklanan maksimum olay sayısıdır. Varsayılan değeri 100'dür. (İsteğe bağlı)

  • TransactionCapacity- Kanalın kabul ettiği veya gönderdiği maksimum olay sayısıdır. Varsayılan değeri 100'dür. (İsteğe bağlı).

Logger Lavabo

Bu havuz, kendisine iletilen tüm olayları günlüğe kaydeder. Genellikle test veya hata ayıklama amacıyla kullanılır. Bu havuzu yapılandırmak için aşağıdaki ayrıntıları sağlamanız gerekir.

  • Channel

  • type - kaydedici

Örnek Yapılandırma Dosyası

Aşağıda, yapılandırma dosyası için bir örnek verilmiştir. Bu içeriği kopyalayın ve farklı kaydedinnetcat.conf Flume'un conf klasöründe.

# Naming the components on the current agent
NetcatAgent.sources = Netcat   
NetcatAgent.channels = MemChannel 
NetcatAgent.sinks = LoggerSink  

# Describing/Configuring the source 
NetcatAgent.sources.Netcat.type = netcat 
NetcatAgent.sources.Netcat.bind = localhost
NetcatAgent.sources.Netcat.port = 56565  

# Describing/Configuring the sink 
NetcatAgent.sinks.LoggerSink.type = logger  

# Describing/Configuring the channel 
NetcatAgent.channels.MemChannel.type = memory 
NetcatAgent.channels.MemChannel.capacity = 1000 
NetcatAgent.channels.MemChannel.transactionCapacity = 100 
 
# Bind the source and sink to the channel 
NetcatAgent.sources.Netcat.channels = MemChannel
NetcatAgent.sinks. LoggerSink.channel = MemChannel

Yürütme

Flume ana dizinine göz atın ve aşağıda gösterildiği gibi uygulamayı çalıştırın.

$ cd $FLUME_HOME
$ ./bin/flume-ng agent --conf $FLUME_CONF --conf-file $FLUME_CONF/netcat.conf 
   --name NetcatAgent -Dflume.root.logger=INFO,console

Her şey yolunda giderse, kaynak verilen bağlantı noktasını dinlemeye başlar. Bu durumda,56565. Aşağıda, 56565 numaralı bağlantı noktasını dinleyen ve başlatan bir NetCat kaynağının komut istemi penceresinin anlık görüntüsü verilmiştir.

Verileri Kaynağa Aktarma

Verileri NetCat kaynağına iletmek için, yapılandırma dosyasında verilen bağlantı noktasını açmanız gerekir. Ayrı bir terminal açın ve kaynağa (56565) bağlayın.curlkomut. Bağlantı başarılı olduğunda bir mesaj alacaksınız "connected" Aşağıda gösterildiği gibi.

$ curl telnet://localhost:56565 
connected

Artık verilerinizi satır satır girebilirsiniz (her satırdan sonra Enter tuşuna basmanız gerekir). NetCat kaynağı her satırı ayrı bir olay olarak alır ve alınan bir mesaj alırsınız "OK”.

Verileri geçirmeyi bitirdiğinizde, konsoldan (Ctrl+C). Aşağıda verilen, kaynağa bağladığımız konsolun anlık görüntüsüdür.curl komut.

Yukarıdaki konsola girilen her satır, kaynak tarafından ayrı bir olay olarak alınacaktır. Kullandığımızdan beriLogger sink, bu olaylar belirtilen kanal (bu durumda bellek kanalı) aracılığıyla konsolda (kaynak konsol) oturum açacaktır.

Aşağıdaki anlık görüntü, olayların günlüğe kaydedildiği NetCat konsolunu gösterir.