首页 > 解决方案 > Spark MySQL JDBC挂起没有错误

问题描述

我有一个简单的应用程序将 MySQL 表摄取到在 Spark 3.0.0 (EMR 6.1) 上运行的 S3 中。

MySQL 表是使用具有 48G 内存的单个大型执行器加载的,如下所示:

spark.read \
        .option("url", jdbc_url) \
        .option("dbtable", query) \
        .option("driver", driver_class) \
        .option("user", secret['username']) \
        .option("password", secret['password']) \
        .format("jdbc").load()

Spark 作业在 MySQL 查询不到 6 分钟即可完成的小表上正常工作。但是,在查询超出此时间的两个作业中,Spark 作业会卡在 RUNNING 中并且不会触发任何错误。stderr 和 stdout 日志没有显示任何进展,并且执行程序完全健康。

dag 很简单:

在此处输入图像描述

在 MYSQL (Aurora RDS) 中,查询似乎已完成,但连接仍处于打开状态,同时检查线程状态时显示“已清理”。

我尝试过使用 MySQL 连接器版本 5 和 8,但它们都表现出相同的行为。我想这可能与 Spark 默认超时配置有关,但我想获得一些指导。

这是单个执行器的线程转储:

在此处输入图像描述

标签: apache-sparkpysparkamazon-emrmysql-connector

解决方案


推荐阅读