- cm5.13.0安装的spark默认安装的是spark1.6 可以通过spark-shell查看spark版本 提交spark代码后报错提示 不支持一些新语法以及sparkSession, 故需要升级到spark2.2.
- 在cm环境中升级spark2.2,需要下载spark on yarn的csd的jar包、spark 2.2.0 parcel包、parcel.sha1文件以及mainfest.json文件工四个文件
在以下两个地址中下载对应cloudera4的版本
http://archive.cloudera.com/spark2/csd/
http://archive.cloudera.com/spark2/parcels/2.2.0.cloudera4/
下载后将其分别放入到server节点的 /opt/cloudera/csd 和 /opt/cloudera/parcel-repo 文件夹下
然后执行赋权命令 chown -R cloudera-scm:cloudera-scm /opt/cloudera
然后停止server节点以及所有agent节点 再使用重启命令restart 重启所有agent节点 再重启server节点
此时登录cm管理页面 重启cloudear manager service服务,通过主机->parcel 分配激活spark2的parcel
然后返回管理页面 添加服务spark2 至此spark升级为2.2.0成功.
3.提交命令
spark2-submit --master yarn --deploy-mode cluster --class com.cosmo.tz.demo.mysql2hiveDemo /opt/tengz-1.0-SNAPSHOT.jar
4.提交后提示 no suitable driver 也就是找不到驱动 查看代码发现是mysql的jdbc找不到驱动
然后将mysql-connector-java-5.1.31.jar 分别在大数据的四个节点的
/usr/share/java /var/lib/hive /usr/local/jdk_lin/jre/lib/ext(这第三个是我司封装的jdk里的) 三个文件夹下放入mysql-connector-java-5.1.31.jar 并授权 777
然后再次提交任务发现找不到驱动的问题被解决了.
5.发现新的问题连接超时 发现是spark程序中的scala类里写的jdbc的url的ip地址是使用的外网映射地址(仅有一台节点可通过此映射访问)
而spark任务提交给集群随机分配节点 其他三台节点上不可访问外网 所以外网映射在三台内网节点失效
所以改为其本来的地址 而四个节点之间是相互打通了ssl访问权限的 所以直接通过原本的ip地址就可以访问
至此任务成功执行结束.
spark2提交mysql2hive任务的坑
最新推荐文章于 2022-10-25 14:49:02 发布