Εκμάθηση 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– μέσω των οποίων διαδίδονται γεγονότα μετά την έναρξη σε μια εξωτερική πηγή.

Ροή Archiδομή
Ροή Archiδομή
  1. Στο παραπάνω διάγραμμα, τα συμβάντα που δημιουργούνται από εξωτερική πηγή (WebServer) καταναλώνονται από το Flume Data Source. Η εξωτερική πηγή στέλνει συμβάντα στην πηγή Flume σε μορφή που αναγνωρίζεται από την πηγή προορισμού.
  2. Το Flume Source λαμβάνει ένα συμβάν και το αποθηκεύει σε ένα ή περισσότερα κανάλια. Το κανάλι λειτουργεί ως χώρος αποθήκευσης που κρατά το συμβάν μέχρι να καταναλωθεί από τον αγωγό. Αυτό το κανάλι μπορεί να χρησιμοποιεί ένα τοπικό σύστημα αρχείων για την αποθήκευση αυτών των συμβάντων.
  3. Το Flume Sink αφαιρεί το συμβάν από ένα κανάλι και το αποθηκεύει σε ένα εξωτερικό χώρο αποθήκευσης όπως π.χ. HDFS. Θα μπορούσαν να υπάρχουν πολλαπλοί ατμοσφαιρικοί παράγοντες, οπότε ο αγωγός ροής προωθεί το συμβάν στην πηγή ροής του επόμενου παράγοντα ροής στη ροή.

Μερικά σημαντικά χαρακτηριστικά του FLUME

  • Το Flume έχει έναν ευέλικτο σχεδιασμό που βασίζεται στις ροές δεδομένων ροής. Είναι ανεκτικό σε σφάλματα και ανθεκτικό με πολλαπλές αστοχίες και μηχανισμούς ανάκτησης. Το Flume Big data προσφέρει διαφορετικά επίπεδα αξιοπιστίας που περιλαμβάνει «παράδοση με την καλύτερη δυνατή προσπάθεια» και ένα «παράδοση από άκρο σε άκρο». καλυτερα-effort delivery δεν ανέχεται καμία αποτυχία κόμβου Flume ενώ «παράδοση από άκρο σε άκρο» Η λειτουργία εγγυάται την παράδοση ακόμη και σε περίπτωση αποτυχίας πολλαπλών κόμβων.
  • Το Flume μεταφέρει δεδομένα μεταξύ πηγών και καταβόθρων. Αυτή η συλλογή δεδομένων μπορεί είτε να προγραμματιστεί είτε να βασίζεται σε γεγονότα. Το Flume έχει τη δική του μηχανή επεξεργασίας ερωτημάτων που διευκολύνει τη μετατροπή κάθε νέας παρτίδας δεδομένων προτού μεταφερθεί στο επιθυμητό νεροχύτη.
  • Πιθανές Νεροχύτες flume περιλαμβάνουν ΚΑΕ και HBase. Το Flume Hadoop μπορεί επίσης να χρησιμοποιηθεί για τη μεταφορά δεδομένων συμβάντων συμπεριλαμβανομένων, ενδεικτικά, δεδομένων κίνησης δικτύου, δεδομένων που παράγονται από ιστότοπους κοινωνικών μέσων και μηνυμάτων email.

Ρύθμιση Flume, βιβλιοθήκης και πηγαίου κώδικα

Πριν ξεκινήσουμε με την πραγματική διαδικασία, βεβαιωθείτε ότι έχετε εγκαταστήσει το Hadoop. Αλλαγή χρήστη σε «hduser» (το αναγνωριστικό χρησιμοποιείται κατά τη διαμόρφωση του Hadoop, μπορείτε να μεταβείτε στο userid που χρησιμοποιείται κατά τη διαμόρφωση του Hadoop)

Ρύθμιση Flume, Library και Source Code

Βήμα 1) Δημιουργήστε έναν νέο κατάλογο με το όνομα 'FlumeTutorial'

sudo mkdir FlumeTutorial
  1. Δώστε δικαιώματα ανάγνωσης, εγγραφής και εκτέλεσης
    sudo chmod -R 777 FlumeTutorial
  2. Αντιγραφή αρχείων MyTwitterSource.java και MyTwitterSourceForFlume.java σε αυτόν τον κατάλογο.

