1

Je cours Spark 2 et essaie de mélanger environ 5 téraoctets de JSON. Je courais dans de très longues pauses de collecte des ordures pendant la lecture aléatoire d'un Dataset:Spark: opération de shuffle menant à une longue pause GC

val operations = spark.read.json(inPath).as[MyClass] 
operations.repartition(partitions, operations("id")).write.parquet("s3a://foo") 

Y a-t-il des réglages de configuration évidents pour faire face à ce problème? Ma configuration est la suivante:

spark.driver.maxResultSize 6G 
spark.driver.memory 10G 
spark.executor.extraJavaOptions -XX:+UseG1GC -XX:MaxPermSize=1G -XX:+HeapDumpOnOutOfMemoryError 
spark.executor.memory 32G 
spark.hadoop.fs.s3a.buffer.dir /raid0/spark 
spark.hadoop.fs.s3n.buffer.dir /raid0/spark 
spark.hadoop.fs.s3n.multipart.uploads.enabled true 
spark.hadoop.parquet.block.size 2147483648 
spark.hadoop.parquet.enable.summary-metadata false 
spark.local.dir /raid0/spark 
spark.memory.fraction 0.8 
spark.mesos.coarse true 
spark.mesos.constraints priority:1 
spark.mesos.executor.memoryOverhead 16000 
spark.network.timeout 600 
spark.rpc.message.maxSize 1000 
spark.speculation false 
spark.sql.parquet.mergeSchema false 
spark.sql.planner.externalSort true 
spark.submit.deployMode client 
spark.task.cpus 1 
+0

Etes-vous sûr de disposer de 1G MaxPermSize? Aussi probablement cela vaut la peine d'utiliser Java8 (donc dans le cas de OpenJDK/OracleJDK cette option est ignorée). –

Répondre

1

Ajout des drapeaux suivants se débarrasser des pauses GC.

spark.executor.extraJavaOptions -XX:+UseG1GC -XX:InitiatingHeapOccupancyPercent=35 -XX:ConcGCThreads=12 

Je pense que cela demande beaucoup de réglages. This poste databricks était très très utile.