CentOS7搭建CDH5.16.2集群 HA高可用(包含Spark2等组件部署)

CentOS7搭建CDH5.16.2集群 HA高可用

 

机器准备:(这里HA是对HDFSYARN的高可用)

主机名

cpu内存

bigdata-master01

8c32G

bigdata-master02

8c32G

bigdata-datanode01

8c16G

bigdata-datanode02

8c16G

bigdata-datanode03

8c16G

基本软件目录(/usr/local/soft)自定义创建

一、环境准备:

1、改主机名(每台机器都要操作)

vim /etc/hostname

 

 

。。。(省略在其他四台的操作,一模一样)

2、修改hosts映射(每台机器都要操作)

注意:如果是阿里云上的服务器,这里配置的映射IP是内网IP,并在阿里云账户上设置白名单,防止出现ping不通的情况。将当前主机ip放在第一个。

vim /etc/hosts

 

3、每台机器重启

init 6

重启之后发现主机名已经更改(永久更改)

 

互相ping一下看看(千万别侥幸心理,每一台都相互ping一下)

 

。。。(省略其他主机之间互相ping的截图,若不成功检查上面hosts文件和阿里云白名单设置

4、关闭防火墙(每台机器上都要操作)

systemctl stop firewalld    #关闭防火墙

systemctl disable firewalld  #取消开机启动

firewall-cmd --state #查看防火墙状态

 

5、关闭SELINUX(每台机器上都要操作)

vim /etc/selinux/config

将SELINUX设置为disabled

/usr/sbin/sestatus –v   查看状态

 

6、设置SSH免密登录(每台机器上都要操作)

1产生公钥和私钥:ssh-keygen -t rsa (一直回车直即可)

2将公钥分发给所有节点包括本机 ssh-copy-id -i 主机名

3测试ssh访问: ssh root@主机名

举例截图:(这里有五台机器,所以每台机器需要操作 “ssh-copy-id -i 主机名5次)

 

7、时间同步(每台机器上都要操作)

yum install ntp -y

ntpdate -u s2c.time.edu.cn

 

8、安装jdk每台机器上都要操作)

1)查看已经安装java的信息

rpm -qa | grep java

(2)卸载自带的open jdk

rpm -e --nodeps 包名

(3)上传并scp远程拷贝到其余机器上

 

(4)分别解压配置环境变量

tar -zxvf jdk-8u171-linux-x64.tar.gz

 

vim /etc/profile

 

让环境变量生效:

source /etc/profile 

查看java版本:

java -version

 

9、安装mysql(只在主节点安装,这里是bigdata-master01

(1)查看Linux操作系统版本和系统内核版本

cat /etc/redhat-release

uname -r

 

(2)下载对应版本的MySQL安装文件,下载完记得解压  tar -xvf xxx.tar

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar

 

tar -xvf /usr/local/soft/mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar -C /usr/local/soft/mysql_libs/

 

(3)卸载旧版本的MySql (没有的话,则跳过此步骤)

查看旧版本MySql

rpm -qa | grep mysql

将会列出旧版本Mysql的组件列表

我的电脑没有,若有的话:

使用命令rpm -e --nodeps {-file-name}进行移除操作,移除的时候可能会有依赖,要注意一定的顺序。

(4)清除yum里所有mysql依赖包

rpm -qa|grep mysql

yum remove mysql-libs

有的系统可能不太一样,没有mysql-libs,而是mariadb-libs,此时要移除的则是mariadb-libs

rpm -qa|grep mariadb              yum remove mariadb-libs

5)使用rpm命令安装mysql

使用命令rpm -ivh {-file-name}进行安装操作。

按照依赖关系依次安装rpm包 依赖关系依次为common→libs→client→server

rpm -ivh mysql-community-common-5.7.22-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.22-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.22-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.22-1.el7.x86_64.rpm

在阿里云ECS云服务器上安装mysql5.7,当安装 mysql-community-server-5.7.22-1.el7.x86_64.rpm 时报错,报错如下:

