for my darling!
1、前言
CDH安装的是较新版本的CDH-5.13.0,但是CDH-5.13.0默认支持的还是spark1.6版本。这里需要将spark升级到spark2.x版本,以方便使用spark程序读取kafka0.10.x的数据。根据官网上的介绍可知CDH5.13是支持spark2.x的。这里讲spark2的安装做一个记录。
首先贴出一些官方的网址,有兴趣的可以去看看:Cloudera发布Apache Spark 2概述(可以在这里面找到安装方法和parcel包的仓库,不过待会我会给出地址和安装方法)
https://www.cloudera.com/documentation/spark2/latest/topics/spark2_installing.html
2、安装准备
- CSD包下载 http://archive.cloudera.com/spark2/csd/
- parcel包下载 http://archive.cloudera.com/spark2/parcels/
注:1、下载parcel包时要下载对应的版本,这里系统使centOS 7,所以下载el7
2、CSD和parcel包都有cloudera1和cloudera2之分,因此在下载CSD和parcel包时两者版本必须一致。
3、安装spark2
在所有节点进行下面操作
上传CSD包到机器的/opt/cloudera/csd目录。注意如果本目录下有其他的jar包,把删掉或者移到其他目录
修改SPARK_ON_YARN-2.2.0.cloudera1.jar的用户和组
chown cloudera-scm:cloudera-scm SPARK_ON_YARN-2.2.0.cloudera1.jar将parcel包上传到机器的/opt/cloudera/parcel-repo目录。注意: 如果有其他的安装包,不用删除 ,但是如果本目录下有其他的重名文件比如manifest.json文件,把它重命名备份掉。然后把那3个parcel包的文件放在这里。
停掉CM和集群,现在将他们停掉。然后运行命令
service cloudera-scm-agent restart
service cloudera-scm-server restart-
把CM和集群启动起来。然后点击主机->Parcel页面,看是否多了个spark2的选项。如下图,你这里此时应该是分配按钮,点击,等待操作完成后,点击激活按钮
激活后,点击你的群集-》添加服务,添加spark2服务。注意,如果你这里看不到spark2服务,就请检查你的CSD包和parcel包是否对应,上面的步骤是否有漏掉。正常情况下,应该是能用了。
4、文件配置
1、前提交代
- CDH安装目录 /opt/cloudera/parcels/CDH/
- SPARK2安装目录 /opt/cloudera/parcels/SPARK2
- 启动spark2用户名为hadoop
- 所有配置文件目录为 /etc/
2、将CDH中spark配置文件拷贝到SPARK2的配置文件中,并配置spark-env.sh文件
#拷贝文件
cp /opt/cloudera/parcels/CDH/etc/spark/conf.dist/* /opt/cloudera/parcels/SPARK2/etc/spark2/conf.dist/
#配置spark-env.sh文件
vim /opt/cloudera/parcels/SPARK2/etc/spark2/conf.dist/spark-env.sh
#添加如下内容
export SPARK_DIST_CLASSPATH=$(hadoop classpath) //指定hadoop class文件目录
export HADOOP_CONF_DIR=/etc/hadoop/conf //指定hadoop配置文件目录
3、配置启动账户hadoop .bashrc文件
#打开文件
vim /home/hadoop/.bashrc
#添加如下内容
export HADOOP_CONF_DIR=/etc/hadoop_conf
export SPARK_HOME=/opt/cloudera/parcels/SPARK2/lib/spark2
export PATH=$SPARK_HOME/bin:$PATH
4、在运行spark on yarn程序时会报错,如下
查了网上的博客,大多数是说yarn-site.xml文件未配置 yarn.resourcemanager.address 参数。但是在CDH中这个参数已经配置了。直接将yarn.resourcemanager.address写入程序中
仍无法解决问题。找到一篇博客https://www.cnblogs.com/vikings-blog/p/3918266.html 说是架构问题。在spark的依赖包中含有一个yarn-default.xml文件。该文件配置了yarn.resourcemanager.address 参数。那么在spark依赖包中找到yarn-default.xml文件,该文件在/opt/cloudera/parcels/CDH/jars/hadoop-yarn-common-2.6.0-cdh5.13.0.jar包中(参考博客中说yarn-default.xml文件在spark-core-assembly-0.4-SNAPSHOT.jar中,这里有些不同)。修改该文件的yarn-default.xml文件
#打开该jar包
vim /opt/cloudera/parcels/CDH/jars/hadoop-yarn-common-2.6.0-cdh5.13.0.jar
#搜索yarn-default.xml文件
/yarn-default.xml
#按快车键进入yarn-default.xml文件,修改参数并保存
这里修改为yarn运行所在的节点IP
5、验证
-
启动spark-shell
- 运行spark on yarn程序
spark-submit
--class com.bmkp.Main
--master yarn //这里master必须为 yarn
--deploy-mode cluster //这里可以有cluster和client两种方式
--executor-memory 2g
--num-executors 10
/data/xu/read_hive-1.0-SNAPSHOT.jar