Apache spark Spark MySQL JDBC无错误挂起
我有一个简单的应用程序将MySQL表摄取到运行在Spark 3.0.0(EMR 6.1)上的S3中 MySQL表使用一个大执行器加载,该执行器具有48G内存,如下所示: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) \ .
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中结束时,不会再收到任何数据包。