【发布时间】:2023-02-15 12:31:18
【问题描述】:
在下图中,就写入 S3 的方式而言,我们使用三种不同的配置运行相同的粘合作业:
- 我们使用动态帧写入 S3
- 我们使用纯火花帧写入S3
- 与 1 相同,但将工作节点数从 80 减少到 60
- 在所有条件相同的情况下,动态框架需要 75 分钟才能完成这项工作,而常规 Spark 需要 10 分钟。输出是 100 GB 的数据。
- 动态框架对工作节点的数量超级敏感,当稍微减少工作节点的数量时,在处理 2 小时后由于内存问题而失败。这是令人惊讶的,因为我们期望作为 AWS 服务的 Glue 能够更好地处理 S3 写入操作。
代码差异是这样的:
if dynamic: df_final_dyn = DynamicFrame.fromDF(df_final, glueContext, "df_final") glueContext.write_dynamic_frame.from_options( frame=df_final_dyn, connection_type="s3", format="glueparquet", transformation_ctx="DataSink0", connection_options={"path": "s3://...", "partitionKeys": ["year", "month", "day"]}) else: spark.conf.set("spark.sql.sources.partitionOverwriteMode", "dynamic") df_final.write.mode("overwrite").format("parquet").partitionBy("year", "month", "day")\ .save("s3://.../")为什么效率如此低下?
【问题讨论】:
-
你找到答案了吗?
标签: amazon-web-services apache-spark amazon-s3 aws-glue aws-glue-spark