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高可用

CentOS7搭建CDH5.16.2集群 HA高可用(包含Spark2等组件部署)的更多相关文章

  1. hadoop 集群HA高可用搭建以及问题解决方案

    hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...

  2. Ubuntu 16.04上搭建CDH5.16.1集群

    本文参考自:<Ubuntu16.04上搭建CDH5.14集群> 1.准备三台(CDH默认配置为三台)安装Ubuntu 16.04.4 LTS系统的服务器,假设ip地址分布为 192.168 ...

  3. CDH5.16.1集群新增节点

    如果是全新安装集群的话,可以参考<Ubuntu 16.04上搭建CDH5.16.1集群> 下面是集群新增节点步骤: 1.已经存在一个集群,有两个节点 192.168.100.19 hado ...

  4. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

    1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...

  5. K8S集群Master高可用实践

    K8S集群Master高可用实践    https://blog.51cto.com/ylw6006/2164981 本文将在前文基础上介绍k8s集群的高可用实践,一般来讲,k8s集群高可用主要包含以 ...

  6. Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试

    文章目录 Redis集群的安装(Redis3+CentOS) 参考文档 Redis 集群介绍.特性.规范等(可看提供的参考文档+视频解说) Redis 集群的安装(Redis3.0.3 + CentO ...

  7. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  8. 15套java架构师、集群、高可用、高可扩 展、高性能、高并发、性能优化Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

  9. Nginx+Zuul集群实现高可用网关

    代码参考:https://github.com/HCJ-shadow/Zuul-Gateway-Cluster-Nginx Zuul的路由转发功能 前期准备 搭建Eureka服务注册中心 服务提供者m ...

  10. Rabbitmq安装、集群与高可用配置

    历史: RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多 ...

随机推荐

  1. k8s强制删除pod节点

    场景 突然get pod的时候,发现一堆的错误,得把它干掉,否则很不爽. 解决方案 正常过期的状态,比如Evicted ,用正常指令 kubectl -n jingu get pods | grep ...

  2. 开源产品测评之 SQL 上线能力

    背景 近期,我司准备引入一款 SQL 审核产品来供内部流程使用,解决目前 SQL 人工上线的流程管控问题,目标是对业内的开源产品进行调研,选型一款作为落地方案,后期如果内部有需求可能会进行二次开发.我 ...

  3. 利用H2的自定义函数更好的支持测试

    在写DAO层的单元测试时,用mock的写法意义不大,因为DAO层的测试更多的关注是Java对象的传递和生成SQL的正确性,所以需要链接真实的数据库. 但是对于单元测试,真实的数据库是很重的,还要依赖于 ...

  4. Qt编写的项目作品18-数据导入导出(xls/pdf)及打印示例

    一.功能特点 组件同时集成了导出数据到csv.xls.pdf和打印数据. 所有操作全部提供静态方法无需new,数据和属性等各种参数设置采用结构体数据,极为方便. 同时支持QTableView.QTab ...

  5. Qt音视频开发20-海康sdk本地播放

    一.前言 海康sdk中包含了MP4解码播放库,对应的API函数都是PlayM4开头的,顾名思义播放MP4,海康的视频默认可以保存成MP4文件,可以用通用的播放器来播放,这就是为啥前面好多篇文章讲到的各 ...

  6. Qt音视频开发10-ffmpeg控制播放

    一.前言 很多人在用ffmpeg做视频流解码的时候,都会遇到一个问题,如何暂停,如果打开的是本地视频文件,暂停你只需要停止解码即可,但是视频流你会发现根本没用,一旦你停止了解码,下次重新解码的时候,居 ...

  7. Python 潮流周刊#83:uv 的使用技巧(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  8. 【量化读书笔记】【打开量化投资的黑箱】CH.04.风险模型

    风险管理不仅仅是规避风险和减少损失,是通过对敞口实施有目的的选择和规模控制来提高收益的质量和稳定性. (注:敞口,一般指金融活动中存在金融风险的部位以及受金融风险影响的程度) 本质上风险模型是为阿尔法 ...

  9. 关于前端上传excell时间的问题

    当前端导入excell里的数据时,只能获取到下面类似的这种数据 Excel存储的日期是从1900年1月1日开始按天数来计算的,也就是说1900年1月1日在Excel中是1. 转化的思路和对Excel中 ...

  10. 关于存入sessionStorage中boolean值拿出来为字符串

    上面是html部分,然后定义了变量 定义方法 在mounted中获取,然后刷新页面,打印类型为字符串 解决办法