在本地(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读取所有块。
任何帮助都将不胜感激。感谢
正如您所提到的,您可以在单个executor(Running--master local(中获得所有行,这意味着所有分区都在Driver中,您在spark-submit中使用该驱动程序提交作业。
一旦您的分区分布在集群节点上(--master yarn(您丢失了许多分区,无法读取所有HDFS块。
- 查看您的代码是否使用嵌套循环,例如if条件-而(while(()
或任何其他带有if条件的循环。通常,外循环在每个节点上复制相同的分区,组合器将结果组合为单个分区。请检查一下。
- 对于JDBC异常,您需要将所有NULL值替换为其他值,例如在最终数据帧上使用.na((.fill((方法。由于文件中的每一列行都应该大于CHAR>0(Null值的长度为零,即JDBC编写中不支持(
希望有帮助🙂