AWS Glue 执行者死亡
AWS Glue executors dying
我正在使用 AWS Glue DynamicFrame 以这种方式从 S3 读取镶木地板文件:
sources = glue_context\
.create_dynamic_frame\
.from_options(connection_type="s3",
connection_options={'paths': source_paths, 'recurse': True,
'groupFiles': 'inPartition'},
format="parquet",
transformation_ctx="source")
在此操作之后,我正在将 DynamicFrame 转换为 Spark DF,以便应用特定的 Spark 函数。最后再次将这些结果包装在 DynamicFrame 中并使用它写入 Redshift。
发生的事情是执行者因为
而不断死去
WARN TaskSetManager: Lost task in stage ExecutorLostFailure (executor exited caused by one of the running tasks)
Reason: Container killed by YARN for exceeding memory limits. 5.5 GB of 5.5 GB physical memory used.
Consider boosting spark.yarn.executor.memoryOverhead.
这种行为也可以从 AWS Glue 指标中发现:
我已经读过这个 article 不幸的是它使用了 JDBC 源(在我的例子中是 S3)并建议在任何地方使用 Glue DynamicFrames。但不幸的是我确实需要使用Spark DF进行特定的数据转换。
如何解决memoryOverhead导致executor一直挂掉的问题?是 Spark 相关还是 Glue 相关?
调整 Spark 配置可能会有所帮助。
我原以为 AWS Glue 等工具不需要调整 Spark 参数,并且由平台处理,但不幸的是,事实并非如此。
我使用此语法将 参数 传递给胶水作业
密钥:--conf
值:spark.yarn.executor.memoryOverhead=2g
此外,引入一些缓存逻辑和重新分区有助于让执行程序保持忙碌。缓存的唯一问题是 OOM,这是通过传递 spark.yarn.executor.memoryOverhead=2g
参数解决的。
我正在使用 AWS Glue DynamicFrame 以这种方式从 S3 读取镶木地板文件:
sources = glue_context\
.create_dynamic_frame\
.from_options(connection_type="s3",
connection_options={'paths': source_paths, 'recurse': True,
'groupFiles': 'inPartition'},
format="parquet",
transformation_ctx="source")
在此操作之后,我正在将 DynamicFrame 转换为 Spark DF,以便应用特定的 Spark 函数。最后再次将这些结果包装在 DynamicFrame 中并使用它写入 Redshift。
发生的事情是执行者因为
而不断死去WARN TaskSetManager: Lost task in stage ExecutorLostFailure (executor exited caused by one of the running tasks)
Reason: Container killed by YARN for exceeding memory limits. 5.5 GB of 5.5 GB physical memory used.
Consider boosting spark.yarn.executor.memoryOverhead.
这种行为也可以从 AWS Glue 指标中发现:
我已经读过这个 article 不幸的是它使用了 JDBC 源(在我的例子中是 S3)并建议在任何地方使用 Glue DynamicFrames。但不幸的是我确实需要使用Spark DF进行特定的数据转换。
如何解决memoryOverhead导致executor一直挂掉的问题?是 Spark 相关还是 Glue 相关?
调整 Spark 配置可能会有所帮助。
我原以为 AWS Glue 等工具不需要调整 Spark 参数,并且由平台处理,但不幸的是,事实并非如此。
我使用此语法将 参数 传递给胶水作业
密钥:--conf
值:spark.yarn.executor.memoryOverhead=2g
此外,引入一些缓存逻辑和重新分区有助于让执行程序保持忙碌。缓存的唯一问题是 OOM,这是通过传递 spark.yarn.executor.memoryOverhead=2g
参数解决的。