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.

- 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.
- 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.
- 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)
Paso 1) Crea un nuevo directorio con el nombre 'FlumeTutorial'
sudo mkdir FlumeTutorial
- Dar permisos de lectura, escritura y ejecución.
sudo chmod -R 777 FlumeTutorial
- 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.
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.
Siguiente clic
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
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
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/*"
Paso 3) Compile el código fuente usando el comando-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
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.
Ahora, crea JAR 'MiTwitterSourceForFlume.jar’ como-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Paso 5) Copia este frasco a /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
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
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
Creando una aplicación de Twitter
Paso 1) Cree una aplicación de Twitter iniciando sesión en https://developer.twitter.com/
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)
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.
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'
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'
Paso 7) Recarga la página.
Paso 8) Haga clic en 'Prueba OAuth'. Esto mostrará 'OAuth' configuración de la aplicación.
Paso 9) modificar 'flume.conf' usando estos Configuración de OAuth. Pasos para modificar 'flume.conf' se dan a continuación.
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
Paso 2) Además, establezca TwitterAgent.sinks.HDFS.hdfs.ruta como a continuación,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs://://flume/tweets/
Saber , y , ver valor del parámetro 'fs.defaultFS' establecer en $HADOOP_HOME/etc/hadoop/core-site.xml
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"
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 ~/
b. Busque el archivo JAR 'guayaba' como se muestra a continuación
find . -name "guava*"
Moverse guayaba-10.0.1.jar de '/lib'.
sudo mv guava-10.0.1.jar ~/
c. Descargar guayaba-17.0.jar desde http://mvnrepository.com/artifact/com.google.guava/guava/17.0
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
Ventana del símbolo del sistema donde Flume busca tweets.
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/