Apache Flume: obtención de datos de Twitter
Con Flume, podemos obtener datos de varios servicios y transportarlos a tiendas centralizadas (HDFS y HBase). Este capítulo explica cómo obtener datos del servicio de Twitter y almacenarlos en HDFS usando Apache Flume.
Como se explica en Flume Architecture, un servidor web genera datos de registro y estos datos los recopila un agente en Flume. El canal almacena estos datos en un sumidero, que finalmente los envía a las tiendas centralizadas.
En el ejemplo proporcionado en este capítulo, crearemos una aplicación y obtendremos los tweets utilizando la fuente experimental de Twitter proporcionada por Apache Flume. Usaremos el canal de memoria para almacenar estos tweets en búfer y el receptor HDFS para enviar estos tweets al HDFS.
Para obtener datos de Twitter, tendremos que seguir los pasos que se detallan a continuación:
- Crea una aplicación de twitter
- Instalar / iniciar HDFS
- Configurar Flume
Crear una aplicación de Twitter
Para obtener los tweets de Twitter, es necesario crear una aplicación de Twitter. Siga los pasos que se indican a continuación para crear una aplicación de Twitter.
Paso 1
Para crear una aplicación de Twitter, haga clic en el siguiente enlace https://apps.twitter.com/. Inicie sesión en su cuenta de Twitter. Tendrá una ventana de administración de aplicaciones de Twitter donde puede crear, eliminar y administrar aplicaciones de Twitter.
Paso 2
Clickea en el Create New Appbotón. Será redirigido a una ventana donde obtendrá un formulario de solicitud en el que debe completar sus datos para crear la aplicación. Mientras completa la dirección del sitio web, proporcione el patrón de URL completo, por ejemplo,http://example.com.
Paso 3
Complete los datos, acepte el Developer Agreement cuando termine, haga clic en el Create your Twitter application buttonque está en la parte inferior de la página. Si todo va bien, se creará una aplicación con los detalles proporcionados como se muestra a continuación.
Etapa 4
Debajo keys and Access Tokens pestaña en la parte inferior de la página, puede observar un botón llamado Create my access token. Haga clic en él para generar el token de acceso.
Paso 5
Finalmente, haga clic en el Test OAuthbotón que se encuentra en la parte superior derecha de la página. Esto conducirá a una página que muestra suConsumer key, Consumer secret, Access token, y Access token secret. Copie estos detalles. Son útiles para configurar el agente en Flume.
Iniciando HDFS
Dado que estamos almacenando los datos en HDFS, necesitamos instalar / verificar Hadoop. Inicie Hadoop y cree una carpeta en él para almacenar los datos de Flume. Siga los pasos que se indican a continuación antes de configurar Flume.
Paso 1: instalar / verificar Hadoop
Instale Hadoop . Si Hadoop ya está instalado en su sistema, verifique la instalación usando el comando de la versión de Hadoop, como se muestra a continuación.
$ hadoop version
Si su sistema contiene Hadoop, y si ha establecido la variable de ruta, obtendrá el siguiente resultado:
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
Paso 2: iniciar Hadoop
Navegar por el sbin directorio de Hadoop e iniciar yarn y Hadoop dfs (sistema de archivos distribuido) como se muestra a continuación.
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
Paso 3: cree un directorio en HDFS
En Hadoop DFS, puede crear directorios usando el comando mkdir. Navegue a través de él y cree un directorio con el nombretwitter_data en la ruta requerida como se muestra a continuación.
$cd /$Hadoop_Home/bin/
$ hdfs dfs -mkdir hdfs://localhost:9000/user/Hadoop/twitter_data
Configuración de Flume
Tenemos que configurar la fuente, el canal y el receptor usando el archivo de configuración en el confcarpeta. El ejemplo dado en este capítulo utiliza una fuente experimental proporcionada por Apache Flume llamadaTwitter 1% Firehose Canal de memoria y disipador HDFS.
Fuente de Twitter 1% Firehose
Esta fuente es muy experimental. Se conecta al 1% de muestra de Twitter Firehose mediante API de transmisión continua y descarga tweets, los convierte al formato Avro y envía eventos Avro a un receptor Flume descendente.
Obtendremos esta fuente por defecto junto con la instalación de Flume. losjar Los archivos correspondientes a esta fuente se pueden ubicar en el lib carpeta como se muestra a continuación.
Establecer la ruta de clases
Selecciona el classpath variable a la lib carpeta de Flume en Flume-env.sh archivo como se muestra a continuación.
export CLASSPATH=$CLASSPATH:/FLUME_HOME/lib/*
Esta fuente necesita los detalles como Consumer key, Consumer secret, Access token, y Access token secretde una aplicación de Twitter. Al configurar esta fuente, debe proporcionar valores a las siguientes propiedades:
Channels
Source type : org.apache.flume.source.twitter.TwitterSource
consumerKey - La clave de consumidor de OAuth
consumerSecret - Secreto de consumidor de OAuth
accessToken - Token de acceso OAuth
accessTokenSecret - Secreto de token de OAuth
maxBatchSize- Número máximo de mensajes de Twitter que deben estar en un lote de Twitter. El valor predeterminado es 1000 (opcional).
maxBatchDurationMillis- Número máximo de milisegundos a esperar antes de cerrar un lote. El valor predeterminado es 1000 (opcional).
Canal
Estamos usando el canal de memoria. Para configurar el canal de memoria, debe proporcionar valor al tipo de canal.
type- Contiene el tipo de canal. En nuestro ejemplo, el tipo esMemChannel.
Capacity- Es el número máximo de eventos almacenados en el canal. Su valor predeterminado es 100 (opcional).
TransactionCapacity- Es el número máximo de eventos que el canal acepta o envía. Su valor predeterminado es 100 (opcional).
Fregadero HDFS
Este receptor escribe datos en HDFS. Para configurar este receptor, debe proporcionar los siguientes detalles.
Channel
type - hdfs
hdfs.path - la ruta del directorio en HDFS donde se almacenarán los datos.
Y podemos proporcionar algunos valores opcionales basados en el escenario. A continuación se muestran las propiedades opcionales del receptor HDFS que estamos configurando en nuestra aplicación.
fileType - Este es el formato de archivo requerido de nuestro archivo HDFS. SequenceFile, DataStream y CompressedStreamson los tres tipos disponibles con esta secuencia. En nuestro ejemplo, estamos usando elDataStream.
writeFormat - Puede ser texto o escribible.
batchSize- Es el número de eventos escritos en un archivo antes de que se vacíe en el HDFS. Su valor predeterminado es 100.
rollsize- Es el tamaño del archivo para activar un rollo. Su valor predeterminado es 100.
rollCount- Es el número de eventos escritos en el archivo antes de que se transfiera. Su valor predeterminado es 10.
Ejemplo: archivo de configuración
A continuación se muestra un ejemplo del archivo de configuración. Copie este contenido y guárdelo comotwitter.conf en la carpeta conf de 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
Ejecución
Navegue por el directorio de inicio de Flume y ejecute la aplicación como se muestra a continuación.
$ cd $FLUME_HOME
$ bin/flume-ng agent --conf ./conf/ -f conf/twitter.conf
Dflume.root.logger=DEBUG,console -n TwitterAgent
Si todo va bien, comenzará la transmisión de tweets a HDFS. A continuación se muestra la instantánea de la ventana del símbolo del sistema mientras se obtienen tweets.
Verificación de HDFS
Puede acceder a la interfaz de usuario web de administración de Hadoop utilizando la URL que se proporciona a continuación.
http://localhost:50070/
Haga clic en el menú desplegable llamado Utilitiesen el lado derecho de la página. Puede ver dos opciones como se muestra en la instantánea que se muestra a continuación.
Haga clic en Browse the file systeme ingrese la ruta del directorio HDFS donde ha almacenado los tweets. En nuestro ejemplo, el camino será/user/Hadoop/twitter_data/. Luego, puede ver la lista de archivos de registro de Twitter almacenados en HDFS como se indica a continuación.