先上代码:
//结果数据临时写入ods
result.write.mode("append")
.format("jdbc")
.option("url", KlaAppEnv.ODSURL)
.option("dbtable", KlaAppEnv.ODSDB)
.option("user", KlaAppEnv.ODSUSER)
.option("password", KlaAppEnv.ODSPASSWORD)
.save()
spark将处理好的数据写入oracle,本地运行时完全没问题,数据正常。但是部署到集群,发现数据未写入,登录yarn监控界面查看任务执行情况:
任务状态为finished,但任务返回结果却是 failed,打开最下面任意一行的logs,查看报错详情:
错误原因:
根据报错信息描述,应该是oracle的驱动版本造成了冲突或者缺少相应jar包,一定要注意这个问题,否则会发现莫名其妙报错。
解决问题:
修改 pom 文件,将oracle连接包依赖修改为 provided(由于 Spark 服务器上有这些 jar 所以打包的时候不用将本地的打进去也能运行) ,再次打包提交,运行通过。
<!--oracle连接包-->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0</version>
<scope>provided</scope>
</dependency>