Tutorial de Apache Flume: ¿Qué es? ArchiEjemplo de tecnología y Hadoop

¿Qué es Apache Flume en Hadoop?

Canal Apache es un sistema confiable y distribuido para recopilar, agregar y mover cantidades masivas de datos de registro. Tiene una arquitectura simple pero flexible basada en flujos de datos en tiempo real. Apache Flume se utiliza para recopilar datos de registro presentes en archivos de registro de servidores web y agregarlos en HDFS para su análisis.

Flume en Hadoop admite múltiples fuentes como:

  • 'tail' (que canaliza datos desde un archivo local y los escribe en HDFS a través de Flume, similar al comando 'tail' de Unix)
  • Registros del sistema
  • apache log4j (permitir Java aplicaciones para escribir eventos en archivos en HDFS a través de Flume).

Canal de flujo Architectura

A agente de canal es un JVM proceso que tiene 3 componentes –fuente de canal, Canal de canal y Fregadero de canal– a través del cual se propagan los eventos después de iniciados en una fuente externa.

Canal de flujo Architectura
Canal de flujo Architectura
  1. En el diagrama anterior, Flume Data Source consume los eventos generados por una fuente externa (WebServer). La fuente externa envía eventos a la fuente Flume en un formato reconocido por la fuente de destino.
  2. Flume Source recibe un evento y lo almacena en uno o más canales. El canal actúa como un almacén que guarda el evento hasta que es consumido por el sumidero del canal. Este canal puede utilizar un sistema de archivos local para almacenar estos eventos.
  3. Flume Sink elimina el evento de un canal y lo almacena en un repositorio externo como, por ejemplo, HDFS. Podría haber múltiples agentes de canal, en cuyo caso el sumidero de canal reenvía el evento a la fuente de canal del siguiente agente de canal en el flujo.

Algunas características importantes de FLUME

  • Flume tiene un diseño flexible basado en flujos de datos en streaming. Es tolerante a fallas y robusto con múltiples mecanismos de recuperación y conmutación por error. Flume Big data tiene diferentes niveles de confiabilidad para ofrecer, que incluyen 'entrega con el mejor esfuerzo' y una 'entrega de extremo a extremo'. Entrega de mejores esfuerzos no tolera ninguna falla del nodo Flume mientras que 'entrega de extremo a extremo' El modo garantiza la entrega incluso en caso de fallas de múltiples nodos.
  • Flume transporta datos entre fuentes y sumideros. Esta recopilación de datos puede programarse o estar impulsada por eventos. Flume tiene su propio motor de procesamiento de consultas que facilita la transformación de cada nuevo lote de datos antes de trasladarlo al sumidero previsto.
  • Posibles Fregaderos de canal incluir HDFS y HBaseFlume Hadoop también se puede utilizar para transportar datos de eventos, incluidos, entre otros, datos de tráfico de red, datos generados por sitios web de redes sociales y mensajes de correo electrónico.

Configuración de canal, biblioteca y código fuente

Antes de comenzar con el proceso real, asegúrese de tener Hadoop instalado. Cambie el usuario a 'hduser' (id utilizado durante la configuración de Hadoop, puede cambiar al ID de usuario utilizado durante la configuración de Hadoop)

Configuración de canal, biblioteca y código fuente

Paso 1) Crea un nuevo directorio con el nombre 'FlumeTutorial'

sudo mkdir FlumeTutorial
  1. Dar permisos de lectura, escritura y ejecución.
    sudo chmod -R 777 FlumeTutorial
  2. Copiar archivos MiTwitterSource.java y MiTwitterSourceForFlume.java en este directorio.

Descargue archivos de entrada desde aquí

Verifique los permisos de archivo de todos estos archivos y, si faltan permisos de "lectura", conceda los mismos.

Configuración de canal, biblioteca y código fuente

Paso 2) Descargue 'Apache Flume' de un sitio. https://flume.apache.org/download.html

En este tutorial de Flume se ha utilizado Apache Flume 1.4.0.

Configuración de canal, biblioteca y código fuente

Siguiente clic

Configuración de canal, biblioteca y código fuente

Paso 3) Copie el archivo tar descargado en el directorio que elija y extraiga el contenido utilizando el siguiente comando

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

Configuración de canal, biblioteca y código fuente

Este comando creará un nuevo directorio llamado apache-flume-1.4.0-bin y extraer archivos en él. Este directorio se denominará en el resto del artículo.

Paso 4) Configuración de la biblioteca Flume

Copiar 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 a

/lib/

Es posible que uno o todos los JAR copiados tengan que ejecutar permiso. Esto puede causar un problema con la compilación del código. Por lo tanto, revoque el permiso de ejecución en dicho JAR.

En mi caso, los episodios de twitter4j-core-4.0.1.jar era tener que ejecutar el permiso. Lo revoqué como se muestra a continuación.

sudo chmod -x twitter4j-core-4.0.1.jar

Configuración de canal, biblioteca y código fuente

Después de que este comando otorga permiso de "lectura" twitter4j-core-4.0.1.jar a todos.

sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar

Tenga en cuenta que lo he descargado.

– twitter4j-core-4.0.1.jar desde https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core

Todos los frascos con llamas, es decir, canal-ng-*-1.4.0.jar desde http://mvnrepository.com/artifact/org.apache.flume

Cargar datos de Twitter usando Flume

Paso 1) Vaya al directorio que contiene los archivos de código fuente.

