CDH 5.12.1离线部署指南(附spark2.2.0集成指南)
由于国内的网络原因,CDH在国内几乎无法实现在线安装,本文将介绍CDH离线安装方式,所有安装包下载后传输到内网安装,由于版本较新的原因,安装过程的坑还是很多的,在此记录一下。
一共6台节点:
master:32.31.104.159
slave1:32.31.104.161
slave2:32.31.104.162
slave3:32.31.104.163
slave4:32.31.104.164
slave5: 32.31.104.165
所有机器:
操作系统:Ubuntu16.04 LTS 对应代号为xenial
内存:128g
cpu:20个物理核心,40线程
由于mysql服务器已经预装,所以这里不再下载安装mysql。
需要的所有安装包如下:
jdk-8u121-linux-x64.tar.gz
libopts25_5.18.12-3_amd64.deb
ntp_4.2.8p4+dfsg-3ubuntu5.7_amd64.deb
以上三个包我已经打包在百度云中,下载地址:https://pan.baidu.com/s/1nvT3K05
cloudera-manager-xenial-cm5.12.1_amd64.tar.gz
下载地址:http://archive.cloudera.com/cm5/cm/5/cloudera-manager-xenial-cm5.12.1_amd64.tar.gz
CDH-5.12.1-1.cdh5.12.1.p0.3-xenial.parcel
下载地址:http://archive.cloudera.com/cdh5/parcels/5.12.1/CDH-5.12.1-1.cdh5.12.1.p0.3-xenial.parcel
CDH-5.12.1-1.cdh5.12.1.p0.3-xenial.parcel.sha1
下载地址:http://archive.cloudera.com/cdh5/parcels/5.12/CDH-5.12.1-1.cdh5.12.1.p0.3-xenial.parcel.sha1
manifest.json
下载地址:http://archive.cloudera.com/cdh5/parcels/5.12/manifest.json
注意:cloudera对jdk版本要求比较严格,应尽量使用上述版本,也可以去官网查看其它支持版本。第二个和第三个包用于安装ntp服务,如果集群能够联网,可以使用apt install安装。
1、关闭防火墙、selinux;
2、将全部主机的主机名设置好,并将以上映射关系写到每个主机的/etc/hosts文件中;
3、在master节点,ssh-keygen–t rsa生成密钥,将公钥分发到其它节点:ssh-copy-id host;
4、在每台机器上执行:sysctl vm.swappiness=0,并将/etc/sysctl.conf中vm.swappiness的值设为0
echo never >/sys/kernel/mm/transparent_hugepage/defrag
echo never >/sys/kernel/mm/transparent_hugepage/enabled
5、安装jdk
tar –zxvf jdk-8u121-linux-x64.tar.gz–C /usr/java/ #jdk的安装位置应保持一致
在/etc/profile中写入JAVA_HOME并将bin目录添加到PATH
source/etc/profile
在每台机器上都配置好jdk
6、安装和配置数据库
数据库用于存储元数据信息,建议使用mysql或postgrepsql,本例中使用mysql。
处于分担风险的考虑将元数据信息存储在slave1上。
Mysql的安装方式这里不再赘述,在此提醒一点:
为了使master上的进程能够访问到slave1上的数据库,需要解除默认的ip绑定,将/etc/mysql/my.cnf 中的bind-address= 127.0.0.1注释掉,如果/etc/mysql/my.cnf中没有这一行,在/etc/mysql/mysql.conf.d/mysqld.cnf中注释该行。
在mysql中执行以下脚本:
CREATE USER 'amon'@'*' IDENTIFIED BY'amon';
CREATE USER 'rman'@'*' IDENTIFIED BY'rman';
CREATE USER 'hive'@'*' IDENTIFIED BY'hive';
CREATE USER 'sentry'@'*' IDENTIFIED BY'sentry';
CREATE USER 'nav'@'*' IDENTIFIED BY 'nav';
CREATE USER 'navms'@'*' IDENTIFIED BY'navms';
CREATE USER 'hue'@'*' IDENTIFIED BY 'hue';
CREATE USER 'oozie'@'*' IDENTIFIED BY'oozie';
create database amon DEFAULT CHARACTER SETutf8;
grant all on amon.* TO 'amon'@'%'IDENTIFIED BY 'amon';
create database rman DEFAULT CHARACTER SETutf8;
grant all on rman.* TO 'rman'@'%'IDENTIFIED BY 'rman';
create database hive DEFAULT CHARACTER SETutf8;
grant all on hive.* TO 'hive'@'%'IDENTIFIED BY 'hive';
create database sentry DEFAULT CHARACTERSET utf8;
grant all on sentry.* TO 'sentry'@'%'IDENTIFIED BY 'sentry';
create database nav DEFAULT CHARACTER SETutf8;
grant all on nav.* TO 'nav'@'%' IDENTIFIEDBY 'nav';
create database navms DEFAULT CHARACTER SETutf8;
grant all on navms.* TO 'navms'@'%'IDENTIFIED BY 'navms';
create database hue DEFAULT CHARACTER SETutf8;
grant all on hue.* to 'hue'@'%' identifiedby 'hue';
create database oozie DEFAULT CHARACTER SETutf8;
grant all on oozie.* to 'oozie'@'%'identified by 'oozie';
FLUSH PRIVILEGES;
采用mysql作为元数据存储库,需要下载mysql连接驱动,复制到/usr/share/java/ 目录下;
7、安装配置ntp
cloudera要求集群中所有机器时间不能偏差过大,所以需要时间同步,如果可以联网,可以通过apt install或yum安装,因为我的机器无法联网,所以只能离线安装:
在每台机器上:执行
dpkg –i libopts25_5.18.12-3_amd64.deb
dpkg –i ntp_4.2.8p4+dfsg-3ubuntu5.7_amd64.deb
本例中让每个slave和master同步时间,将master作为ntpserver,在master中:
vim /etc/ntp.conf
更改如下:
restrict32.31.104.0 mask 255.255.255.0 nomodify
server127.127.1.0 # ATOM(PPS)
fudge 127.127.1.0stratum 10 # enable PPS API
保存退出,执行:
service ntprestart
在每个slave上:
vim /etc/ntp.conf
添加:
server masterprefer
保存退出,执行:
service ntp restart
master上的ntp server启动后要等5-10分钟才能可用,然后在每个slave执行:
ntpdate –u master
Cloudera manager为主从架构,即一个server和多个agent,本例中我们在master上安装server,master和所有slave上安装agent;
在master节点:
1、将cloudera-manager-xenial-cm5.12.1_amd64.tar.gz解压到/opt/下
tar –zxvf cloudera-manager-xenial-cm5.12.1_amd64.tar.gz–C /opt/
vim/opt/cm-5.12.1/etc/cloudera-scm-agent/config.ini
更改:server_host=master
2、创建CM Server系统用户账号
useradd --system--home=/opt /cm-5.12.1/run/cloudera-scm-server --no-create-home--shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
3、创建CM Server的本地数据存储目录
mkdir -p/var/lib/cloudera-scm-server
chowncloudera-scm:cloudera-scm /var/lib/cloudera-scm-server
4、将/opt/cm-5.12.1分发到各个slave节点;
5、在slave1上:
将mysql驱动复制到:/opt/ cm-5.12.1/share/cmf/lib/目录下
执行:
/opt/cm-5.12.1/share/cmf/schema/scm_prepare_database.shmysql -hlocalhost -uroot –p1234 scm scm scm
登录mysql,增加一条对CM Server主机的访问授权:
grant all on scm.*TO 'scm'@'master' IDENTIFIED BY 'scm';
6、登陆master节点:
修改/opt/cm-5.12.1/etc/cloudera-scm-server/db.properties,更新以下参数:
com.cloudera.cmf.db.host=slave1
com.cloudera.cmf.db.name=scm
com.cloudera.cmf.db.user=scm
com.cloudera.cmf.db.password=scm
com.cloudera.cmf.db.setupType=EXTERNAL
7、创建CDH Parcel资源目录,在master节点:
mkdir -p/opt/cloudera/parcel-repo
将:
CDH-5.12.1-1.cdh5.12.1.p0.3-xenial.parcel
CDH-5.12.1-1.cdh5.12.1.p0.3-xenial.parcel.sha1(后缀改为sha)
manifest.json
复制到该目录下
chown -Rcloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
在所有slave节点:
mkdir -p/opt/cloudera/parcels
chowncloudera-scm:cloudera-scm /opt/cloudera/parcels
8、启动cloudera manager server and agents
在所有节点上,先调整下文件属主权限:
chown -Rcloudera-scm:cloudera-scm /opt/cloudera-manager
在master节点:
/opt/ cm-5.12.1/etc/init.d/cloudera-scm-server start
/opt/cm-5.12.1/etc/init.d/cloudera-scm-agent start
在slave节点:
/opt/cm-5.12.1/etc/init.d/cloudera-scm-agent start
启动clouderamanager后,访问以下地址:
http://master:7180/cmf
初始管理账号信息为:admin/admin
登陆后按提示操作即可
这里有个问题,记录一下:
在配置元数据库的时候,需要检测一下数据库连接,hive和oozie的连接一般可以正常测试成功,但是hue连接却出现错误,经查看日志发现缺少libmysqlclient.so.20文件,原因是hue是用python开发,python连接mysql需要这个文件,这个文件一般mysql安装目录的lib下面有,拷贝到/usr/lib下即可。如果没有可以到官网下载linux-generic-mysql安装包,在lib目录下即可找到。
在安装完成后hive和ozzie可能会启动不了,报错为无法找到com.mysql.jdbc驱动。需要将mysql驱动包分别复制到/opt/cloudera/CDH-5.12.1-1.cdh5.12.1.p0.3/lib/hive/lib和/opt/cloudera/CDH-5.12.1-1.cdh5.12.1.p0.3/lib/oozie/libext/两个目录下,重新启动即可;
最新的CDH安装包中spark版本为1.6,不过对于勇于尝鲜的同学,官方也提供了spark2的升级包,在CDH中spark1和spark2可以共存,但是由于scala版本的兼容性问题,建议只装一个版本。
由于spark依赖于scala所以需要在每个节点安装scala,并配置好SCALA_HOME并将$SCALA_HOME/bin加入PATH中。Scala可以在官网下载,版本选择2.11.x
安装spark需要四个文件:
SPARK2_ON_YARN-2.2.0.cloudera1.jar
下载地址:http://archive.cloudera.com/spark2/csd/SPARK2_ON_YARN-2.2.0.cloudera1.jar
SPARK2-2.2.0.cloudera1-1.cdh5.12.0.p0.142354-xenial.parcel
下载地址:http://archive.cloudera.com/spark2/parcels/2.2.0.cloudera1/SPARK2-2.2.0.cloudera1-1.cdh5.12.0.p0.142354-xenial.parcel
SPARK2-2.2.0.cloudera1-1.cdh5.12.0.p0.142354-xenial.parcel.sha1
下载地址:http://archive.cloudera.com/spark2/parcels/2.2.0.cloudera1/SPARK2-2.2.0.cloudera1-1.cdh5.12.0.p0.142354-xenial.parcel.sha1
manifest.json
下载地址:http://archive.cloudera.com/spark2/parcels/2.2.0.cloudera1/manifest.json
需要注意各个文件的版本必须保持一致。
以下操作在每个节点执行:
创建/opt/cloudera/csd目录,将SPARK2_ON_YARN-2.2.0.cloudera1.jar复制到该目录下。
修改所属用户:
chown cloudera-scmSPARK2_ON_YARN-2.2.0.cloudera1.jar
在master节点:
将/opt/cloudera/parcel-repo目录下的manifest.json重命名,复制前面下载的parcel包,sha文件和manifest.json到/opt/cloudera/parcel-repo目录下。
关闭CDH集群,重启cm server和cm agent,启动CDH集群。
然后点击主机->Parcel页面,看是否多了个spark2的选项。如下图,你这里此时应该是分配按钮,点击,等待操作完成后,点击激活按钮。
激活后,点击你的群集->添加服务,添加spark2服务。注意,如果你这里看不到spark2服务,就请检查你的CSD包和parcel包是否对应,上面的步骤是否有漏掉。正常情况下,应该是能用了。
到此spark2安装完毕,如果需要直接在集群使用spark-shell或者spark-submit,会发现出错,spark2对应的脚本应该是spark2-shell和spark2-submit;
spark2安装完毕后,还有一些后续工作,因为hue中无法使用spark,如果需要在hue中使用sparknotebook需要完成三件事情:
1、 配置hue notebook,参考:https://blogs.msdn.microsoft.com/pliu/2016/06/18/run-hue-spark-notebook-on-cloudera/
2、 安装livy server,下载地址:http://archive.cloudera.com/beta/livy/livy-server-0.3.0.ziplivy server只需下载、解压、配置、启动即可。配置主要配置SPAKR_HOME、HADOOP_CONF_DIR。需要注意的是livy server 默认为local模式运行spark,如果以livy提交spark作业在spark-env.sh或spark-default.conf中指定spark.master不起作用。需要在livy的配置文件中指定。
3、 如果需要用spark读取hive中的数据,需要自己手动将hive-site.xml复制到/etc/spark2/conf目录下。