Spark: операция перемешивания приводит к длительной паузе GC

Я запускаю Spark 2 и пытаюсь перетасовать около 5 терабайт json. Я сталкиваюсь с очень длинными паузами при сборке мусора во время перетасовки Dataset:

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

person Luke    schedule 16.08.2016    source источник
comment
Вы уверены, что вам нужен 1G MaxPermSize? Также, вероятно, стоит использовать Java8 (поэтому в случае OpenJDK/OracleJDK этот параметр игнорируется).   -  person Gábor Bakos    schedule 16.08.2016


Ответы (1)


Добавление следующих флагов избавило от пауз GC.

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

Я думаю, что это требует достаточной настройки, хотя. Это сообщение о блоках данных было очень очень полезно.

person Luke    schedule 23.08.2016