原因在于System.exit(0)的不正常应用,导致在以yarn-cluster模式提交时。cluster模式不支持shell,所以当执行到System.exit(0),程序开始报错,然后集群会按照yarn设定好的AM重启次数(在CDH的yarn配置板块中搜索application即可看到次数设置),重新运行,而且如果程序没有错的话,结果就没有错,这样就很难发现错误了。
object Application {
//初始化sparkSession对象
val conf = new SparkConf()
val sparkSession = SparkSession.builder().config(conf).enableHiveSupport().getOrCreate()
def main(args: Array[String]): Unit = {
//设置spark日志级别
sparkSession.sparkContext.setLogLevel("WARN")
sparkSession.close()
System.exit(0)
}
}