AWS Glue执行者死亡

问题描述 投票:0回答:1

我正在以这种方式使用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 DynamicFrames的任何地方使用它。但不幸的是,我确实需要使用Spark DF进行特定的数据转换。

如何解决由于memoryOverhead而导致死亡的执行者问题?是Spark相关还是胶水?

python amazon-web-services apache-spark pyspark aws-glue
1个回答
0
投票

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

我期望从AWS Glue等工具中调整Spark参数并不需要调整Spark参数,但不幸的是,这并非如此。

我使用这种语法将参数传递给Glue Job

关键:--conf价值:spark.yarn.executor.memoryOverhead=2g

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

© www.soinside.com 2019 - 2024. All rights reserved.