Мы запускаем работу Spark в Dataproc.Некоторое время мало работ застревает и не завершается.Мы должны вручную убить задание из Dataproc.
Мы подозреваем, что repartition(50)
может быть проблемой, так как мы используем динамическое распределение ресурсов для заданий.
Мы определили эту конфигурацию дляИскра:
'spark.dynamicAllocation.minExecutors': 5
'spark.dynamicAllocation.enabled': 'true',
'spark.cleaner.referenceTracking.cleanCheckpoints': 'true',
'spark.rdd.compress': 'true',
'spark.locality.wait': '0s',
'spark.executor.cores': '1',
'spark.executor.memory': '3g',
'spark.eventLog.compress': 'true',
'spark.history.fs.cleaner.enabled': 'true',
'spark.history.fs.cleaner.maxAge': '1h',
'spark.history.fs.cleaner.interval': '5m',
'spark.driver.extraClassPath': '$SPARK_HOME/jars/kafka-clients-1.1.0.jar'
self.create_rdd("/path/to/file.txt.gz")
.repartition(50) \
.mapPartitions(partial() \
.groupBy(itemgetter('id'), numPartitions=NUM_PARTITIONS) \
.mapPartitions(partial()) \
.count()