Κατεβάστε τα αρχεία εισόδου από εδώ

Ελέγξτε τα δικαιώματα αρχείων όλων αυτών των αρχείων και εάν λείπουν τα δικαιώματα «ανάγνωσης», παραχωρήστε τα ίδια-

Ρύθμιση Flume, Library και Source Code

Βήμα 2) Κατεβάστε το 'Apache Flume' από έναν ιστότοπο- https://flume.apache.org/download.html

Το Apache Flume 1.4.0 έχει χρησιμοποιηθεί σε αυτό το σεμινάριο Flume.

Ρύθμιση Flume, Library και Source Code

Επόμενο κλικ

Ρύθμιση Flume, Library και Source Code

Βήμα 3) Αντιγράψτε το ληφθέν tarball στον κατάλογο της επιλογής σας και εξαγάγετε τα περιεχόμενα χρησιμοποιώντας την ακόλουθη εντολή

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

Ρύθμιση Flume, Library και Source Code

Αυτή η εντολή θα δημιουργήσει έναν νέο κατάλογο με όνομα 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

Ρύθμιση Flume, Library και Source Code

Αφού αυτή η εντολή δίνει την άδεια «ανάγνωσης». 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/*"

Φόρτωση δεδομένων από το Twitter χρησιμοποιώντας το Flume

Βήμα 3) Μεταγλωττίστε τον πηγαίο κώδικα χρησιμοποιώντας την εντολή-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Φόρτωση δεδομένων από το Twitter χρησιμοποιώντας το Flume

Βήμα 4)Δημιουργήστε ένα βάζο

Πρώτα, δημιουργήστε Manifest.txt αρχείο χρησιμοποιώντας ένα πρόγραμμα επεξεργασίας κειμένου της επιλογής σας και προσθέστε την παρακάτω γραμμή σε αυτό-

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

.. εδώ flume.mytwittersource.MyTwitterSourceForFlume είναι το όνομα της κύριας τάξης. Σημειώστε ότι πρέπει να πατήσετε το πλήκτρο enter στο τέλος αυτής της γραμμής.

Φόρτωση δεδομένων από το Twitter χρησιμοποιώντας το Flume

Τώρα, δημιουργήστε το JARMyTwitterSourceForFlume.jar' όπως και-

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

Φόρτωση δεδομένων από το Twitter χρησιμοποιώντας το Flume

Βήμα 5) Αντιγράψτε αυτό το βάζο σε /lib/

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

Φόρτωση δεδομένων από το Twitter χρησιμοποιώντας το Flume

Βήμα 6) Μεταβείτε στον κατάλογο διαμόρφωσης του Flume, /συνδ

Εάν το flume.conf δεν υπάρχει, τότε αντιγράψτε το flume-conf.properties.template και μετονομάστε το σε flume.conf

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

Φόρτωση δεδομένων από το Twitter χρησιμοποιώντας το Flume

If flume-env.sh δεν υπάρχει, τότε αντιγράψτε flume-env.sh.πρότυπο και μετονομάστε το σε flume-env.sh

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

Φόρτωση δεδομένων από το Twitter χρησιμοποιώντας το Flume

Δημιουργία εφαρμογής Twitter

Βήμα 1) Δημιουργήστε μια εφαρμογή Twitter πραγματοποιώντας είσοδο στο https://developer.twitter.com/

Δημιουργία εφαρμογής Twitter

Δημιουργία εφαρμογής Twitter

Βήμα 2) Πηγαίνετε στο "Οι αιτήσεις μου" (Αυτή η επιλογή απορρίπτεται όταν 'Αυγό' γίνεται κλικ στο κουμπί στην επάνω δεξιά γωνία)

Δημιουργία εφαρμογής Twitter

Βήμα 3) Δημιουργήστε μια νέα εφαρμογή κάνοντας κλικ "Δημιουργία νέας εφαρμογής"

Βήμα 4) Συμπληρώστε τα στοιχεία της εφαρμογής προσδιορίζοντας το όνομα της εφαρμογής, την περιγραφή και τον ιστότοπο. Μπορείτε να ανατρέξετε στις σημειώσεις που δίνονται κάτω από κάθε πλαίσιο εισαγωγής.

Δημιουργία εφαρμογής Twitter

Βήμα 5) Κάντε κύλιση προς τα κάτω στη σελίδα και αποδεχτείτε τους όρους επισημαίνοντας 'Ναι εγώ συμφωνώ' και κάντε κλικ στο κουμπί"Δημιουργήστε την εφαρμογή σας στο Twitter"

Δημιουργία εφαρμογής Twitter

Βήμα 6) Στο παράθυρο μιας εφαρμογής που δημιουργήθηκε πρόσφατα, μεταβείτε στην καρτέλα, Κλειδιά API μετακινηθείτε προς τα κάτω στη σελίδα και κάντε κλικ στο κουμπί "Δημιουργία διακριτικού πρόσβασης"

Δημιουργία εφαρμογής Twitter

Δημιουργία εφαρμογής Twitter

Βήμα 7) Ανανέωσε τη σελίδα.

Βήμα 8) Κάντε κλικ στο "Δοκιμή OAuth". Αυτό θα εμφανιστεί 'OAuth' ρυθμίσεις της εφαρμογής.

Δημιουργία εφαρμογής Twitter

Βήμα 9) Τροποποίηση 'flume.conf' χρησιμοποιώντας αυτά Ρυθμίσεις OAuth. Βήματα για τροποποίηση 'flume.conf' δίνονται παρακάτω.

Δημιουργία εφαρμογής Twitter

Πρέπει να αντιγράψουμε το κλειδί καταναλωτή, το μυστικό καταναλωτή, το διακριτικό πρόσβασης και το μυστικό διακριτικού πρόσβασης στην ενημέρωση του '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

Τροποποιήστε το αρχείο 'Flume.conf'

Βήμα 2) Επίσης, σετ TwitterAgent.sinks.HDFS.hdfs.path ως κατωτέρω,

TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweets/

Τροποποιήστε το αρχείο 'Flume.conf'

Να ξερω , και , δείτε την τιμή της παραμέτρου "fs.defaultFS" εδραιώνομαι $HADOOP_HOME/etc/hadoop/core-site.xml

Τροποποιήστε το αρχείο 'Flume.conf'

Βήμα 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"

Ροή δεδομένων Twitter χρησιμοποιώντας Flume

Βήμα 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 ~/

Ροή δεδομένων Twitter χρησιμοποιώντας Flume

b. Βρείτε το αρχείο JAR 'guava' όπως παρακάτω

find . -name "guava*"

Ροή δεδομένων Twitter χρησιμοποιώντας Flume

Κίνηση γκουάβα-10.0.1.βάζο εκτός ' /lib'.

sudo mv guava-10.0.1.jar ~/

Ροή δεδομένων Twitter χρησιμοποιώντας Flume

c. Λήψη γκουάβα-17.0.βάζο από http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Ροή δεδομένων Twitter χρησιμοποιώντας Flume

Τώρα, αντιγράψτε αυτό το ληφθέν αρχείο jar στο ' /lib'

Βήμα 4) Πηγαίνετε στο ' /αποθήκη' και ξεκινήστε το Flume ως-

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

Ροή δεδομένων Twitter χρησιμοποιώντας Flume

Παράθυρο γραμμής εντολών όπου το flume λαμβάνει Tweets-

Ροή δεδομένων Twitter χρησιμοποιώντας Flume

Από το μήνυμα παραθύρου εντολής μπορούμε να δούμε ότι η έξοδος είναι γραμμένη στο /user/hduser/flume/tweets/ Κατάλογο.

Τώρα, ανοίξτε αυτόν τον κατάλογο χρησιμοποιώντας ένα πρόγραμμα περιήγησης ιστού.

Βήμα 5) Για να δείτε το αποτέλεσμα της φόρτωσης δεδομένων, ανοίξτε χρησιμοποιώντας ένα πρόγραμμα περιήγησης http://localhost:50070/ και περιηγηθείτε στο σύστημα αρχείων και, στη συνέχεια, μεταβείτε στον κατάλογο όπου έχουν φορτωθεί τα δεδομένα, δηλαδή-

/flume/tweets/

Ροή δεδομένων Twitter χρησιμοποιώντας Flume