欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

CDH 5.12.1离线部署指南(附spark2.2.0集成指南)

程序员文章站 2022-03-23 20:34:08
CDH 5.12.1离线部署指南(附spark2.2.0集成指南),由于国内的网络原因,CDH在国内几乎无法实现在线安装,本文将介绍CDH离线安装方式,所有安装包下载后传输到内网安装,由于...

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安装。

三、???????环境准备(全程root用户)

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

四、???????ClouderaManager安装配置

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

五、???????CDH安装配置

启动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/两个目录下,重新启动即可;

附:Spark2安装

最新的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目录下。