You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Glue读取Databricks JDBC大数据集时Spark并行失效问题

问题解决:AWS Glue读取Databricks JDBC数据时单Executor工作、超时问题

核心原因

JDBC读取未配置分区参数,导致Spark无法将数据拆分到多个分区并行处理;同时写入时未做重分区,单文件写入加重单Executor负载。

解决方案步骤

1. 配置JDBC分区读取,实现并行拉取

在create_dynamic_frame_from_options的connection_options中添加分区相关参数,利用Databricks表中的数值型或日期型字段做分区键,让Spark启动多个并行任务拉取数据:

dynamic_frame = glueContext.create_dynamic_frame_from_options(
    connection_type="jdbc",
    connection_options={
        "url": "jdbc:databricks://<databricks-instance>",
        "dbtable": f"({query}) t",
        "user": "<databricks-user>",
        "password": "<databricks-password>",
        "driver": "com.databricks.driver.jdbc.Driver",
        # 新增分区配置
        "partitionColumn": "id",  # 替换为你表中存在的数值型/日期型字段,比如自增ID、创建时间
        "lowerBound": "1",        # 分区字段的最小值
        "upperBound": "45000000", # 分区字段的最大值(对应4500万行)
        "numPartitions": "10"     # 要拆分的分区数,根据Glue集群的executor数量调整,比如10-20
    }
)

注意:partitionColumn必须是查询结果中存在的字段,且字段类型支持范围拆分;numPartitions建议设置为集群executor数量的1-2倍,避免资源浪费。

2. 写入前重分区,并行生成多个Parquet文件

将DynamicFrame转换为DataFrame后执行重分区,再转回DynamicFrame写入,让多个executor同时处理写入任务:

# 将DynamicFrame转为Spark DataFrame并重分区
df = dynamic_frame.toDF().repartition(10)  # 分区数和JDBC读取的numPartitions对应或调整
repartitioned_dynamic_frame = DynamicFrame.fromDF(df, glueContext, "repartitioned_df")

# 写入S3
glueContext.write_dynamic_frame.from_options(
    frame=repartitioned_dynamic_frame,
    connection_type="s3",
    connection_options={
        "path": "s3://<s3-bucket>/<s3-prefix>"
    },
    format="glueparquet"
)

如果需要后续合并文件,可以在写入后用Glue的mergeFiles操作,或者在写入时设置groupFiles参数,但优先保证读取和写入的并行性解决超时问题。

3. 调整Glue集群配置(可选)

如果集群资源不足,可调整Glue作业的Worker类型和数量:

  • 选择更大的Worker类型(比如G.2X、G.4X)
  • 增加Worker数量,确保集群有足够的executor来处理并行任务

验证效果

调整后,Glue集群的多个executor会同时参与数据读取和写入,任务执行时间会显著缩短,避免超时;最终生成多个Parquet文件,总大小仍为450MB左右,数据完整性不受影响。

内容的提问来源于stack exchange,提问作者Meyer Cohen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:22:54