AWS Glue执行者垂死

时间:2019-03-05 14:01:27

标签: python amazon-web-services apache-spark pyspark aws-glue

我正在以这种方式使用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")

完成此操作后,我将为Spark DF转换DynamicFrame,以应用特定的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指标中发现:

enter image description here

我已经读过这个article,不幸的是,它使用JDBC源(在我的情况下为S3),建议在任何地方使用Glue DynamicFrame。但不幸的是,我确实需要使用Spark DF进行特定的数据转换。

我该如何解决由于memoryOverhead而一直垂死的执行者的问题?是Spark相关还是Glue?

1 个答案:

答案 0 :(得分:0)

调整Spark配置可能会有所帮助。

我期望从诸如AWS Glue之类的工具中不必调整Spark参数,该工具由平台处理,但不幸的是,这不是事实。

我使用此语法将 Parameters 传递给胶水作业

--conf spark.yarn.executor.memoryOverhead=2g

此外,引入一些缓存逻辑和重新分区有助于使执行者保持忙碌状态。缓存唯一的问题是OOM,它可以通过传递spark.yarn.executor.memoryOverhead=2g参数来解决。