Tutorial de Apache Flume: ¿Qué es? ArchiEjemplo de tecnología y Hadoop
⚡ Resumen inteligente
Apache Flume es un servicio distribuido para recopilar, agregar y transferir grandes volúmenes de datos de registro a HDFS, construido en torno a agentes que encadenan una fuente, un canal y un destino.
¿Qué es Apache Flume en Hadoop?
Apache Flume es un sistema confiable y distribuido para recopilar, agregar y mover grandes cantidades 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 analizar.
Flume en Hadoop admite múltiples fuentes, entre ellas:
- 'tail' (que envía datos desde un archivo local y los escribe en HDFS a través de Flume, de forma similar al comando 'tail' de Unix).
- Registros del sistema
- apache log4j (lo que permite Java aplicaciones para escribir eventos en archivos en HDFS a través de Flume).
La versión actual es Flume 1.11.0, publicado el 25 de octubre de 2022 y disponible en el Página de descarga de Apache FlumeEste tutorial se elaboró para la versión 1.4.0, por lo que varios pasos a continuación incluyen una nota donde se indica que la versión actual se comporta de manera diferente.
Canal de flujo Architectura
Un agente Flume es un JVM Proceso con tres componentes: fuente Flume, canal Flume y sumidero Flume, a través de los cuales se propagan los eventos tras iniciarse en una fuente externa. El siguiente diagrama muestra cómo se conectan.
- Los eventos generados por la fuente externa (un servidor web) son procesados por la fuente Flume. La fuente externa envía eventos a la fuente Flume en un formato que la fuente de destino reconoce.
- La fuente de Flume 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 el receptor de Flume lo consume. Este canal puede usar un sistema de archivos local para almacenar dichos eventos.
- El receptor de Flume elimina el evento de un canal y lo almacena en un repositorio externo, como HDFS. Puede haber varios agentes de Flume; en ese caso, el receptor de Flume reenvía el evento al origen de Flume del siguiente agente en el flujo.
Algunas características importantes de Flume
- Flume tiene un diseño flexible basado en flujos de datos en tiempo real. Es tolerante a fallos y robusto, con múltiples mecanismos de conmutación por error y recuperación. Flume ofrece diferentes niveles de fiabilidad, incluyendo: 'entrega con el mejor esfuerzo' y 'entrega de extremo a extremo'. Entrega de mejores esfuerzos no tolera ningún fallo del nodo Flume, mientras que entrega de principio a fin Garantiza la entrega incluso en caso de fallos en varios nodos.
- Flume transfiere datos entre fuentes y destinos. Esta recopilación de datos puede programarse o activarse por eventos. Flume cuenta con su propio motor de procesamiento de consultas, lo que facilita la transformación de cada nuevo lote de datos antes de su transferencia al destino previsto.
- Posibles Fregaderos de canal incluir HDFS y HBaseFlume también puede transportar datos de eventos, como 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 propiamente dicho, asegúrese de tener Hadoop instalado; de lo contrario, trabaje a través de Cómo instalar Hadoop Primero, cambie el usuario a 'hduser' (el ID utilizado al configurar Hadoop; puede cambiar al ID de usuario utilizado durante su propia configuración de Hadoop).
Paso 1) Crea un nuevo directorio con el nombre 'FlumeTutorial'.
sudo mkdir FlumeTutorial
- Otorgar permisos de lectura, escritura y ejecución.
sudo chmod -R 777 FlumeTutorial
- Copiar los archivos MiTwitterSource.java y MiTwitterSourceForFlume.java en este directorio.
Descargue archivos de entrada desde aquí
Compruebe los permisos de todos estos archivos, como se indica a continuación, y otorgue el permiso de "lectura" si no lo tiene.
Paso 2) Descarga 'Apache Flume' desde https://flume.apache.org/download.html.
En este tutorial de Flume se ha utilizado Apache Flume 1.4.0.
A continuación, haz clic para acceder a un espejo.
Paso 3) Copie el archivo tarball descargado en el directorio que prefiera y expulsetract el contenido usando el siguiente comando.
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Esto crea un nuevo directorio llamado apache-flume-1.4.0-bin y extracts los archivos en él. Ese directorio se denomina en el resto del artículo.
Paso 4) Configuración de la biblioteca Flume. Copie twitter4j-core-4.0.1.jar, flume-ng-configuration-1.4.0.jar, flume-ng-core-1.4.0.jar y flume-ng-sdk-1.4.0.jar a
/lib/
Es posible que uno o todos los archivos JAR copiados tengan permisos de ejecución, lo que puede causar problemas con la compilación del código; por lo tanto, revoque dichos permisos. En mi caso, twitter4j-core-4.0.1.jar tenía permisos de ejecución. Los revoqué como se indica a continuación.
sudo chmod -x twitter4j-core-4.0.1.jar
Después de esto, el comando a continuación otorga permiso de 'lectura' en 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 descargué twitter4j-core-4.0.1.jar de Repositorio Maveny todos los JAR de Flume, es decir, flume-ng-*-1.4.0.jar, desde los artefactos org.apache.flume.
Cargar datos de Twitter usando Flume
Paso 1) Dirígete al directorio que contiene los archivos de código fuente.
Paso 2) Establezca CLASSPATH 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 utilizando el siguiente comando.
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Paso 4) Crea un archivo JAR. Primero, crea un archivo Manifest.txt usando un editor de texto de tu elección y agrega la siguiente línea.
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
Aquí, flume.mytwittersource.MyTwitterSourceForFlume es el nombre de la clase principal. Tenga en cuenta que debe presionar la tecla Enter al final de esta línea, como se muestra a continuación.
Ahora, cree el archivo JAR 'MyTwitterSourceForFlume.jar' de la siguiente manera.
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Paso 5) Copie este JAR a /lib/.
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
Paso 6) Ve al directorio de configuración de Flume, /conf.
Si no existe el archivo flume.conf, copie el archivo flume-conf.properties.template y cámbiele el nombre a flume.conf.
sudo cp flume-conf.properties.template flume.conf
Si flume-env.sh no existe, copie flume-env.sh.template y cámbiele el nombre a flume-env.sh.
sudo cp flume-env.sh.template flume-env.sh
Creando una aplicación de Twitter
Lee esto primero. Transmisión v1.1 statuses/filter El punto final que necesita twitter4j 4.0.1 se retiró el 9 de marzo de 2023, y el flujo filtrado de la API v2 que lo reemplazó, ahora en desarrollador.x.com, se encuentra detrás de un nivel de pago. Considere las pantallas a continuación como un patrón de fuente personalizada, luego dirija el mismo agente a un archivo, ejecutable o fuente Kafka.
Paso 1) Crea una aplicación de Twitter iniciando sesión en el portal para desarrolladores.
Paso 2) Ve a 'Mis aplicaciones' (esta opción se despliega al hacer clic en el botón 'Huevo' en la esquina superior derecha).
Paso 3) Crea una nueva aplicación haciendo clic en 'Crear nueva aplicación'.
Paso 4) Complete los datos de la solicitud indicando el nombre, una descripción y la dirección del sitio web. Puede consultar las notas que aparecen debajo de cada campo.
Paso 5) Desplázate hacia abajo en la página, acepta los términos marcando "Sí, acepto" y haz clic en el botón "Crea tu aplicación de Twitter".
Paso 6) En la ventana de la aplicación recién creada, diríjase a la pestaña "Claves de API", desplácese hacia abajo y haga clic en el botón "Crear mi token de acceso".
Paso 7) Recarga la página.
Paso 8) Haz clic en 'Probar OAuth'. Esto mostrará la configuración de 'OAuth' de la aplicación.
Paso 9) Modifique el archivo 'flume.conf' utilizando esta configuración de OAuth. Los pasos para modificar 'flume.conf' se detallan a continuación.
Necesitamos copiar la clave de consumidor, el secreto de 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, así que no deben compartirse.
Modificar el archivo 'flume.conf'
Paso 1) Abra el archivo 'flume.conf' en modo de escritura y configure los valores para los parámetros que se indican a continuación.
sudo gedit flume.conf
Copia el contenido que aparece 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, configure TwitterAgent.sinks.HDFS.hdfs.path como se indica a continuación.
TwitterAgent.sinks.HDFS.hdfs.path = hdfs://://flume/tweets/
Para encontrar , y Consulte el valor del parámetro 'fs.defaultFS' establecido en $HADOOP_HOME/etc/hadoop/core-site.xml, que se muestra a continuación.
Paso 3) Para volcar los datos a HDFS a medida que lleguen, elimine la entrada que aparece a continuación, si existe.
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
Ejemplo: transmisión de datos de Twitter usando Flume
Paso 1) Abra el archivo 'flume-env.sh' en modo de escritura y configure los valores para los parámetros que se indican a continuación.
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 que en este ejemplo de Apache Flume seguimos los pasos que se indican a continuación para que Flume sea compatible con Hadoop 2.2.0. Este cambio de JAR es una corrección de la era 1.4.0; Flume 1.11.0 ya incluye compilaciones actuales de protobuf y Guava, por lo que un tarball moderno normalmente no necesita nada de eso.
a. Mover protobuf-java-2.4.1.jar fuera de ' /lib'. Ve primero a ese directorio.
cd /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Busque el archivo JAR 'guava' como se muestra a continuación.
find . -name "guava*"
Mueva guava-10.0.1.jar fuera de ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Descargue guava-17.0.jar desde Repositorio Maven, mostrado a continuación.
Ahora, copie este archivo JAR descargado a ' /lib'.
Paso 4) Ir a ' /bin' y comience Flume de la siguiente manera.
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
La ventana del símbolo del sistema donde Flume obtiene los tweets se ve así.
En el mensaje de la ventana de comandos podemos ver que la salida se escribe en el directorio /user/hduser/flume/tweets/. Ahora, abre este directorio con un navegador web.
Paso 5) Para ver el resultado de la carga de datos, abra http://localhost:50070/ en un navegador, explore el sistema de archivos y luego vaya al directorio donde se han cargado los datos, es decir
/flume/tweets/
El puerto 50070 es la interfaz web de NameNode en Hadoop 2; Hadoop 3 trasladó la misma página al puerto 9870.
Flume es la mitad de la ingestión: sqoop importa tablas en lotes, Flume transmite eventos, luego Cerdo or Colmena dar forma a los archivos y oozie programa la cadena. Ver también herramientas de análisis de grandes datos, Uniones y contadores de MapReduce y Talend.


































