Estoy corriendo spark job
en un clúster que tiene 2 nodos de trabajo! Estoy utilizando el código de abajo (java chispa) para guardar la trama de datos computarizada como csv a nodos de trabajo.
dataframe.write().option("header","false").mode(SaveMode.Overwrite).csv(outputDirPath);
Estoy tratando de entender cómo chispa escribe múltiples archivos de piezas en cada nodo del trabajador.
Run1) worker1
tiene part files
y SUCCESS
; worker2
tiene _temporarty/task*/part*
cada tarea tiene el archivos de piezas plazo.
Run2) worker1
tiene archivos de piezas y también _temporary
de directorio; worker2
tienemultiple part files
¿Puede cualquier persona ayudar a entender por qué es este comportamiento? 1) ¿Debería considerar los registros en outputDir/_temporary
como parte del archivo de salida junto con el part files in outputDir
?
2) Se _temporary
dir supone que se elimina después de ejecución del trabajo y mover los part
archivos a outputDir
?
3) por qué no puede crear archivos de piezas directamente bajo ouput dir?
coalesce(1)
y repartition(1)
no puede ser la opción ya que el archivo outputDir en sí será de alrededor500GB
Spark 2.0.2. 2.1.3
y Java 8, no HDFS
Después del análisis, observó que mi trabajo está utilizando chispa fileoutputcommitter version 1
que es por defecto. Entonces incluido config para utilizar fileoutputcommitter version 2
en lugar de version 1
y probado en 10 nodo de clúster chispa independiente en AWS. Todos part-* files
son generados directamente bajo outputDirPath
especificado en eldataframe.write().option("header","false").mode(SaveMode.Overwrite).csv(outputDirPath)
Podemos establecer la propiedad
Mediante la inclusión de la misma que
--conf 'spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2'
enspark-submit command
o establecer la propiedad usando sparkContext
javaSparkContext.hadoopConifiguration().set("mapreduce.fileoutputcommitter.algorithm.version","2")
Entiendo la consecuencia en caso de fallos como se indica en los documentos de chispa , pero he conseguido el resultado deseado!
spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version , defaultValue es 1
La salida de la versión algoritmo committer archivo, número de versión válida algoritmo: 1 o 2. La versión 2 puede tener un mejor rendimiento, pero la versión 1 puede controlar los errores mejor en ciertas situaciones, como por mapreduce-4815.