अपाचे फ्लूम ट्यूटोरियल: क्या है, Archiटेक्चर और हाडोप उदाहरण

हाडोप में अपाचे फ्लूम क्या है?

अपाचे फ्लूम लॉग डेटा की भारी मात्रा को एकत्रित करने, एकत्र करने और स्थानांतरित करने के लिए एक विश्वसनीय और वितरित प्रणाली है। इसमें स्ट्रीमिंग डेटा प्रवाह पर आधारित एक सरल लेकिन लचीला आर्किटेक्चर है। अपाचे फ्लूम का उपयोग वेब सर्वर से लॉग फ़ाइलों में मौजूद लॉग डेटा को इकट्ठा करने और विश्लेषण के लिए इसे HDFS में एकत्र करने के लिए किया जाता है।

हाडोप में फ्लूम कई स्रोतों का समर्थन करता है जैसे -

  • 'टेल' (जो स्थानीय फ़ाइल से डेटा को पाइप करता है और फ्लूम के माध्यम से HDFS में लिखता है, यूनिक्स कमांड 'टेल' के समान)
  • सिस्टम लॉग
  • अपाचे log4j (सक्षम Java (फ्लूम के माध्यम से एचडीएफएस में फाइलों में ईवेंट लिखने के लिए अनुप्रयोग)।

नालिका Archiटेक्चर

A फ्लूम एजेंट एक JVM प्रक्रिया जिसके 3 घटक हैं –फ़्लूम स्रोत, फ़्लूम चैनल और फ़्लूम सिंक- जिसके माध्यम से घटनाएँ बाहरी स्रोत पर शुरू होने के बाद प्रसारित होती हैं।

नालिका Archiटेक्चर
नालिका Archiटेक्चर
  1. ऊपर दिए गए आरेख में, बाहरी स्रोत (वेबसर्वर) द्वारा उत्पन्न घटनाओं का उपयोग फ़्लूम डेटा स्रोत द्वारा किया जाता है। बाहरी स्रोत फ़्लूम स्रोत को ऐसे प्रारूप में घटनाएँ भेजता है जिसे लक्ष्य स्रोत द्वारा पहचाना जाता है।
  2. फ़्लूम स्रोत एक ईवेंट प्राप्त करता है और उसे एक या अधिक चैनलों में संग्रहीत करता है। चैनल एक स्टोर के रूप में कार्य करता है जो ईवेंट को तब तक रखता है जब तक कि इसे फ़्लूम सिंक द्वारा उपयोग नहीं किया जाता है। यह चैनल इन ईवेंट को संग्रहीत करने के लिए स्थानीय फ़ाइल सिस्टम का उपयोग कर सकता है।
  3. फ़्लूम सिंक किसी चैनल से इवेंट को हटाता है और उसे बाहरी रिपॉजिटरी जैसे कि HDFS में संग्रहीत करता है। कई फ़्लूम एजेंट हो सकते हैं, जिस स्थिति में फ़्लूम सिंक इवेंट को फ़्लो में अगले फ़्लूम एजेंट के फ़्लूम स्रोत पर अग्रेषित करता है।

फ्लूम की कुछ महत्वपूर्ण विशेषताएं

  • फ़्लूम में स्ट्रीमिंग डेटा फ़्लो पर आधारित एक लचीला डिज़ाइन है। यह दोष सहिष्णु है और कई फ़ेलओवर और रिकवरी तंत्रों के साथ मज़बूत है। फ़्लूम बिग डेटा में विश्वसनीयता के विभिन्न स्तर हैं जिनमें शामिल हैं 'सर्वोत्तम प्रयास वितरण' और एक 'शुरू से अंत तक डिलीवरी'. सर्वोत्तम प्रयास वितरण किसी भी फ़्लुम नोड विफलता को बर्दाश्त नहीं करता है जबकि 'शुरू से अंत तक डिलीवरी' मोड कई नोड विफलताओं की स्थिति में भी डिलीवरी की गारंटी देता है।
  • फ़्लूम स्रोतों और सिंक के बीच डेटा ले जाता है। डेटा का यह संग्रह या तो शेड्यूल किया जा सकता है या इवेंट-संचालित हो सकता है। फ़्लूम का अपना क्वेरी प्रोसेसिंग इंजन है जो डेटा के प्रत्येक नए बैच को इच्छित सिंक में ले जाने से पहले उसे बदलना आसान बनाता है।
  • संभव फ्लूम सिंक शामिल एचडीएफएस और एचबेसफ्लूम हाडोप का उपयोग इवेंट डेटा के परिवहन के लिए भी किया जा सकता है, जिसमें नेटवर्क ट्रैफ़िक डेटा, सोशल मीडिया वेबसाइटों और ईमेल संदेशों द्वारा उत्पन्न डेटा शामिल है, लेकिन इन्हीं तक सीमित नहीं है।

फ़्लूम, लाइब्रेरी और स्रोत कोड सेटअप

वास्तविक प्रक्रिया शुरू करने से पहले, सुनिश्चित करें कि आपके पास Hadoop इंस्टॉल है। यूजर को 'hduser' में बदलें (Hadoop कॉन्फ़िगरेशन के दौरान इस्तेमाल की गई आईडी, आप अपने Hadoop कॉन्फ़िगरेशन के दौरान इस्तेमाल की गई यूजरआईडी पर स्विच कर सकते हैं)

फ़्लूम, लाइब्रेरी और स्रोत कोड सेटअप

चरण 1) 'FlumeTutorial' नाम से एक नई निर्देशिका बनाएँ

