1

나는 Spark 2을 실행 중이고 약 5 테라 바이트의 json을 뒤섞습니다. 나는 Dataset의 셔플 동안 매우 긴 가비지 콜렉션 일시 정지 실행 해요 : 스파크 : 셔플 작업으로 긴 GC 일시 중지

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

이 문제를 다루는 명백한 구성 비틀기가 있습니까?

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

1G MaxPermSize가 필요합니까? 또한 Java8을 사용하는 것이 좋습니다 (OpenJDK/OracleJDK의 경우 옵션이 무시 됨). –

답변

1

를 GC 일시 정지를 제거있어 다음과 같은 플래그를 추가 : 다음과 같이 내 구성입니다.

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

생각해 보면 상당한 조정이 필요하다고 생각합니다. This databricks 게시물은 매우 도움이되었습니다.