Я выполняю задание преобразования ETL клея. Эта работа предполагает чтение данных из s3 и преобразование в паркет.
Ниже приведен источник клея .... sourcePath
- это местоположение файла s3.
В этом месте у нас около 100 миллионов json файлов ... все они вложенные в подпапки.
По этой причине я применяю exclusionPattern
для исключения и файлы, начинающиеся с a
(что составляет около 2,7 миллиона файлов), и я считаю, что только файлы, начинающиеся с a
будет обработано.
val file_paths = Array(sourcePath)
val exclusionPattern = "\"" + sourcePath + "{[!a]}**" + "\""
glueContext
.getSourceWithFormat(connectionType = "s3",
options = JsonOptions(Map(
"paths" -> file_paths, "recurse" -> true, "groupFiles" -> "inPartition", "exclusions" -> s"[$exclusionPattern]"
)),
format = "json",
transformationContext = "sourceDF"
)
.getDynamicFrame()
.map(transformRow, "error in row")
.toDF()
После выполнения этого задания со стандартным рабочим типом, а также с рабочим типом G2. Я получаю сообщение об ошибке
#
# java.lang.OutOfMemoryError: Java heap space
# -XX:OnOutOfMemoryError="kill -9 %p"
# Executing /bin/sh -c "kill -9 27788"...
И в облачных часах я вижу, что память драйвера используется на 100%, но использование памяти исполнителем почти равно нулю.
При запуске задания я устанавливаю spark.driver.memory=10g
и spark.driver.memoryOverhead=4096
и параметр задания --conf.
Это подробности в журналах
--conf spark.hadoop.yarn.resourcemanager.connect.max-wait.ms=60000
--conf spark.hadoop.fs.defaultFS=hdfs://ip-myip.compute.internal:1111
--conf spark.hadoop.yarn.resourcemanager.address=ip-myip.compute.internal:1111
--conf spark.dynamicAllocation.enabled=true
--conf spark.shuffle.service.enabled=true
--conf spark.dynamicAllocation.minExecutors=1
--conf spark.dynamicAllocation.maxExecutors=4
--conf spark.executor.memory=20g
--conf spark.executor.cores=16
--conf spark.driver.memory=20g
--conf spark.default.parallelism=80
--conf spark.sql.shuffle.partitions=80
--conf spark.network.timeout=600
--job-bookmark-option job-bookmark-disable
--TempDir s3://my-location/admin
--class com.example.ETLJob
--enable-spark-ui true
--enable-metrics
--JOB_ID j_111...
--spark-event-logs-path s3://spark-ui
--conf spark.driver.memory=20g
--JOB_RUN_ID jr_111...
--conf spark.driver.memoryOverhead=4096
--scriptLocation s3://my-location/admin/Job/ETL
--SOURCE_DATA_LOCATION s3://xyz/
--job-language scala
--DESTINATION_DATA_LOCATION s3://xyz123/
--JOB_NAME ETL
Любые идеи, что может быть проблемой.
Спасибо