[root@i3467544tdsxfrZ ~]# rpm -ivh mysql-community-server-5.7.22-1.el7.x86_64.rpm
warning: mysql-community-server-5.7.22-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
        libaio.so.1()(64bit) is needed by mysql-community-server-5.7.22-1.el7.x86_64
        libaio.so.1(LIBAIO_0.1)(64bit) is needed by mysql-community-server-5.7.22-1.el7.x86_64
        libaio.so.1(LIBAIO_0.4)(64bit) is needed by mysql-community-server-5.7.22-1.el7.x86_64

所以,解决法案就是:

安装libaio

 yum -y install libaio

安装libaio后,再重新安装一次mysql-community-server-5.7.22-1.el7.x86_64.rpm,此时就能正常安装了

(6)启动Mysql

 安装完后,使用命令 service mysqld start  systemctl start mysqld.service 启动MySQL服务。(如果mysql服务无法启动,就重启一下系统)

systemctl start mysqld.service    启动mysql
systemctl status mysqld.service  查看mysql状态
systemctl stop mysqld.service   关闭mysql

查看mysql进程 ps -ef|grep mysql
查看3306端口 netstat -anop|grep 3306

 

(7)登录mysql修改root密码

 由于MySQL5.7.4之前的版本中默认是没有密码的,登录后直接回车就可以进入数据库,进而进行设置密码等操作。其后版本对密码等安全相关操作进行了一些改变,在安装过程中,会在安装日志中生成一个临时密码。

 怎么找到这个临时密码呢?

 使用:grep 'temporary password' /var/log/mysqld.log

即可查询到类似于如下的一条日志记录:

 

pov(>AZS59rd就是随机密码登录进去,然后修改密码,使用命令:

mysql -uroot -p

 

(8)

#修改mysql密码

set password='P@ssw0rd';

#授权远程登陆

grant all privileges on *.* to 'root'@'%' identified by 'P@ssw0rd';

#更新权限

flush privileges;   

 

(9)创建其他组件需要的数据库

#hive

create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

#Hue

create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

#Oozie Server

create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

 

二、安装Cloudera Manager    Server&Agent

1、下载第三方依赖

依次在5台节点(所有Agent的节点)上执行下载需要的第三方依赖

yum -y install chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb

2、上传安装包(每台机器上都要操作)包括上传mysql驱动包(到这里可以拍个快照,大家懂的,比较放心,阿里云上的就是自定义镜像,内容就是cdh安装的前期基础环境准备)

 

CDH-5.16.2-1.cdh5.16.2.p0.8-el7.parcel.sha1 我这里已经改名把1去了

 

3、安装到/opt目录下(每台机器上都要操作)在上传压缩包目录下操作:

tar -zxvf cloudera-manager-centos7-cm5.16.2_x86_64.tar.gz -C /opt/

 

4、配置CM Agent

1)cm的安装包的server和agent都是同一个包,启动的时候启动命令指定为server还是agent;
2)cm有一个工作目录,需要我们来创建;创建一个用户;修改agent的配置,给它指定server的位置;那个端口7182是server和agent通信的端口;

(3)server_host配置为server的名字;(每台机器上都要操作)
vim /opt/cm-5.16.2/etc/cloudera-scm-agent/config.ini 中 server_host

config.ini文件设置server_host=主节点名字或IP

 

(4)创建用户cloudera-scm(每台机器上都要操作)

useradd --system --home=/opt/cm-5.16.2/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm

(5)创建palcel目录

创建parcel目录,这个目录是server和agent用来接收和发送数据的目录,server端的parcel-repo这个目录会把所有的安装文件全部下载到此目录,而agent也需要安装包,parcels就是用来存储指定的安装包的,当然需要有权限能操作这些目录;

Server节点

[root@bigdata-master01 cloudera]# mkdir -p /opt/cloudera/parcel-repo

[root@bigdata-master01 cloudera]# chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo

 

Agent节点

[root@bigdata-master01 cloudera]# mkdir -p /opt/cloudera/parcels

