compression - mundo - mapreduce java
Pregunta muy básica sobre Hadoop y archivos de entrada comprimidos (4)
Considere usar la compresión LZO. Es divisible. Eso significa que un gran archivo .lzo puede ser procesado por muchos mapeadores. Bzip2 puede hacer eso, pero es lento.
Cloudera tuvo una introducción al respecto. Para MapReduce, LZO suena un buen equilibrio entre la relación de compresión y la velocidad de compresión / descompresión.
Empecé a mirar a Hadoop. Si mi entendimiento es correcto, podría procesar un archivo muy grande y se dividiría entre diferentes nodos; sin embargo, si el archivo está comprimido, entonces el archivo no se podría dividir y debería procesarse por un solo nodo (lo que efectivamente destruiría la ventaja de ejecutando un mapreduce ver un cluster de máquinas paralelas).
Mi pregunta es, suponiendo que lo anterior sea correcto, ¿es posible dividir un archivo grande manualmente en trozos de tamaño fijo o trozos diarios, comprimirlos y luego pasar una lista de archivos de entrada comprimidos para realizar un mapreduce?
Puede usar bz2 como su códec de compresión, y este formato también se puede dividir.
sí, podría tener un archivo comprimido grande o varios archivos comprimidos (varios archivos especificados con -files o la API).
TextInputFormat y sus descendientes deberían manejar automáticamente los archivos comprimidos .gz. también puede implementar su propio InputFormat (que dividirá el archivo de entrada en fragmentos para su procesamiento) y RecordReader (que extrae un registro a la vez del fragmento)
otra alternativa para copmression genérica podría ser utilizar un sistema de archivos comprimido (como ext3 con el parche de compresión, zfs, compFUSEd o FuseCompress ...)
BZIP2 es divisible en hadoop - proporciona una muy buena relación de compresión, pero a partir del tiempo de CPU y el rendimiento no se obtienen resultados óptimos, ya que la compresión consume mucha CPU.
LZO es divisible en hadoop, aprovechando hadoop-lzo tiene archivos LZO comprimibles y divisibles. Necesita tener archivos .lzo.index externos para poder procesar en paralelo. La biblioteca proporciona todos los medios para generar estos índices en forma local o distribuida.
LZ4 es divisible en hadoop, aprovechando hadoop-4mc tiene archivos de 4mc comprimibles y divisibles. No necesita ninguna indexación externa, y puede generar archivos con la herramienta de línea de comandos proporcionada o con el código Java / C, dentro / fuera de hadoop. 4mc está disponible en hadoop LZ4 en cualquier nivel de relación velocidad / compresión: desde el modo rápido que alcanza una velocidad de compresión de 500 MB / s hasta modos alto / ultra que proporciona una mayor relación de compresión, casi comparable con GZIP one.