Εκμάθηση Apache Flume: Τι είναι, ArchiΠαράδειγμα tecture & Hadoop
Τι είναι το Apache Flume στο Hadoop;
Apache Flume είναι ένα αξιόπιστο και κατανεμημένο σύστημα για τη συλλογή, τη συγκέντρωση και τη μετακίνηση τεράστιων ποσοτήτων δεδομένων καταγραφής. Έχει μια απλή αλλά ευέλικτη αρχιτεκτονική που βασίζεται στις ροές δεδομένων ροής. Το Apache Flume χρησιμοποιείται για τη συλλογή δεδομένων καταγραφής που υπάρχουν σε αρχεία καταγραφής από διακομιστές Ιστού και τη συγκέντρωση τους σε HDFS για ανάλυση.
Το Flume στο Hadoop υποστηρίζει πολλαπλές πηγές όπως -
- 'tail' (που διοχετεύει δεδομένα από ένα τοπικό αρχείο και εγγράφει σε HDFS μέσω Flume, παρόμοια με την εντολή Unix 'tail')
- Αρχεία καταγραφής συστήματος
- Apache log4j (επιτρέπω Java εφαρμογές για εγγραφή συμβάντων σε αρχεία σε HDFS μέσω Flume).
Ροή Archiδομή
A Πράκτορας ροής είναι ένα FMV διαδικασία η οποία έχει 3 συστατικά –Πηγή ροής, Κανάλι Flume και Νεροχύτης Flume– μέσω των οποίων διαδίδονται γεγονότα μετά την έναρξη σε μια εξωτερική πηγή.

