Arquitectura, Despliegue y Configuración de Apache Flume en Entornos Hadoop

Organización del Código Fuante y Módulos Principales

El ecosistema de Apache Flume se distribuye en múltiples módulos Maven que encapsulan funcionalidades específicas para la ingesta de datos. A continuación, se detalla la distribución interna del repositorio:

apache-flume-source/
├── flume-ng-core/        # Lógica central y abstracciones del framework
├── flume-ng-channels/    # Implementaciones de canales (Memory, JDBC, File)
├── flume-ng-sources/     # Conectores de entrada (Avro, Spooling, Kafka)
├── flume-ng-sinks/       # Conectores de salida (HDFS, Hive, Elasticsearch)
├── flume-ng-node/        # Punto de entrada y gestión del ciclo de vida del agente
├── flume-ng-sdk/         # API para clientes externos
├── flume-ng-auth/        # Mecanismos de seguridad y autenticación
├── flume-ng-clients/     # Utilidades de conexión para productores
├── flume-ng-tests/       # Suite de pruebas de integración
├── flume-tools/          # Scripts y utilidades auxiliares
├── flume-ng-doc/         # Documentación técnica y manuales
├── pom.xml               # Descriptor raíz de Maven
└── README.md             # Instrucciones generales del proyecto

Ejecución del Agente y Parámetros de Inicio

El núcleo de ejecución reside en el módulo flume-ng-node, específicamente en la clase org.apache.flume.node.Application. Para instanciar un agente, se utiliza el script wrapper proporcionado en el directorio binario.

Ejemplo de comando de arranque para un agente de ingesta:

bin/flume-ng agent \
  --conf ./config \
  --conf-file ./config/hdfs_ingestion.conf \
  --name ingestor_node \
  -Dflume.root.logger=DEBUG,console \
  -Dflume.monitoring.type=http \
  -Dflume.monitoring.port=34545

  • agent: Indica al script que debe iniciar un proceso de agente Flume.
  • --conf: Directorio base que contiene los archivos de entorno y topología.
  • --conf-file: Ruta exacta al archivo de propiedades que define el flujo de datos.
  • --name: Idantificador único del agente que debe coincidir con el prefijo en el archivo de configuración.
  • -Dflume.root.logger: Directiva JVM para conrtolar la verbosidad y el destino de los logs.

Definición de Topologías y Entorno de Ejecución

La configuración se divide en la definición del flujo de eventos y las variables de entorno del sistema. Estos archivos suelen alojarse en el directorio conf/.

Topología de Flujo (hdfs_ingestion.conf)

En este ejemplo, se configura un flujo que lee archivos desde un directorio local y los persiste en un clúster HDFS, utilizando un canal en memoria para el buffer intermedio.

# Declaración de componentes del agente 'ingestor_node'
ingestor_node.sources = spool_source
ingestor_node.sinks = hdfs_sink
ingestor_node.channels = mem_buffer

# Configuración del origen (Spooling Directory)
ingestor_node.sources.spool_source.type = spooldir
ingestor_node.sources.spool_source.spoolDir = /var/data/incoming
ingestor_node.sources.spool_source.fileHeader = true

# Configuración del canal (Memoria)
ingestor_node.channels.mem_buffer.type = memory
ingestor_node.channels.mem_buffer.capacity = 5000
ingestor_node.channels.mem_buffer.transactionCapacity = 500

# Configuración del destino (HDFS)
ingestor_node.sinks.hdfs_sink.type = hdfs
ingestor_node.sinks.hdfs_sink.hdfs.path = hdfs://namenode:8020/flume/events/%y-%m-%d/
ingestor_node.sinks.hdfs_sink.hdfs.filePrefix = logs-
ingestor_node.sinks.hdfs_sink.hdfs.rollInterval = 3600
ingestor_node.sinks.hdfs_sink.hdfs.rollSize = 134217728

# Enlace de componentes
ingestor_node.sources.spool_source.channels = mem_buffer
ingestor_node.sinks.hdfs_sink.channel = mem_buffer

Variables de Entorno (flume-env.sh)

Este script bash permite inyectar variables de entorno y ajustar los parámetros de la máquina virtual Java antes de que el proceso inicie.

# Ubicación del JDK
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

# Ajustes de memoria y recolección de basura para la JVM
export JAVA_OPTS="-Xms1024m -Xmx2048m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"

# Inclusión de librerías externas (ej. conectores JDBC o clientes HDFS específicos)
export FLUME_CLASSPATH="/opt/flume/custom_libs/*:/etc/hadoop/conf"

Etiquetas: Apache Flume Hadoop HDFS Ingesta de Datos java

Publicado el 6-10 08:35