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.