Configuración de compresión LZO en Hadoop y caso práctico de recolección con Flume

Para habilitar la compresión LZO en Hadoop, es necesario utilizar el componente open-source hadoop-lzo desarrollado por Twitter, ya que Hadoop no lo incluye de manera nativa. El proceso implica compilar hadoop-lzo con dependencias en Hadoop y LZO, seguido de configuraciones específicas en el clúster y herramientas asociadas como Hive y Flume.

Configuración de Hadoop para compresión LZO

Primero, compile el JAR de hadoop-lzo y colóquelo en el directorio de bibliotecas comunes de Hadoop. Por ejemplo, en la ruta /opt/hadoop-3.2.1/share/hadoop/common/.

[user@node1 common]$ ls
hadoop-lzo-0.4.20.jar

Sincronice el JAR a todos los nodos del clúster utilizando herramientas como rsync o scripts personalizados.

[user@node1 common]$ rsync hadoop-lzo-0.4.20.jar node2:/opt/hadoop-3.2.1/share/hadoop/common/

Modifique el archivo core-site.xml para incluir los códecs de compresión LZO. Añada los siguientes parámetros:

<configuration>
  <property>
    <name>io.compression.codecs</name>
    <value>
      org.apache.hadoop.io.compress.GzipCodec,
      org.apache.hadoop.io.compress.DefaultCodec,
      com.hadoop.compression.lzo.LzoCodec,
      com.hadoop.compression.lzo.LzopCodec
    </value>
  </property>
  <property>
    <name>io.compression.codec.lzo.class</name>
    <value>com.hadoop.compression.lzo.LzoCodec</value>
  </property>
</configuration>

Sincronice la configuración actualizada a los demás nodos e inicie los servicios de HDFS y YARN.

[user@node1 hadoop]$ start-dfs.sh
[user@node1 hadoop]$ start-yarn.sh

Para archivos comprimidos con LZO, es crucial crear índices para permitir la división en fragmentos. Use la herramienta incluida en hadoop-lzo para generar índices. Ejemplo:

hadoop jar /opt/hadoop-3.2.1/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /data/input/compressed/

Integración de compresión LZO con Hive

Configuer Hive para utilizar compresión en salidas intermedias y finales. Edite hive-site.xml con los siguientes parámetros:

<property>
  <name>hive.exec.compress.output</name>
  <value>true</value>
</property>
<property>
  <name>hive.exec.compress.intermediate</name>
  <value>true</value>
</property>

Compatibilidad con Oozie

Para integrar Oozie, asegúrese de que los archivos de configuración de Hive y Hadoop en el clúster estén actualizados para incluir la compresión LZO. Esto garantiza que los workflows de Oozie hereden las configuraciones adecuadas.

Caso práctico: Captura de datos con Flume y compresión LZO

Configure Flume para recolectar datos desde Kafka y almacenarlos en HDFS con compresión LZO. Copie los archivos de configuración de Hadoop al directoroi conf de Flume. Ejemplo de configuración:

# Definir componentes
agent.sources = kafka-src
agent.channels = mem-ch
agent.sinks = hdfs-snk

# Configurar fuente Kafka
agent.sources.kafka-src.type = org.apache.flume.source.kafka.KafkaSource
agent.sources.kafka-src.batchSize = 4000
agent.sources.kafka-src.batchDurationMillis = 2000
agent.sources.kafka-src.kafka.bootstrap.servers = broker1:9092,broker2:9092
agent.sources.kafka-src.kafka.topics = logs-events
agent.sources.kafka-src.kafka.consumer.group.id = flume-consumer-group

# Configurar canal en memoria
agent.channels.mem-ch.type = memory
agent.channels.mem-ch.capacity = 15000
agent.channels.mem-ch.transactionCapacity = 5000

# Configurar sink HDFS con compresión LZO
agent.sinks.hdfs-snk.type = hdfs
agent.sinks.hdfs-snk.hdfs.path = hdfs://namenode:8020/data/logs/ds=%Y-%m-%d/hour=%H/
agent.sinks.hdfs-snk.hdfs.batchSize = 1000
agent.sinks.hdfs-snk.hdfs.codeC = lzop
agent.sinks.hdfs-snk.hdfs.fileType = CompressedStream

# Vincular componentes
agent.sources.kafka-src.channels = mem-ch
agent.sinks.hdfs-snk.channel = mem-ch

Inicie el agente de Flume con el siguiente comando:

nohup flume-ng agent --name agent --conf-file /etc/flume/conf/flume-kafka-hdfs.conf --conf /etc/flume/conf -Dflume.root.logger=INFO,console &

Los datos se almacenarán en HDFS como archivos comprimidos con LZO, lo que facilita su procesamianto posterior en herramientas como Hive o MapReduce.

Etiquetas: Hadoop LZO Flume hive Kafka

Publicado el 6-30 01:58