Red de conocimiento informático - Problemas con los teléfonos móviles - Spark procesa archivos pequeños

Spark procesa archivos pequeños

Tanto Hive como Spark SQL pueden encontrar el problema de tener demasiados archivos pequeños durante el uso. La manifestación más directa de demasiados archivos pequeños es que el tiempo de ejecución de la tarea es demasiado largo. Si consulta el registro de Spark, encontrará una gran cantidad de registros de movimiento de datos. Podemos ver la información de registro presentada en el registro e ingresar la ruta correspondiente para ver el tamaño y la cantidad de archivos.

Con el comando anterior, puedes ver la cantidad de archivos y su tamaño. count analiza el tamaño del archivo en B, que debe convertirse a MB.

En el documento oficial de recomendación de Spark, el tamaño recomendado para los archivos en formato parquet es 128 MB. Los archivos más pequeños que este tamaño pueden denominarse archivos pequeños, generalmente de varios kilobytes, y pueden expresarse como archivos pequeños. En el trabajo real, el tamaño de los archivos pequeños suele ser de sólo unos pocos kilobytes, lo que significa que el tamaño del archivo puede ser de sólo unos pocos cientos de MB, pero la cantidad de archivos puede llegar a cientos de miles. En términos generales, podemos obtener el tamaño promedio de los archivos mediante una división simple. Si la cantidad de archivos no es grande, también podemos obtener el tamaño de cada archivo mediante el siguiente comando.

1. El tiempo de ejecución de la tarea es largo

2. El tamaño real del archivo ocupa un bloque de almacenamiento de datos, que se almacena en el nodo DataNode. Al mismo tiempo, DataNode suele almacenar tres copias de forma predeterminada para garantizar la seguridad de los datos. Al mismo tiempo, la ubicación de almacenamiento del archivo también se escribirá en la memoria del NameNode. Si hay un nodo de alta disponibilidad del NameNode secundario, también se puede copiar al mismo tiempo. Los datos de la memoria de NameNode se almacenarán en el disco duro. Si HDFS se reinicia, se generarán metadatos largos en el proceso de lectura de la memoria del disco duro.

3. Ya sea en Hive o Spark, cada bloque de almacenamiento corresponde a un programa de mapas. La representación de mapas requiere una JVM, e iniciar la JVM para leer o escribir archivos pequeños es una tarea ingrata. En la producción real, para administrar mejor los recursos del clúster, generalmente es necesario limitar la cantidad de Ejecutores y la cantidad de núcleos para cada Ejecutor durante la ejecución del programa, y ​​es necesario crear Ejecutores con frecuencia para lectura y escritura.

5. Impacto en el tiempo de búsqueda del disco

La combinación de archivos pequeños consiste esencialmente en fusionar una serie de archivos pequeños en un archivo grande mediante alguna operación. Sabemos que los sistemas de big data representados por MapReduce están acostumbrados a procesar archivos en forma de pares clave-valor K-V. Cuando el archivo final se descarta del disco, una reducción corresponde a un archivo de salida. Entonces, intuitivamente, podemos reducir la cantidad de archivos reduciendo la cantidad de reducción.

Pasar de Map a Reduce requiere un proceso Shuffle, por lo que entendemos fusionar archivos pequeños como fusionar archivos pequeños en un archivo grande a través de Shuffle. Con base en esta idea, nuestras estrategias se pueden dividir en dos categorías: una es que el cálculo original ya tiene Shuffle, por lo que podemos considerar controlar la cantidad de archivos de salida; la segunda es forzar la activación de Shuffle para la fusión de archivos pequeños;

1-Establecer parámetros (generalmente utilizados en Hive)

2-Distribuir mediante rand()

Al insertar datos en una partición dinámica, después de que se haya escrito Good SQL agrega distribuir al final. rand()

Este cálculo solo tiene el efecto de dividir, pero también debemos establecer el tamaño del archivo para que no siga siendo un archivo pequeño después de la división.

Para cada tamaño de reducción, Hive puede sumar los datos y obtener el número de reducciones. Suponiendo que Hive cree que habrá 10 reducciones, entonces rand() aquí será x % 10

p>

3-group by

Sabemos que el operador group by activará el operador Shuffle by.

El operador agrupar por activa Shuffle, por lo que siempre que establezcamos la cantidad de archivos para Shuffle, en Spark SQL, podemos configurar la cantidad de particiones porque una partición corresponde a un archivo.

Con la operación anterior, activamos Shuffle, por lo que configuramos nuevamente el número de particiones.

Esto significa que después de la mezcla, solo se generarán 10 particiones.

4-repartition()

5-coalesce()

Tenga en cuenta que tanto 4 como 5 son parte de la mezcla.