sudo mkdir FlumeTutorial
  1. पढ़ने, लिखने और निष्पादित करने की अनुमति दें
    sudo chmod -R 777 FlumeTutorial
  2. फ़ाइलों की प्रतिलिपि बनाएँ MyTwitterSource.java और MyTwitterSourceForFlume.java इस निर्देशिका में.

इनपुट फ़ाइलें यहाँ से डाउनलोड करें

इन सभी फ़ाइलों की फ़ाइल अनुमतियों की जाँच करें और यदि 'पढ़ने' की अनुमति नहीं है तो उसे प्रदान करें-

फ़्लूम, लाइब्रेरी और स्रोत कोड सेटअप

चरण 2) 'अपाचे फ्लूम' को इस साइट से डाउनलोड करें- https://flume.apache.org/download.html

इस फ्लूम ट्यूटोरियल में अपाचे फ्लूम 1.4.0 का उपयोग किया गया है।

फ़्लूम, लाइब्रेरी और स्रोत कोड सेटअप

अगला क्लिक करें

फ़्लूम, लाइब्रेरी और स्रोत कोड सेटअप

चरण 3) डाउनलोड किए गए टारबॉल को अपनी पसंद की डायरेक्टरी में कॉपी करें और निम्नलिखित कमांड का उपयोग करके सामग्री निकालें

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

फ़्लूम, लाइब्रेरी और स्रोत कोड सेटअप

यह कमांड नाम से एक नई डायरेक्टरी बनाएगा अपाचे-फ्लूम-1.4.0-बिन और इसमें फ़ाइलें निकालें। इस निर्देशिका को इस रूप में संदर्भित किया जाएगा बाकी लेख में.

चरण 4) फ़्लूम लाइब्रेरी सेटअप

प्रतिलिपि ट्विटर4जे-कोर-4.0.1.jar, फ्लूम-एनजी-कॉन्फ़िगरेशन-1.4.0.jar, फ्लूम-एनजी-कोर-1.4.0.jar, फ्लूम-एनजी-एसडीके-1.4.0.jar सेवा मेरे

/लिब/

यह संभव है कि कॉपी किए गए JAR में से किसी एक या सभी को निष्पादन अनुमति की आवश्यकता होगी। इससे कोड के संकलन में समस्या हो सकती है। इसलिए, ऐसे JAR पर निष्पादन अनुमति रद्द करें।

मेरे मामले में, twitter4j-core-4.0.1.jar था अनुमति को निष्पादित करना होगा। मैंने इसे नीचे दिए अनुसार निरस्त कर दिया-

sudo chmod -x twitter4j-core-4.0.1.jar

फ़्लूम, लाइब्रेरी और स्रोत कोड सेटअप

इसके बाद यह कमांड 'पढ़ने' की अनुमति देता है twitter4j-कोर-4.0.1.jar सभी को।

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

कृपया ध्यान दें कि मैंने डाउनलोड किया है-

– ट्विटर4j-कोर-4.0.1.jar से https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core

- सभी ज्वाला जार यानि, फ्लूम-एनजी-*-1.4.0.jar से http://mvnrepository.com/artifact/org.apache.flume

फ़्लूम का उपयोग करके ट्विटर से डेटा लोड करें