[root@bigdata-master01 cloudera]# chown cloudera-scm:cloudera-scm /opt/cloudera/parcels

 

注意:这儿我们master节点既是server也是agent,所以master节点也创建parcels

CDH安装包移到cloudera/parcel-repo下面,并修改其中后缀为sha1的文件为sha,(还记得咱们之前已经把1去过了嘛,这里就直接cp过来就行啦)如下:

 

(6)配置CMServer的数据库(每台机器上都要操作)

[root@bigdata-master01 parcel-repo]# mkdir -p /usr/share/java

[root@bigdata-master01 parcel-repo]# cd /usr/share/java/

[root@bigdata-master01 java]# ll

total 0

[root@bigdata-master01 java]# pwd

usr/share/java

[root@bigdata-master01 java]# cp /usr/local/soft/mysql-connector-java-5.1.49.jar /usr/share/java/mysql-connector-java.jar

Cloudera Manager规定了在这个目录下找该名称的jar包。(注意:必须要改名字)

mysql数据库的驱动jar包放到/opt/cm-5.16.2/share/cmf/lib/目录下

cp /usr/local/soft/mysql-connector-java-5.1.49.jar /opt/cm-5.16.2/share/cmf/lib/

(7)初始化数据库(bigdata-master01上执行)

/opt/cm-5.16.2/share/cmf/schema/scm_prepare_database.sh mysql cm -hbigdata-master01 -uroot -pKunzhan12345! --scm-host bigdata-master01 scm scm scm

 

可能会报错:Error Code: 1044. Access denied for user 'root'@'%' to database

1)先删除cm数据库

2)回到安装mysql那里按照下面许多箭头的截图执行一遍,再执行初始化数据库就没问题了。

5、启动CM Manager&Agent服务(注意:启用CM服务时要确保mysql启动)

cd /opt/cm-5.16.2/etc/init.d/

Server节点执行:(bigdata-master01执行)

./cloudera-scm-server start

 

Agent节点执行:(5台机器都执行

./cloudera-scm-agent start

 

查看7180端口是否被占用   netstat -apn|grep 7180

 

当端口已被占用,就可以用http://Server节点IP:7180打开登录页面,用户名和密码都是admin登录进去选择5台机器后到下面页面。

 

 

这个警告如果严格按照整理的步骤搭建应该不会出现,若出现的话漏了将hosts文件IP映射没有将当前主机IP设为第一个,并且存在重复的IP

 

如下禁用此设置,然后将同一命令添加到 /etc/rc.local 等初始化脚本中,以便在系统重启时予以设置。以下主机将受到影响:
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
先执行上面2条命令,再将其添加到/etc/rc.local文件中

 

再次检查主机的正确性

 

组件先选择hdfs,yarn,zookeeper

 

 

默认就好,继续

 

等待启动完毕。继续

 

点击完成

 

 

看到上面截图页面就代表快接近成功了,别急,让我们看下进程。

jps看下进程:

bigdata-master01:

 

bigdata-master02:

 

bigdata-datanode01-bigdatanode03:

 

 

恭喜!初步搭建已经成功!(将服务全部停止,再拍个快照,cdh基础安装已经完毕)

三、添加服务:

1、添加hive

 

先添加驱动包cp /opt/cm-5.16.2/share/cmf/lib/mysql-connector-java-5.1.49.jar /opt/cloudera/parcels/CDH-5.16.2-1.cdh5.16.2.p0.8/lib/hive/lib/

 

 

Master节点是不存数据的 和datanode节点一致

 

配置数据库信息

 

点击测试连接,继续

 

默认就好,继续。

 

 

点击继续。

 

 

2、添加spark2.4服务

提前准备好文件:(一会结束上传到网盘中,若忘记或者没找到,联系本人)

 

1安装前可以停掉集群和Cloudera Management Service,也可以不停,但是待会还是要停止重启的。

2)上传CSD包到每台服务器上的/opt/cloudera/csd目录,并且修改文件的用户和组。注意如果本目录下有其他的jar包,把删掉或者移到其他目录----cdn包放在/opt/cloudera/csd目录才能被识别

 

