CentOS7搭建CDH5.16.2集群 HA高可用(包含Spark2等组件部署)
CentOS7搭建CDH5.16.2集群 HA高可用
机器准备:(这里HA是对HDFS和YARN的高可用)
主机名 |
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,前提是先把hive,oozie给添加上
安装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
然后,点击更新,。。
然后启动hive和spark
2、配置YARN高可用