चरण 1) उस निर्देशिका पर जाएँ जिसमें स्रोत कोड फ़ाइलें हैं।

चरण 2) सेट क्लासपाथ समाहित करना /लिब/* और ~/फ्लूमट्यूटोरियल/फ्लूम/माईट्विटरसोर्स/*

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

फ़्लूम का उपयोग करके ट्विटर से डेटा लोड करें

चरण 3) कमांड का उपयोग करके स्रोत कोड संकलित करें-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

फ़्लूम का उपयोग करके ट्विटर से डेटा लोड करें

चरण 4)एक जार बनाएं

सबसे पहले, बनाएँ मैनिफ़ेस्ट.txt अपनी पसंद के टेक्स्ट एडिटर का उपयोग करके फ़ाइल बनाएं और उसमें नीचे दी गई पंक्ति जोड़ें-

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

.. यहाँ flume.mytwittersource.MyTwitterSourceForFlume मुख्य क्लास का नाम है। कृपया ध्यान दें कि आपको इस लाइन के अंत में एंटर कुंजी दबानी होगी।

फ़्लूम का उपयोग करके ट्विटर से डेटा लोड करें

अब, JAR बनाएं'MyTwitterSourceForFlume.jar' जैसा-

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

फ़्लूम का उपयोग करके ट्विटर से डेटा लोड करें

चरण 5) इस जार को कॉपी करें /लिब/

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

फ़्लूम का उपयोग करके ट्विटर से डेटा लोड करें

चरण 6) फ़्लुम की कॉन्फ़िगरेशन निर्देशिका पर जाएँ, /कॉन्फ़

यदि flume.conf मौजूद नहीं है, तो flume-conf.properties.template की प्रतिलिपि बनाएँ और उसका नाम बदलकर flume.conf कर दें

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

फ़्लूम का उपयोग करके ट्विटर से डेटा लोड करें

If फ़्लूम-env.sh मौजूद नहीं है, तो कॉपी करें फ़्लूम-env.sh.टेम्पलेट और इसका नाम बदल दिया फ़्लूम-env.sh

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

फ़्लूम का उपयोग करके ट्विटर से डेटा लोड करें

ट्विटर एप्लीकेशन बनाना

चरण 1) साइन इन करके ट्विटर एप्लिकेशन बनाएं https://developer.twitter.com/

ट्विटर एप्लीकेशन बनाना

ट्विटर एप्लीकेशन बनाना

चरण 2) 'मेरे आवेदन' (यह विकल्प तब नीचे आ जाता है जब 'अंडा' ऊपरी दाएं कोने पर स्थित बटन पर क्लिक किया जाता है)

ट्विटर एप्लीकेशन बनाना

चरण 3) क्लिक करके एक नया एप्लिकेशन बनाएं 'नया ऐप बनाएं'

चरण 4) आवेदन का नाम, विवरण और वेबसाइट निर्दिष्ट करके आवेदन विवरण भरें। आप प्रत्येक इनपुट बॉक्स के नीचे दिए गए नोट्स देख सकते हैं।

ट्विटर एप्लीकेशन बनाना

चरण 5) पृष्ठ को नीचे स्क्रॉल करें और चिह्नित करके शर्तें स्वीकार करें 'हाँ मैं सहमत हूँ' और बटन पर क्लिक करें'अपना ट्विटर एप्लिकेशन बनाएं'

ट्विटर एप्लीकेशन बनाना

चरण 6) किसी नए बनाए गए एप्लिकेशन की विंडो पर, टैब पर जाएं, 'एपीआई कुंजी' पृष्ठ को नीचे स्क्रॉल करें और बटन पर क्लिक करें 'मेरा एक्सेस टोकन बनाएं'

ट्विटर एप्लीकेशन बनाना

ट्विटर एप्लीकेशन बनाना

चरण 7) पृष्ठ ताज़ा करें।

चरण 8) पर क्लिक करें 'OAuth का परीक्षण करें'. यह प्रदर्शित करेगा 'ओआथ' एप्लिकेशन की सेटिंग्स.

ट्विटर एप्लीकेशन बनाना

चरण 9) सुधारे 'फ्लूम.कॉन्फ़' इनका उपयोग करना OAuth सेटिंग्स.संशोधित करने के चरण 'फ्लूम.कॉन्फ़' नीचे दिए गए हैं।

ट्विटर एप्लीकेशन बनाना

हमें 'flume.conf' को अपडेट करने के लिए उपभोक्ता कुंजी, उपभोक्ता गुप्त, एक्सेस टोकन और एक्सेस टोकन गुप्त को कॉपी करने की आवश्यकता है।

नोट: ये मान उपयोगकर्ता के हैं और गोपनीय हैं, इसलिए इन्हें साझा नहीं किया जाना चाहिए।

'flume.conf' फ़ाइल को संशोधित करें

चरण 1) प्रारंभिक 'फ्लूम.कॉन्फ़' लेखन मोड में और नीचे दिए गए मापदंडों के लिए मान सेट करें-

sudo gedit flume.conf

नीचे दी गई सामग्री की प्रतिलिपि करें-

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' फ़ाइल संशोधित करें

चरण 2) इसके अलावा, सेट TwitterAgent.sinks.HDFS.hdfs.path नीचे के अनुसार,

TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /फ्लूम/ट्वीट्स/

'Flume.conf' फ़ाइल संशोधित करें

जानना , और , पैरामीटर का मान देखें 'fs.डिफ़ॉल्टFS' शुरु होना $HADOOP_HOME/etc/hadoop/core-site.xml

'Flume.conf' फ़ाइल संशोधित करें

चरण 3) डेटा को HDFS में फ्लश करने के लिए, जब यह आए, तो नीचे दी गई प्रविष्टि को हटा दें यदि यह मौजूद है,

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

उदाहरण: फ़्लूम का उपयोग करके ट्विटर डेटा स्ट्रीमिंग

चरण 1) प्रारंभिक 'फ्लूम-env.sh' लेखन मोड में और नीचे दिए गए मापदंडों के लिए मान सेट करें,

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

फ़्लूम का उपयोग करके ट्विटर डेटा स्ट्रीमिंग

चरण 2) Hadoop प्रारंभ करें

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

चरण 3) फ़्लूम टारबॉल की दो JAR फ़ाइलें Hadoop 2.2.0 के साथ संगत नहीं हैं। इसलिए, हमें फ़्लूम को Hadoop 2.2.0 के साथ संगत बनाने के लिए इस अपाचे फ़्लूम उदाहरण में नीचे दिए गए चरणों का पालन करना होगा।

a. चाल प्रोटोबफ-जावा-2.4.1.jar के बाहर ' /लिब'.

' /लिब'

सीडी /लिब

sudo mv protobuf-java-2.4.1.jar ~/

फ़्लूम का उपयोग करके ट्विटर डेटा स्ट्रीमिंग

b. JAR फ़ाइल 'guava' को नीचे दिए अनुसार खोजें

find . -name "guava*"

फ़्लूम का उपयोग करके ट्विटर डेटा स्ट्रीमिंग

चाल अमरूद-10.0.1.jar के बाहर ' /लिब'.

sudo mv guava-10.0.1.jar ~/

फ़्लूम का उपयोग करके ट्विटर डेटा स्ट्रीमिंग

c. डाउनलोड अमरूद-17.0.jar से http://mvnrepository.com/artifact/com.google.guava/guava/17.0

फ़्लूम का उपयोग करके ट्विटर डेटा स्ट्रीमिंग

अब, इस डाउनलोड की गई jar फ़ाइल को कॉपी करें ' /लिब'

चरण 4) ' /बिन' और फ़्लुम को इस प्रकार प्रारंभ करें-

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

फ़्लूम का उपयोग करके ट्विटर डेटा स्ट्रीमिंग

कमांड प्रॉम्प्ट विंडो जहां फ्लूम ट्वीट्स ला रहा है-

फ़्लूम का उपयोग करके ट्विटर डेटा स्ट्रीमिंग

कमांड विंडो संदेश से हम देख सकते हैं कि आउटपुट लिखा गया है /उपयोगकर्ता/hduser/flume/ट्वीट्स/ निर्देशिका.

अब, वेब ब्राउज़र का उपयोग करके इस निर्देशिका को खोलें।

चरण 5) डेटा लोड का परिणाम देखने के लिए, ब्राउज़र खोलें http://localhost:50070/ और फ़ाइल सिस्टम ब्राउज़ करें, फिर उस डायरेक्टरी पर जाएँ जहाँ डेटा लोड किया गया है, अर्थात-

/फ्लूम/ट्वीट्स/

फ़्लूम का उपयोग करके ट्विटर डेटा स्ट्रीमिंग