0

在本地(IntelliJ IDEA)中运行相同的作业时,输出计数很好(例如 -55)。但是当使用 spark-submit 在 Yarn 上提交它时,只得到几行(行 -12)。

spark2-submit --master yarn --deploy-mode client --num-executors 5 --executor-memory 5G --executor-cores 5 --driver-memory 8G --class com.test.Main --packages com.crealytics:spark-excel_2.11:0.13.1 --driver-class-path /test/ImpalaJDBC41.jar,/test/TCLIServiceClient.jar --jars /test/ImpalaJDBC41.jar,/test/TCLIServiceClient.jar /test/test-1.0-SNAPSHOT.jar

当使用 master - yarn 获取部分行时。并且当使用本地时 - 能够读取所有行但得到异常 -Caused by: java.sql.SQLFeatureNotSupportedException: [Simba][JDBC](10220) Driver not capable.

在集群上运行时,似乎无法从 HDFS 读取所有块。

任何帮助都感激不尽。谢谢

4

1 回答 1

0

正如您所提到的,您能够在单个执行程序(运行 --master local)中获取所有行,这意味着所有分区都在驱动程序中,您使用它在 spark-submit 中提交作业。

一旦您的分区分布在集群节点(--master yarn)上,您就会丢失许多分区并且无法读取所有 HDFS 块。

  1. 查看您的代码是否使用带有 if 条件的嵌套循环,例如 - while( while() )

或任何其他带有 if 条件的循环。通常,外部循环在每个节点上复制相同的分区,并且组合器将结果组合为单个分区。请检查这个。

  1. 对于 JDBC 异常,您需要将所有 NULL 值替换为其他值,例如在最终数据帧上使用 .na().fill() 方法。因为文件中的每一列行都应该大于 CHAR > 0(空值的长度为零,即 JDBC 写入不支持)

希望这会有所帮助

于 2021-06-25T04:50:25.873 回答