Apache spark Spark MySQL JDBC无错误挂起

Apache spark Spark MySQL JDBC无错误挂起,apache-spark,pyspark,amazon-emr,mysql-connector,Apache Spark,Pyspark,Amazon Emr,Mysql Connector,我有一个简单的应用程序将MySQL表摄取到运行在Spark 3.0.0(EMR 6.1)上的S3中 MySQL表使用一个大执行器加载,该执行器具有48G内存,如下所示: spark.read \ .option("url", jdbc_url) \ .option("dbtable", query) \ .option("driver", driver_class) \ .

我有一个简单的应用程序将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作业将无法运行,并且不会触发任何错误。stderr和stdout日志不显示任何进度,执行器完全正常

dag非常简单:

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

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

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


可能是您的数据库节点太小了?谢谢@A.B我认为这不是问题所在,因为极光中的资源总是低于40%。此外,查询似乎已正确完成,它将移动到“已清理”状态。我还在EMR中做了一个tcpdump,当查询在Aurora中结束时,不会再收到任何数据包。