Apache Flume - Abrufen von Twitter-Daten
Mit Flume können wir Daten von verschiedenen Diensten abrufen und zu zentralen Speichern (HDFS und HBase) transportieren. In diesem Kapitel wird erläutert, wie Sie Daten vom Twitter-Dienst abrufen und mit Apache Flume in HDFS speichern.
Wie in Flume Architecture erläutert, generiert ein Webserver Protokolldaten, die von einem Agenten in Flume erfasst werden. Der Kanal puffert diese Daten in einer Senke, die sie schließlich in zentralisierte Speicher weiterleitet.
In dem in diesem Kapitel bereitgestellten Beispiel erstellen wir eine Anwendung und rufen die Tweets mithilfe der experimentellen Twitter-Quelle von Apache Flume ab. Wir werden den Speicherkanal verwenden, um diese Tweets zu puffern, und die HDFS-Senke, um diese Tweets in das HDFS zu pushen.
Um Twitter-Daten abzurufen, müssen wir die folgenden Schritte ausführen:
- Erstellen Sie eine Twitter-Anwendung
- HDFS installieren / starten
- Flume konfigurieren
Erstellen einer Twitter-Anwendung
Um die Tweets von Twitter zu erhalten, muss eine Twitter-Anwendung erstellt werden. Führen Sie die folgenden Schritte aus, um eine Twitter-Anwendung zu erstellen.
Schritt 1
Klicken Sie zum Erstellen einer Twitter-Anwendung auf den folgenden Link https://apps.twitter.com/. Melden Sie sich bei Ihrem Twitter-Konto an. Sie haben ein Twitter Application Management-Fenster, in dem Sie Twitter Apps erstellen, löschen und verwalten können.
Schritt 2
Klick auf das Create New AppTaste. Sie werden zu einem Fenster weitergeleitet, in dem Sie ein Bewerbungsformular erhalten, in das Sie Ihre Daten eingeben müssen, um die App zu erstellen. Geben Sie beim Ausfüllen der Website-Adresse das vollständige URL-Muster an, z.http://example.com.
Schritt 3
Füllen Sie die Details aus, akzeptieren Sie die Developer Agreement Wenn Sie fertig sind, klicken Sie auf Create your Twitter application buttonDas ist am Ende der Seite. Wenn alles gut geht, wird eine App mit den angegebenen Details erstellt, wie unten gezeigt.
Schritt 4
Unter keys and Access Tokens Auf der Registerkarte unten auf der Seite können Sie eine Schaltfläche mit dem Namen beobachten Create my access token. Klicken Sie darauf, um das Zugriffstoken zu generieren.
Schritt 5
Klicken Sie abschließend auf Test OAuthSchaltfläche, die sich oben rechts auf der Seite befindet. Dies führt zu einer Seite, auf der Ihre angezeigt wirdConsumer key, Consumer secret, Access token, und Access token secret. Kopieren Sie diese Details. Diese sind nützlich, um den Agenten in Flume zu konfigurieren.
Starten von HDFS
Da wir die Daten in HDFS speichern, müssen wir Hadoop installieren / überprüfen. Starten Sie Hadoop und erstellen Sie einen Ordner zum Speichern von Flume-Daten. Führen Sie die folgenden Schritte aus, bevor Sie Flume konfigurieren.
Schritt 1: Hadoop installieren / überprüfen
Installieren Sie Hadoop . Wenn Hadoop bereits auf Ihrem System installiert ist, überprüfen Sie die Installation mit dem Befehl Hadoop version (siehe unten).
$ hadoop version
Wenn Ihr System Hadoop enthält und Sie die Pfadvariable festgelegt haben, erhalten Sie die folgende Ausgabe:
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
Schritt 2: Starten von Hadoop
Durchsuchen Sie die sbin Verzeichnis von Hadoop und starten Sie Garn und Hadoop dfs (verteiltes Dateisystem) wie unten gezeigt.
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
Schritt 3: Erstellen Sie ein Verzeichnis in HDFS
In Hadoop DFS können Sie mit dem Befehl Verzeichnisse erstellen mkdir. Durchsuchen Sie es und erstellen Sie ein Verzeichnis mit dem Namentwitter_data im erforderlichen Pfad wie unten gezeigt.
$cd /$Hadoop_Home/bin/
$ hdfs dfs -mkdir hdfs://localhost:9000/user/Hadoop/twitter_data
Flume konfigurieren
Wir müssen die Quelle, den Kanal und die Senke mithilfe der Konfigurationsdatei in der Konfiguration konfigurieren confMappe. Das in diesem Kapitel gegebene Beispiel verwendet eine experimentelle Quelle, die von Apache Flume mit dem Namen bereitgestellt wirdTwitter 1% Firehose Speicherkanal und HDFS-Senke.
Twitter 1% Firehose Source
Diese Quelle ist sehr experimentell. Es stellt über die Streaming-API eine Verbindung zum 1% -Beispiel von Twitter Firehose her und lädt kontinuierlich Tweets herunter, konvertiert sie in das Avro-Format und sendet Avro-Ereignisse an eine nachgeschaltete Flume-Senke.
Wir werden diese Quelle standardmäßig zusammen mit der Installation von Flume erhalten. Dasjar Dateien, die dieser Quelle entsprechen, befinden sich in der lib Ordner wie unten gezeigt.
Klassenpfad festlegen
Stellen Sie die classpath Variable zum lib Ordner von Flume in Flume-env.sh Datei wie unten gezeigt.
export CLASSPATH=$CLASSPATH:/FLUME_HOME/lib/*
Diese Quelle benötigt die Details wie Consumer key, Consumer secret, Access token, und Access token secreteiner Twitter-Anwendung. Bei der Konfiguration dieser Quelle müssen Sie Werte für die folgenden Eigenschaften angeben:
Channels
Source type : org.apache.flume.source.twitter.TwitterSource
consumerKey - Der OAuth-Consumer-Schlüssel
consumerSecret - OAuth-Verbrauchergeheimnis
accessToken - OAuth-Zugriffstoken
accessTokenSecret - OAuth-Token-Geheimnis
maxBatchSize- Maximale Anzahl von Twitter-Nachrichten, die sich in einem Twitter-Stapel befinden sollten. Der Standardwert ist 1000 (optional).
maxBatchDurationMillis- Maximale Anzahl von Millisekunden, die gewartet werden muss, bevor ein Stapel geschlossen wird. Der Standardwert ist 1000 (optional).
Kanal
Wir benutzen den Speicherkanal. Um den Speicherkanal zu konfigurieren, müssen Sie den Typ des Kanals angeben.
type- Es enthält den Typ des Kanals. In unserem Beispiel ist der TypMemChannel.
Capacity- Dies ist die maximale Anzahl von Ereignissen, die im Kanal gespeichert sind. Der Standardwert ist 100 (optional).
TransactionCapacity- Dies ist die maximale Anzahl von Ereignissen, die der Kanal akzeptiert oder sendet. Der Standardwert ist 100 (optional).
HDFS-Spüle
Diese Senke schreibt Daten in das HDFS. Um diese Senke zu konfigurieren, müssen Sie die folgenden Details angeben.
Channel
type - hdfs
hdfs.path - Der Pfad des Verzeichnisses in HDFS, in dem Daten gespeichert werden sollen.
Und wir können einige optionale Werte basierend auf dem Szenario bereitstellen. Im Folgenden sind die optionalen Eigenschaften der HDFS-Senke aufgeführt, die wir in unserer Anwendung konfigurieren.
fileType - Dies ist das erforderliche Dateiformat unserer HDFS-Datei. SequenceFile, DataStream und CompressedStreamsind die drei Typen, die mit diesem Stream verfügbar sind. In unserem Beispiel verwenden wir dieDataStream.
writeFormat - Könnte entweder Text oder beschreibbar sein.
batchSize- Dies ist die Anzahl der Ereignisse, die in eine Datei geschrieben werden, bevor sie in das HDFS geleert wird. Der Standardwert ist 100.
rollsize- Dies ist die Dateigröße, um eine Rolle auszulösen. Der Standardwert ist 100.
rollCount- Dies ist die Anzahl der Ereignisse, die in die Datei geschrieben wurden, bevor sie gerollt werden. Der Standardwert ist 10.
Beispiel - Konfigurationsdatei
Im Folgenden finden Sie ein Beispiel für die Konfigurationsdatei. Kopieren Sie diesen Inhalt und speichern Sie ihn untertwitter.conf im conf-Ordner von Flume.
# 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
Ausführung
Durchsuchen Sie das Flume-Ausgangsverzeichnis und führen Sie die Anwendung wie unten gezeigt aus.
$ cd $FLUME_HOME
$ bin/flume-ng agent --conf ./conf/ -f conf/twitter.conf
Dflume.root.logger=DEBUG,console -n TwitterAgent
Wenn alles gut geht, wird das Streaming von Tweets in HDFS gestartet. Unten sehen Sie die Momentaufnahme des Eingabeaufforderungsfensters beim Abrufen von Tweets.
HDFS überprüfen
Sie können über die unten angegebene URL auf die Hadoop Administration Web-Benutzeroberfläche zugreifen.
http://localhost:50070/
Klicken Sie auf das Dropdown-Menü Utilitiesauf der rechten Seite der Seite. Sie können zwei Optionen sehen, wie im folgenden Schnappschuss gezeigt.
Klicke auf Browse the file systemund geben Sie den Pfad des HDFS-Verzeichnisses ein, in dem Sie die Tweets gespeichert haben. In unserem Beispiel wird der Pfad sein/user/Hadoop/twitter_data/. Anschließend sehen Sie die Liste der in HDFS gespeicherten Twitter-Protokolldateien wie unten angegeben.