- Στο παραπάνω διάγραμμα, τα συμβάντα που δημιουργούνται από εξωτερική πηγή (WebServer) καταναλώνονται από το Flume Data Source. Η εξωτερική πηγή στέλνει συμβάντα στην πηγή Flume σε μορφή που αναγνωρίζεται από την πηγή προορισμού.
- Το Flume Source λαμβάνει ένα συμβάν και το αποθηκεύει σε ένα ή περισσότερα κανάλια. Το κανάλι λειτουργεί ως χώρος αποθήκευσης που κρατά το συμβάν μέχρι να καταναλωθεί από τον αγωγό. Αυτό το κανάλι μπορεί να χρησιμοποιεί ένα τοπικό σύστημα αρχείων για την αποθήκευση αυτών των συμβάντων.
- Το Flume Sink αφαιρεί το συμβάν από ένα κανάλι και το αποθηκεύει σε ένα εξωτερικό χώρο αποθήκευσης όπως π.χ. HDFS. Θα μπορούσαν να υπάρχουν πολλαπλοί ατμοσφαιρικοί παράγοντες, οπότε ο αγωγός ροής προωθεί το συμβάν στην πηγή ροής του επόμενου παράγοντα ροής στη ροή.
Μερικά σημαντικά χαρακτηριστικά του FLUME
- Το Flume έχει έναν ευέλικτο σχεδιασμό που βασίζεται στις ροές δεδομένων ροής. Είναι ανεκτικό σε σφάλματα και ανθεκτικό με πολλαπλές αστοχίες και μηχανισμούς ανάκτησης. Το Flume Big data προσφέρει διαφορετικά επίπεδα αξιοπιστίας που περιλαμβάνει «παράδοση με την καλύτερη δυνατή προσπάθεια» και ένα «παράδοση από άκρο σε άκρο». καλυτερα-effort delivery δεν ανέχεται καμία αποτυχία κόμβου Flume ενώ «παράδοση από άκρο σε άκρο» Η λειτουργία εγγυάται την παράδοση ακόμη και σε περίπτωση αποτυχίας πολλαπλών κόμβων.
- Το Flume μεταφέρει δεδομένα μεταξύ πηγών και καταβόθρων. Αυτή η συλλογή δεδομένων μπορεί είτε να προγραμματιστεί είτε να βασίζεται σε γεγονότα. Το Flume έχει τη δική του μηχανή επεξεργασίας ερωτημάτων που διευκολύνει τη μετατροπή κάθε νέας παρτίδας δεδομένων προτού μεταφερθεί στο επιθυμητό νεροχύτη.
- Πιθανές Νεροχύτες flume περιλαμβάνουν ΚΑΕ και HBase. Το Flume Hadoop μπορεί επίσης να χρησιμοποιηθεί για τη μεταφορά δεδομένων συμβάντων συμπεριλαμβανομένων, ενδεικτικά, δεδομένων κίνησης δικτύου, δεδομένων που παράγονται από ιστότοπους κοινωνικών μέσων και μηνυμάτων email.
Ρύθμιση Flume, βιβλιοθήκης και πηγαίου κώδικα
Πριν ξεκινήσουμε με την πραγματική διαδικασία, βεβαιωθείτε ότι έχετε εγκαταστήσει το Hadoop. Αλλαγή χρήστη σε «hduser» (το αναγνωριστικό χρησιμοποιείται κατά τη διαμόρφωση του Hadoop, μπορείτε να μεταβείτε στο userid που χρησιμοποιείται κατά τη διαμόρφωση του Hadoop)
Βήμα 1) Δημιουργήστε έναν νέο κατάλογο με το όνομα 'FlumeTutorial'
sudo mkdir FlumeTutorial
- Δώστε δικαιώματα ανάγνωσης, εγγραφής και εκτέλεσης
sudo chmod -R 777 FlumeTutorial
- Αντιγραφή αρχείων MyTwitterSource.java και MyTwitterSourceForFlume.java σε αυτόν τον κατάλογο.
Κατεβάστε τα αρχεία εισόδου από εδώ
Ελέγξτε τα δικαιώματα αρχείων όλων αυτών των αρχείων και εάν λείπουν τα δικαιώματα «ανάγνωσης», παραχωρήστε τα ίδια-
Βήμα 2) Κατεβάστε το 'Apache Flume' από έναν ιστότοπο- https://flume.apache.org/download.html
Το Apache Flume 1.4.0 έχει χρησιμοποιηθεί σε αυτό το σεμινάριο Flume.
Επόμενο κλικ
Βήμα 3) Αντιγράψτε το ληφθέν tarball στον κατάλογο της επιλογής σας και εξαγάγετε τα περιεχόμενα χρησιμοποιώντας την ακόλουθη εντολή
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Αυτή η εντολή θα δημιουργήσει έναν νέο κατάλογο με όνομα apache-flume-1.4.0-bin και εξάγετε αρχεία σε αυτό. Αυτός ο κατάλογος θα αναφέρεται ως στο υπόλοιπο άρθρο.
Βήμα 4) Ρύθμιση βιβλιοθήκης Flume
αντίγραφο twitter4j-core-4.0.1.jar, flume-ng-configuration-1.4.0.jar, flume-ng-core-1.4.0.jar, flume-ng-sdk-1.4.0.jar προς την
/lib/
Είναι πιθανό ένα ή όλα τα αντιγραμμένα JAR να πρέπει να εκτελέσουν άδεια. Αυτό μπορεί να προκαλέσει πρόβλημα με τη μεταγλώττιση του κώδικα. Επομένως, ανακαλέστε την άδεια εκτέλεσης σε ένα τέτοιο JAR.
Στην περίπτωσή μου, twitter4j-core-4.0.1.jar ήταν πρέπει να εκτελέσει άδεια. Το ακύρω ως εξής-
sudo chmod -x twitter4j-core-4.0.1.jar
Αφού αυτή η εντολή δίνει την άδεια «ανάγνωσης». twitter4j-core-4.0.1.jar σε όλους.
sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar
Παρακαλώ σημειώστε ότι έχω κατεβάσει-
– twitter4j-core-4.0.1.jar από https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core
- Όλα τα βαζάκια φλόγας π.χ. flume-ng-*-1.4.0.jar από http://mvnrepository.com/artifact/org.apache.flume
Φορτώστε δεδομένα από το Twitter χρησιμοποιώντας το Flume
Βήμα 1) Μεταβείτε στον κατάλογο που περιέχει αρχεία πηγαίου κώδικα σε αυτόν.
Βήμα 2) σετ ΤΑΞΙΚΟΔΡΟΜΙΑ να περιέχει /lib/* και ~/FlumeTutorial/flume/mytwittersource/*
export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"
Βήμα 3) Μεταγλωττίστε τον πηγαίο κώδικα χρησιμοποιώντας την εντολή-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Βήμα 4)Δημιουργήστε ένα βάζο
Πρώτα, δημιουργήστε Manifest.txt αρχείο χρησιμοποιώντας ένα πρόγραμμα επεξεργασίας κειμένου της επιλογής σας και προσθέστε την παρακάτω γραμμή σε αυτό-
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
.. εδώ flume.mytwittersource.MyTwitterSourceForFlume είναι το όνομα της κύριας τάξης. Σημειώστε ότι πρέπει να πατήσετε το πλήκτρο enter στο τέλος αυτής της γραμμής.
Τώρα, δημιουργήστε το JARMyTwitterSourceForFlume.jar' όπως και-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Βήμα 5) Αντιγράψτε αυτό το βάζο σε /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
Βήμα 6) Μεταβείτε στον κατάλογο διαμόρφωσης του Flume, /συνδ
Εάν το flume.conf δεν υπάρχει, τότε αντιγράψτε το flume-conf.properties.template και μετονομάστε το σε flume.conf
sudo cp flume-conf.properties.template flume.conf
If flume-env.sh δεν υπάρχει, τότε αντιγράψτε flume-env.sh.πρότυπο και μετονομάστε το σε flume-env.sh
sudo cp flume-env.sh.template flume-env.sh
Δημιουργία εφαρμογής Twitter
Βήμα 1) Δημιουργήστε μια εφαρμογή Twitter πραγματοποιώντας είσοδο στο https://developer.twitter.com/
Βήμα 2) Πηγαίνετε στο "Οι αιτήσεις μου" (Αυτή η επιλογή απορρίπτεται όταν 'Αυγό' γίνεται κλικ στο κουμπί στην επάνω δεξιά γωνία)
Βήμα 3) Δημιουργήστε μια νέα εφαρμογή κάνοντας κλικ "Δημιουργία νέας εφαρμογής"
Βήμα 4) Συμπληρώστε τα στοιχεία της εφαρμογής προσδιορίζοντας το όνομα της εφαρμογής, την περιγραφή και τον ιστότοπο. Μπορείτε να ανατρέξετε στις σημειώσεις που δίνονται κάτω από κάθε πλαίσιο εισαγωγής.
Βήμα 5) Κάντε κύλιση προς τα κάτω στη σελίδα και αποδεχτείτε τους όρους επισημαίνοντας 'Ναι εγώ συμφωνώ' και κάντε κλικ στο κουμπί"Δημιουργήστε την εφαρμογή σας στο Twitter"
Βήμα 6) Στο παράθυρο μιας εφαρμογής που δημιουργήθηκε πρόσφατα, μεταβείτε στην καρτέλα, Κλειδιά API μετακινηθείτε προς τα κάτω στη σελίδα και κάντε κλικ στο κουμπί "Δημιουργία διακριτικού πρόσβασης"
Βήμα 7) Ανανέωσε τη σελίδα.
Βήμα 8) Κάντε κλικ στο "Δοκιμή OAuth". Αυτό θα εμφανιστεί 'OAuth' ρυθμίσεις της εφαρμογής.
Βήμα 9) Τροποποίηση 'flume.conf' χρησιμοποιώντας αυτά Ρυθμίσεις OAuth. Βήματα για τροποποίηση 'flume.conf' δίνονται παρακάτω.
Πρέπει να αντιγράψουμε το κλειδί καταναλωτή, το μυστικό καταναλωτή, το διακριτικό πρόσβασης και το μυστικό διακριτικού πρόσβασης στην ενημέρωση του 'flume.conf'.
Σημείωση: Αυτές οι τιμές ανήκουν στον χρήστη και ως εκ τούτου είναι εμπιστευτικές, επομένως δεν πρέπει να κοινοποιούνται.
Τροποποίηση του αρχείου 'flume.conf'
Βήμα 1) Ανοικτό 'flume.conf' σε λειτουργία εγγραφής και ορίστε τιμές για τις παρακάτω παραμέτρους-
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:// : / /flume/tweets/
Να ξερω , και , δείτε την τιμή της παραμέτρου "fs.defaultFS" εδραιώνομαι $HADOOP_HOME/etc/hadoop/core-site.xml
Βήμα 3) Για να ξεπλύνετε τα δεδομένα στο HDFS, όπως όταν έρχεται, διαγράψτε την παρακάτω καταχώριση εάν υπάρχει,
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
Παράδειγμα: Ροή δεδομένων Twitter χρησιμοποιώντας Flume
Βήμα 1) Ανοικτό 'flume-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 από το Flume tarball δεν είναι συμβατά με το Hadoop 2.2.0. Επομένως, θα χρειαστεί να ακολουθήσουμε τα παρακάτω βήματα σε αυτό το παράδειγμα Apache Flume για να κάνουμε το Flume συμβατό με το Hadoop 2.2.0.
a. Κίνηση protobuf-java-2.4.1.jar εκτός ' /lib'.
Πηγαίνετε στο ' /lib'
CD /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Βρείτε το αρχείο JAR 'guava' όπως παρακάτω
find . -name "guava*"
Κίνηση γκουάβα-10.0.1.βάζο εκτός ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Λήψη γκουάβα-17.0.βάζο από http://mvnrepository.com/artifact/com.google.guava/guava/17.0
Τώρα, αντιγράψτε αυτό το ληφθέν αρχείο jar στο ' /lib'
Βήμα 4) Πηγαίνετε στο ' /αποθήκη' και ξεκινήστε το Flume ως-
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Παράθυρο γραμμής εντολών όπου το flume λαμβάνει Tweets-
Από το μήνυμα παραθύρου εντολής μπορούμε να δούμε ότι η έξοδος είναι γραμμένη στο /user/hduser/flume/tweets/ Κατάλογο.
Τώρα, ανοίξτε αυτόν τον κατάλογο χρησιμοποιώντας ένα πρόγραμμα περιήγησης ιστού.
Βήμα 5) Για να δείτε το αποτέλεσμα της φόρτωσης δεδομένων, ανοίξτε χρησιμοποιώντας ένα πρόγραμμα περιήγησης http://localhost:50070/ και περιηγηθείτε στο σύστημα αρχείων και, στη συνέχεια, μεταβείτε στον κατάλογο όπου έχουν φορτωθεί τα δεδομένα, δηλαδή-
/flume/tweets/