Paso 2) Set RUTA DE CLASE para contener /lib/* y ~/FlumeTutorial/flume/mytwittersource/*

export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"

Cargar datos de Twitter usando Flume

Paso 3) Compile el código fuente usando el comando-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Cargar datos de Twitter usando Flume

Paso 4)crear un frasco

Primero, crea Manifiesto.txt archivo usando un editor de texto de su elección y agregue la siguiente línea en él:

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

.. aquí flume.mytwittersource.MyTwitterSourceForFlume es el nombre de la clase principal. Tenga en cuenta que debe presionar la tecla Intro al final de esta línea.

Cargar datos de Twitter usando Flume

Ahora, crea JAR 'MiTwitterSourceForFlume.jar’ como-

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

Cargar datos de Twitter usando Flume

Paso 5) Copia este frasco a /lib/

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

Cargar datos de Twitter usando Flume

Paso 6) Vaya al directorio de configuración de Flume, /conf

Si flume.conf no existe, copie flume-conf.properties.template y cámbiele el nombre a flume.conf.

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

Cargar datos de Twitter usando Flume

If canal-env.sh no existe entonces copia plantilla-env.sh.flume y renómbralo a canal-env.sh

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

Cargar datos de Twitter usando Flume

Creando una aplicación de Twitter

Paso 1) Cree una aplicación de Twitter iniciando sesión en https://developer.twitter.com/

Creando una aplicación de Twitter

Creando una aplicación de Twitter

Paso 2) Vaya a 'Mis aplicaciónes' (Esta opción se despliega cuando 'Huevo' se hace clic en el botón en la esquina superior derecha)

Creando una aplicación de Twitter

Paso 3) Cree una nueva aplicación haciendo clic 'Crear nueva aplicación'

Paso 4) Complete los datos de la solicitud especificando el nombre de la misma, la descripción y el sitio web. Puede consultar las notas que se encuentran debajo de cada cuadro de entrada.

Creando una aplicación de Twitter

Paso 5) Desplácese hacia abajo en la página y acepte los términos marcando 'Sí estoy de acuerdo' y haga clic en el botón'Crea tu aplicación de Twitter'

Creando una aplicación de Twitter

Paso 6) En la ventana de una aplicación recién creada, vaya a la pestaña, 'Claves API' desplácese hacia abajo en la página y haga clic en el botón 'Crear mi token de acceso'

Creando una aplicación de Twitter

Creando una aplicación de Twitter

Paso 7) Recarga la página.

Paso 8) Haga clic en 'Prueba OAuth'. Esto mostrará 'OAuth' configuración de la aplicación.

Creando una aplicación de Twitter

Paso 9) modificar 'flume.conf' usando estos Configuración de OAuth. Pasos para modificar 'flume.conf' se dan a continuación.

Creando una aplicación de Twitter

Necesitamos copiar la clave del consumidor, el secreto del consumidor, el token de acceso y el secreto del token de acceso para actualizar 'flume.conf'.

Nota: Estos valores pertenecen al usuario y, por lo tanto, son confidenciales, por lo que no deben compartirse.

Modificar el archivo 'flume.conf'

Paso 1) Abierto 'flume.conf' en modo de escritura y establezca valores para los siguientes parámetros:

sudo gedit flume.conf

Copie el contenido a continuación-

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

Modificar el archivo 'Flume.conf'

Paso 2) Además, establezca TwitterAgent.sinks.HDFS.hdfs.ruta como a continuación,

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

Modificar el archivo 'Flume.conf'

Saber , y , ver valor del parámetro 'fs.defaultFS' establecer en $HADOOP_HOME/etc/hadoop/core-site.xml

Modificar el archivo 'Flume.conf'

Paso 3) Para descargar los datos a HDFS, cuando lleguen, elimine la siguiente entrada si existe,

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

Ejemplo: transmisión de datos de Twitter usando Flume

Paso 1) Abierto 'flume-env.sh' en modo de escritura y establezca valores para los siguientes parámetros,

JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"

Transmisión de datos de Twitter usando Flume

Paso 2) Iniciar Hadoop

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Paso 3) Dos de los archivos JAR del tarball de Flume no son compatibles con Hadoop 2.2.0. Por lo tanto, tendremos que seguir los pasos a continuación en este ejemplo de Apache Flume para que Flume sea compatible con Hadoop 2.2.0.

a. Moverse protobuf-java-2.4.1.jar de '/lib'.

Vaya a ‘/lib’

cd /lib

sudo mv protobuf-java-2.4.1.jar ~/

Transmisión de datos de Twitter usando Flume

b. Busque el archivo JAR 'guayaba' como se muestra a continuación

find . -name "guava*"

Transmisión de datos de Twitter usando Flume

Moverse guayaba-10.0.1.jar de '/lib'.

sudo mv guava-10.0.1.jar ~/

Transmisión de datos de Twitter usando Flume

c. Descargar guayaba-17.0.jar desde http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Transmisión de datos de Twitter usando Flume

Ahora, copie este archivo jar descargado a ‘/lib’

Paso 4) Vaya a ‘/bin’ e iniciar Flume como-

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

Transmisión de datos de Twitter usando Flume

Ventana del símbolo del sistema donde Flume busca tweets.

Transmisión de datos de Twitter usando Flume

Desde el mensaje de la ventana de comando podemos ver que la salida está escrita en /usuario/hduser/flume/tweets/ directorio.

Ahora, abra este directorio usando un navegador web.

Paso 5) Para ver el resultado de la carga de datos, utilizando un navegador abierto http://localhost:50070/ y explore el sistema de archivos, luego vaya al directorio donde se cargaron los datos, es decir:

/flume/tweets/

Transmisión de datos de Twitter usando Flume