如何解决AWS胶水将动态框架写出内存不足OOM
我正在使用AWS胶水运行pyspark来从目录中读取动态框架(redshift中的数据),然后将其以csv格式写入s3。我收到此错误消息,说执行程序内存不足:
An error occurred while calling o883.pyWriteDynamicFrame. Job aborted due to stage failure: Task 388 in stage 21.0 failed 4 times,most recent failure: Lost task 388.3 in stage 21.0 (TID 10713,ip-10-242-88-215.us-west-2.compute.internal,executor 86): ExecutorLostFailure (executor 86 exited caused by one of the running tasks) Reason: Container killed by YARN for exceeding memory limits. 16.1 GB of 16 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead or disabling yarn.nodemanager.vmem-check-enabled because of YARN-4714.
我的猜测是,数据帧在写入之前没有很好地分区,因此一个执行程序用尽了内存。但是,当我按照该文档https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html将分区键添加到动态框架时,该作业仅在4小时后超时。 (我选择的分区键将数据集分为大约10个分区)
我尝试过的其他方法:
- 尝试配置fetchsize,但aws doc显示胶水默认情况下已将fetchsize配置为1000。 https://aws.amazon.com/blogs/big-data/optimize-memory-management-in-aws-glue/#:~:text=With%20AWS%20Glue%2C%20Dynamic%20Frames,Spark%20executor%20and%20database%20instance。
- 尝试设置下推谓词,但是每天创建输入数据集,并且不进行分区。我还需要所有行来在ETL中执行联接/过滤器,因此这对我而言可能不是一个好的解决方案。
有人知道有什么好的替代方法可以尝试吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。