详细的文档在系列cdh搭建第一篇有详细的介绍,但是相关场景,觉得还是需在本篇做一下补充。。。
spark2自定义安装
参考这篇文章
https://blog.csdn.net/Gavin_chun/article/details/78554277
一、下载
下载:
https://www.cloudera.com/documentation/spark2/latest/topics/spark2_packaging.html#packaging
http://archive.cloudera.com/spark2/parcels/2.2.0.cloudera1/
下载对应的包:
SPARK2_ON_YARN-2.2.0.cloudera1.jar
SPARK2-2.2.0.cloudera1-1.cdh5.12.0.p0.142354-el6.parcel
SPARK2-2.2.0.cloudera1-1.cdh5.12.0.p0.142354-el6.parcel.sha
manifest.json
二、准备
1、将SPARK2_ON_YARN-2.2.0.cloudera1.jar上传至/opt/cloudera/csd目录
注:要保证集群的本地描述符存储库路径是/opt/cloudera/csd
查看方式:CM主界面管理–>设置–>类别(本地描述符存储库路径)
2、将
SPARK2-2.2.0.cloudera1-1.cdh5.12.0.p0.142354-el6.parcel
SPARK2-2.2.0.cloudera1-1.cdh5.12.0.p0.142354-el6.parcel.sha
manifest.json
上传之后注意改下名字
上传至/var/www/html/spark2目录下,且保证http能够访问。
三、重启cloudera-scm-server 服务
service cloudera-scm-server restart
还要等一会儿才能进入这个页面哦
成功后进入CM界面,在添加服务里面会看到spark2的按钮。
四、可能需要激活
报错 客户端配置生成需要激活以下其他 Parcel:[spark2]。
但是当我们激活时,发现。
错误
SPARK2 (2.2.0.cloudera1-1.cdh5.12.0.p0.142354) 所需的 CDH (低于 5.14) Parcel 不可用。
看来需要下载更加高的版本了
五、换成2.4成功!需要添加服务
SPARK2 2.4.0.cloudera1-1.cdh5.13.3.p0.1007356
已分配, 已激活
您可以在此处自定义新服务的角色分配,但请注意,如果分配不正确(例如,分配到某个主机上的角色太多),性能受到影响。
1、点击集群按钮旁的添加服务
2、选择spark2 –>继续
3、选择依赖
4、角色分配(Gateway所有主机都要安装)
5、启动
将 Spark 2 服务添加到 Cluster 1
恭喜您!
您的新服务已安装在群集中并已配置。
注意:您可能仍必须启动新服务。建议您在执行此操作之前,先重启所有配置过时的依赖关系服务。可以通过单击下面的完成在主页面上执行这些操作。
然后我们su - hdfs
pyspark2就可以进入python的命令了
六、开发与demo
用yarn来跑用例
spark2-submit --class WordCount --master yarn --deploy-mode cluster --driver-memory 500m --executor-memory 500m --executor-cores 1 --queue default hzmt-demo.jar
准备执行:
spark2-submit --class voucher.VouchDev --master yarn --deploy-mode cluster --driver-memory 500m --executor-memory 500m --executor-cores 1 --queue default /root/spark/voucher.jar
我们来看一下demo
重点:
(1)
但是提交我们以前写的项目报错了
Exception in thread "main" org.apache.spark.SparkException: Application application_1557731445525_0005 finished with failed status
at org.apache.spark.deploy.yarn.Client.run(Client.scala:1171)
at org.apache.spark.deploy.yarn.YarnClusterApplication.start(Client.scala:1608)
查一下什么原因
spark2-submit --class voucher.VouchDev --master yarn --deploy-mode cluster --driver-memory 1g --executor-memory 1g --queue default /var/lib/hadoop-hdfs/spark/voucher.jar
(2)
我们参考控制台报错找到我们刚才用的节点node2的问题,来看下:
Final app status: FAILED, exitCode: 13, (reason: User class threw exception: java.lang.Illega
往后看
FAILED, exitCode: 13, (reason: User class threw exception: java.lang.IllegalArgumentException: System memory 466092032 must be at least 471859200. Please increase heap size using the --driver-memory
让我们增加内存。
(3)
增加完了内存可以了,但是抱一个新的错误了。我们来解决一下。
Exception in thread "main" org.apache.spark.SparkException: Application application_1557731445525_0013 finished with failed status
at org.apache.spark.deploy.yarn.Client.run(Client.scala:1171)
http://node1:8088/proxy/application_1557731445525_0013/
让我们打开这个看一下,报错。
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
应该是mysql的bin的jar没有打进去,我们idea的时候,用build点击+ 来增加jar的方式,将maven包打进去就可以了
(4)mail邮件服务问题
报错:
ERROR yarn.ApplicationMaster: User class threw exception: java.lang.NoClassDefFoundError: javax/mail/Address
java.lang.NoClassDefFoundError: javax/mail/Address
打包之后也还是这样。
这个暂时还是解决不了的。。。应该是和我的邮箱有关系吧。。。
(5)spark
写出来之后,汉字全部变成了问号?
解决办法:
jdbc:mysql://172.16.1.117:3306/database?useUnicode=true&characterEncoding=utf8
(6)设置参数尽量使用1g,用少了,或者用多了都会报错的。
遇到了一个问题,好像这里的spark集群并不是真正的安装,但是使用yarn-cluster又可以跑程序,所以也就没有管
再提一点,在spark的main方法中,这么写是亲测可用的。
val conf = new SparkConf().setAppName("Voucher-Task").setMaster("yarn-cluster")
cdh并没有真正启动spark,是阉割版的spark。需要真正启动
首先是,我们发现spark的7077没有
cdh的spark并非真正启动,需要自己安装。
请参考文档
https://www.2cto.com/net/201805/750729.html
1.jps
发现压根没有spark相关组件的进程有启动
2.先说明几个目录需要注意的(cdh的spark目录非常的乱)
(1)spark的部分bin
/opt/cloudera/parcels/CDH/lib/spark/bin
(2)spark的安装目录
/opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/spark