(3)上传

manifest.json

SPARK2-2.4.0.cloudera2-1.cdh5.13.3.p0.1041012-el7.parcel

SPARK2-2.4.0.cloudera2-1.cdh5.13.3.p0.1041012-el7.parcel.sha1到主节点,并且重新命名

mv SPARK2-2.4.0.cloudera2-1.cdh5.13.3.p0.1041012-el7.parcel.sha1 SPARK2-2.4.0.cloudera2-1.cdh5.13.3.p0.1041012-el7.parcel.sha

到机器master的/opt/cloudera/parcel-repo目录下。注意:将   SPARK2-2.4.0.cloudera2-1.cdh5.13.3.p0.1041012-el7.parcel.sha1重命名为  SPARK2-2.4.0.cloudera2-1.cdh5.13.3.p0.1041012-el7.parcel.sha。如果有其他的安装包,不用删除 ,但是如果本目录下有其他的重名文件比如manifest.json文件,把它重命名备份掉。然后把那3个parcel包的文件放在这里。

 

4如果刚刚没有停掉CM和集群,现在将他们停掉。然后运行命令。

(5)CM和集群启动起来。然后点击主机->Parcel页面,看是否多了个spark2的选项。如下图,你这里此时应该是分配按钮,点击,等待操作完成后,点击激活按钮

 

 

(6)激活后,点击你的群集-》添加服务,添加spark2服务。注意,如果你这里看不到spark2服务,就请检查你的CSD包和parcel包是否对应,上面的步骤是否有漏掉。正常情况下,应该是能用了。我的集群到此已经OK.

 

 

 

Spark中的服务选择主机(history选一台,Gateway所有主机都要选):

 

 

 

 

重启一下

 

这时候提交spark任务会报错

第一种错误:

 

修改文件权限:

sudo -u hdfs hadoop fs -chmod 777 /user

 

第二种错误:

 

修改spark-env.sh配置文件,在文件末尾添加hadoop运行环境:

 

export SPARK_LOCAL_DIRS=/mnt/disk1/sparktmp1

export JAVA_HOME=/usr/local/soft/jdk1.8.0_171

export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop

export SPARK_DIST_CLASSPATH=$(${HADOOP_HOME}/bin/hadoop classpath)

再次提交就没问题了。

3、添加hue,前提是先把hiveoozie给添加上

安装OOZIE,跟安装HIVE的方式一样所以省略,同样在安装过程中可能会报错,需要将mysql的连接驱动添加到/opt/cloudera/parcels/CDH-5.9.1-1.cdh5.9.1.p0.4/lib/oozie/libext和/var/lib/oozie这两个目录中

HUE的安装,为了报错,我们先把错误可以解决的解决了。(这里坑已经踩过,放心执行吧!)

需修改一(坑1):

 

这是因为装CDH的时候,将系统自带的mysql依赖删除了,所以需要从别的相同系统拷贝一个出来放到/usr/lib64/mysql目录下

ln–s libmysqlclient_r.so.18.0.0 libmysqlclient_r.so.18

 

然后 vi /etc/ld.so.conf 后面增加一条记录:/usr/lib64/mysql (libmysqlclient.so.18 和libmysqlclient.so.18.0.0所在目录)运行 ldconfig 命令,让其生效。

别急,还没结束,这里如果再测试连接数据库会有个启动失败,接着执行下面:

需修改二:(坑2:

需要提前安装环境  httpd, mod_ssl为了保险起见,每台机器都装一下

yum install httpd

yum install mod_ssl

安装好之后, 重启就好了

 

四、配置HA

1、配置DHFS高可用

 

 

 

 

 

 

 

我们来测试一下:

 

 

 

 

 

上面有个hive的警告,我们来解决一下:

spark再停止hive

 

然后,点击更新,。。

 

 

 

然后启动hivespark

 

 

2、配置YARN高可用

 

 

 

 

原文地址:https://www.cnblogs.com/wyh-study/p/13885517.html