अपाचे फ्लूम ट्यूटोरियल: क्या है, Archiटेक्चर और हाडोप उदाहरण
हाडोप में अपाचे फ्लूम क्या है?
अपाचे फ्लूम लॉग डेटा की भारी मात्रा को एकत्रित करने, एकत्र करने और स्थानांतरित करने के लिए एक विश्वसनीय और वितरित प्रणाली है। इसमें स्ट्रीमिंग डेटा प्रवाह पर आधारित एक सरल लेकिन लचीला आर्किटेक्चर है। अपाचे फ्लूम का उपयोग वेब सर्वर से लॉग फ़ाइलों में मौजूद लॉग डेटा को इकट्ठा करने और विश्लेषण के लिए इसे HDFS में एकत्र करने के लिए किया जाता है।
हाडोप में फ्लूम कई स्रोतों का समर्थन करता है जैसे -
- 'टेल' (जो स्थानीय फ़ाइल से डेटा को पाइप करता है और फ्लूम के माध्यम से HDFS में लिखता है, यूनिक्स कमांड 'टेल' के समान)
- सिस्टम लॉग
- अपाचे log4j (सक्षम Java (फ्लूम के माध्यम से एचडीएफएस में फाइलों में ईवेंट लिखने के लिए अनुप्रयोग)।
नालिका Archiटेक्चर
A फ्लूम एजेंट एक JVM प्रक्रिया जिसके 3 घटक हैं –फ़्लूम स्रोत, फ़्लूम चैनल और फ़्लूम सिंक- जिसके माध्यम से घटनाएँ बाहरी स्रोत पर शुरू होने के बाद प्रसारित होती हैं।

- ऊपर दिए गए आरेख में, बाहरी स्रोत (वेबसर्वर) द्वारा उत्पन्न घटनाओं का उपयोग फ़्लूम डेटा स्रोत द्वारा किया जाता है। बाहरी स्रोत फ़्लूम स्रोत को ऐसे प्रारूप में घटनाएँ भेजता है जिसे लक्ष्य स्रोत द्वारा पहचाना जाता है।
- फ़्लूम स्रोत एक ईवेंट प्राप्त करता है और उसे एक या अधिक चैनलों में संग्रहीत करता है। चैनल एक स्टोर के रूप में कार्य करता है जो ईवेंट को तब तक रखता है जब तक कि इसे फ़्लूम सिंक द्वारा उपयोग नहीं किया जाता है। यह चैनल इन ईवेंट को संग्रहीत करने के लिए स्थानीय फ़ाइल सिस्टम का उपयोग कर सकता है।
- फ़्लूम सिंक किसी चैनल से इवेंट को हटाता है और उसे बाहरी रिपॉजिटरी जैसे कि HDFS में संग्रहीत करता है। कई फ़्लूम एजेंट हो सकते हैं, जिस स्थिति में फ़्लूम सिंक इवेंट को फ़्लो में अगले फ़्लूम एजेंट के फ़्लूम स्रोत पर अग्रेषित करता है।
फ्लूम की कुछ महत्वपूर्ण विशेषताएं
- फ़्लूम में स्ट्रीमिंग डेटा फ़्लो पर आधारित एक लचीला डिज़ाइन है। यह दोष सहिष्णु है और कई फ़ेलओवर और रिकवरी तंत्रों के साथ मज़बूत है। फ़्लूम बिग डेटा में विश्वसनीयता के विभिन्न स्तर हैं जिनमें शामिल हैं 'सर्वोत्तम प्रयास वितरण' और एक 'शुरू से अंत तक डिलीवरी'. सर्वोत्तम प्रयास वितरण किसी भी फ़्लुम नोड विफलता को बर्दाश्त नहीं करता है जबकि 'शुरू से अंत तक डिलीवरी' मोड कई नोड विफलताओं की स्थिति में भी डिलीवरी की गारंटी देता है।
- फ़्लूम स्रोतों और सिंक के बीच डेटा ले जाता है। डेटा का यह संग्रह या तो शेड्यूल किया जा सकता है या इवेंट-संचालित हो सकता है। फ़्लूम का अपना क्वेरी प्रोसेसिंग इंजन है जो डेटा के प्रत्येक नए बैच को इच्छित सिंक में ले जाने से पहले उसे बदलना आसान बनाता है।
- संभव फ्लूम सिंक शामिल एचडीएफएस और एचबेसफ्लूम हाडोप का उपयोग इवेंट डेटा के परिवहन के लिए भी किया जा सकता है, जिसमें नेटवर्क ट्रैफ़िक डेटा, सोशल मीडिया वेबसाइटों और ईमेल संदेशों द्वारा उत्पन्न डेटा शामिल है, लेकिन इन्हीं तक सीमित नहीं है।
फ़्लूम, लाइब्रेरी और स्रोत कोड सेटअप
वास्तविक प्रक्रिया शुरू करने से पहले, सुनिश्चित करें कि आपके पास Hadoop इंस्टॉल है। यूजर को 'hduser' में बदलें (Hadoop कॉन्फ़िगरेशन के दौरान इस्तेमाल की गई आईडी, आप अपने Hadoop कॉन्फ़िगरेशन के दौरान इस्तेमाल की गई यूजरआईडी पर स्विच कर सकते हैं)
चरण 1) 'FlumeTutorial' नाम से एक नई निर्देशिका बनाएँ
sudo mkdir FlumeTutorial
- पढ़ने, लिखने और निष्पादित करने की अनुमति दें
sudo chmod -R 777 FlumeTutorial
- फ़ाइलों की प्रतिलिपि बनाएँ 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
चरण 2) इसके अलावा, सेट TwitterAgent.sinks.HDFS.hdfs.path नीचे के अनुसार,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /फ्लूम/ट्वीट्स/
जानना , और , पैरामीटर का मान देखें 'fs.डिफ़ॉल्टFS' शुरु होना $HADOOP_HOME/etc/hadoop/core-site.xml
चरण 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/ और फ़ाइल सिस्टम ब्राउज़ करें, फिर उस डायरेक्टरी पर जाएँ जहाँ डेटा लोड किया गया है, अर्थात-
/फ्लूम/ट्वीट्स/