前言
这里记录一下如何使用CDH部署大数据集群。
环境准备
这里准备了3台虚拟机用于本次的部署:
主机名 | IP | 角色 |
---|
cdh-node1 | 192.168.122.52 | CM Server Mysql 数据节点 CM Agent |
cdh-node2 | 192.168.122.53 | 数据节点 CM Agent |
cdh-node3 | 192.168.122.54 | 数据节点 CM Agent |
操作系统为:CentOS 7.4
额外的资源情况
dns server: 192.168.122.1
如果不使用dns server需要在每个节点的/etc/hosts
文件中添加如下内容:
1
2
3
| 192.168.122.52 cdh-node1.nil.ml
192.168.122.53 cdh-node2.nil.ml
192.168.122.54 cdh-node3.nil.ml
|
节点配置
设置(每个节点)只有内存使用到90%才可以使用swap
编辑/etc/sysctl.conf
文件:
添加内容如下:
使其生效:
1
| sysctl -p /etc/sysctl.conf
|
设置hugepage
相关参数:
编辑/etc/rc.local
文件:
在文件末尾追加如下内容:
1
2
| echo never >/sys/kernel/mm/transparent_hugepage/defrag
echo never >/sys/kernel/mm/transparent_hugepage/enabled
|
保存退出。
直接给/etc/rc.local
文件添加执行权限是不生效的,需要给/etc/rc.d/rc.local
这个原文件添加执行权限:
1
| chmod +x /etc/rc.d/rc.local
|
启动并开机启动rc-local
服务:
1
2
| systemctl enable rc-local
systemctl start rc-local
|
配置主机名,ip并关闭selinux和防火墙,最后重启:
cdh-node1.nil.ml
1
2
3
4
5
6
| hostnamectl set-hostname cdh-node1.nil.ml
nmcli con mod eth0 ipv4.method manual ipv4.addresses 192.168.122.52/24 ipv4.dns "192.168.122.1, 114.114.114.114" ipv4.gateway 192.168.122.1 connection.autoconnect yes
nmcli con up eth0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
systemctl disable firewalld
reboot
|
cdh-node2.nil.ml
1
2
3
4
5
6
| hostnamectl set-hostname cdh-node2.nil.ml
nmcli con mod eth0 ipv4.method manual ipv4.addresses 192.168.122.53/24 ipv4.dns "192.168.122.1, 114.114.114.114" ipv4.gateway 192.168.122.1 connection.autoconnect yes
nmcli con up eth0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
systemctl disable firewalld
reboot
|
cdh-node3.nil.ml
1
2
3
4
5
6
| hostnamectl set-hostname cdh-node3.nil.ml
nmcli con mod eth0 ipv4.method manual ipv4.addresses 192.168.122.54/24 ipv4.dns "192.168.122.1, 114.114.114.114" ipv4.gateway 192.168.122.1 connection.autoconnect yes
nmcli con up eth0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
systemctl disable firewalld
reboot
|
NTP Server
在集群中很重要的一个就是时间同步服务,时间不一致可能导致出现各种问题。
首先每个节点设置同样的时区:
1
| timedatectl set-timezone "Asia/Shanghai"
|
在cdh-node1
节点上配置NTP服务器,首先安装chrony
:
修改/etc/chrony.conf
配置文件,修改内容如下:
1
2
| server ntp.aliyun.com iburst
allow 192.168.122.0/24
|
开机启动chronyd
服务并启动:
1
| systemctl enable chronyd.service --now
|
查看服务状态:
1
| systemctl status chronyd.service
|
其他节点上也部署 chrony:
修改/etc/chrony.conf
配置文件,修改内容如下:
1
| server cdh-node1.nil.ml iburst
|
重启chronyd
服务:
1
| systemctl restart chronyd.service
|
查看同步状态:
安装数据库
在cdh-node1
节点上配置数据库
创建并编辑/etc/yum.repos.d/mysql.repo
内容如下:
1
2
3
4
5
| [mysql57]
name=mysql57
baseurl = https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql57-community-el7/
enable = 1
gpgcheck = 0
|
安装mysql:
1
| yum install mysql-community-server -y
|
配置数据库
首先启动mysql并将开机启动:
1
| systemctl enable mysqld --now
|
查看默认的mysql密码:
1
2
| grep password /var/log/mysqld.log
2021-07-09T13:45:25.747757Z 1 [Note] A temporary password is generated for root@localhost: JPwlGsN)q4,)
|
使用这个密码连接到数据库:
更改默认的数据库密码(不建议使用弱密码):
1
2
3
| set global validate_password_policy=0;
set global validate_password_length=6;
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
|
创建需要用到的数据库并授权:
1
2
3
4
5
| CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE am DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE hive DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
|
创建登录用户并授权:
1
2
3
4
5
6
| grant all on scm.* to 'scm'@'%' identified by '123456';
grant all on am.* to 'am'@'%' identified by '123456';
grant all on hive.* to 'hive'@'%' identified by '123456';
grant all on oozie.* to 'oozie'@'%' identified by '123456';
grant all on hue.* to 'hue'@'%' identified by '123456';
FLUSH PRIVILEGES;
|
配置局域网yum源
这里取决于应用场景,比如说是离线的内网环境就需要准备一个离线的源来让各个节点获得服务运行的必要依赖。
这里用到了一个Connector,可以在里面下载rpm包的版本。
这里使用httpd进行发布。
部署httpd
删除原有的配置文件;
1
2
3
| rm -f /etc/httpd/conf.d/welcome.conf
rm -f /etc/httpd/conf.d/autoindex.conf
rm -f /etc/httpd/conf.d/userdir.conf
|
创建并编辑局域网yum源vhost文件:
1
| vi /etc/httpd/conf.d/cdh.conf
|
内容如下:
1
2
3
4
5
6
7
8
9
10
| <VirtualHost cdh-node1.nil.ml:80>
DocumentRoot "/var/www/cloudera-repos"
ServerName cdh-node1.nil.ml
</VirtualHost>
<Directory "/var/www/cloudera-repos">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
|
保存退出之后将httpd加入开机启动并启动:
1
| systemctl enable httpd --now
|
查看服务状态:
上传所有的包到cdh-node1
节点的/var/www/cloudera-repos
目录:
确保服务器上安装了rsync 如果没有安装可以使用包管理进行安装
1
| rsync -avz cloudera-repos -e ssh root@192.168.122.50:/var/www
|
在cm节点上配置cm的yum源:
1
| vi /etc/yum.repos.d/cloudera-repo.repo
|
内容如下:
1
2
3
4
5
| [cloudera-repo]
name=cloudera-repo
baseurl=http://cdh-node1.nil.ml/cm6/6.2.1/redhat7/yum/
enabled=1
gpgcheck=0
|
安装CM
安装jdk(cdh-node1
节点)
1
| yum install -y http://cdh-node1.nil.ml/cm6/6.2.1/redhat7/yum/RPMS/x86_64/oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
|
配置/etc/profile
(cdh-node1
节点)
编辑/etc/profile
文件:
在末尾追加如下内容:
1
2
3
4
| export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
|
保存退出之后重新载入一下:
验证:
JDBC(cdh-node1
节点)
1
| yum install http://cdh-node1.nil.ml/mysql-connector-java-8.0.25-1.el7.noarch.rpm -y
|
安装cm-server
cdh-node1
节点安装:
1
| yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server -y
|
使用创建数据库的脚本:
1
| /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm 123456
|
说明一下这个脚本的参数:
mysql
数据库类型这里我们使用的是mysqlscm
数据库scm
用户123456
密码
启动:
1
2
| systemctl start cloudera-scm-server
systemctl enable cloudera-scm-server
|
查看启动日志直到出现:
1
2
| 2021-07-27 15:24:05,530 INFO WebServerImpl:org.eclipse.jetty.server.Server: Started @55780ms
2021-07-27 15:24:05,530 INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server.
|
这个时候我们用浏览器打开
http://cdh-node1.nil.ml:7180
就可以看到CM的管理页面了:

默认的账户和密码是:
用户名:admin
密码:admin
部署集群
首先登陆CM的页面:
http://cdh-node1.nil.ml:7180
登陆之后会到欢迎界面:
这里有许多的内容比如说release notes,新的功能和已知的一些问题,建议好好阅读一下。
选择继续后到了用户协议的页面,这里建议阅读一下,如果没有啥疑问选择同意然后选择继续:

这里让我们选择的我们需要的版本,这里提供了三种:
- 免费(实际上现在也是收费了)
- 60天的企业适用
- 输入企业许可证
根据实际的需要选择需要的版本,这里选择免费的许可然后选择继续:

这里我们跳到了添加集群的欢迎界面:

同样的这里也有一些快速链接可以参考查看,比如说安装手册、支持的操作系统、支持的数据库、支持的JDK版本。
这里让我们设置集群的名称,我这里保持默认的Cluster 1
。当然你也可以设置自己想要的集群名称以方便区分未来的不同环境的集群:

这里我们需要指定我们安装的主机:
这里输入三台节点的主机名:
1
2
3
| cdh-node1.nil.ml
cdh-node2.nil.ml
cdh-node3.nil.ml
|
然后按search
按钮,搜索的结果如下:

和我们之前规划的一致选择继续:

这里的Custom Repository 我们不需要进行修改,我们需要设置一下Parcels的地址,点击More Options
:
这里改成我们内网源的url,选择保存更改。
现在我们发现有一个CDH可以,同时也可以进行安装了:

现在我们来到了接受JDK许可的界面,选择接受然后按继续:

这里是比较重要的一个步骤,登陆凭证,如果你是密钥对登陆需要将私钥复制粘贴进来,最好这个私钥的公钥已经发送到每个节点上了,或者是所有节点的密码一致:

在选择继续后就进入到了安装agent的环节,耐心等待安装完成:
在agent安装完成之后会自动跳到安装Parcels的界面:

安装parcels完成之后会自动跳到添加集群的最后一个界面就是检查集群的界面,这里有两个检查一个是检查网络,一个是检查节点:

根据测试的结果如果有不能通过的需要检查原因修复之后重新检查直至检查通过:
通过后选择继续I understand the risks, let me continue with cluster creation.
现在我们来到了添加服务的页面:

这里我们选择自定义服务:

这里选择 HDFS,Zookeeper然后选择继续:
在这个角色这里,注意zookeeper和datanode服务要选择所有的节点(如果是双数节点比如说6那么最好减掉一个节点或者是添加一个节点)
这里设置一下Activity Monitor的数据库,然后点一下测试链接,没有问题之后选择继续。
这里可以设置一些HDFS块的大小,DataNode,NameNode的存储位置以及报警等等可以根据实际的需求进行设置:

这里就是实际安装集群的一些细节,如果出现错误可以在这里进行查看修改后重新检查:

最后选择完成:

完成安装之后我们就可以进入到集群的状态页面啦:

故障排除
这里我们可以看到有1个健康告警,在All Health Issues
中可以看到是一个Erasure Coding Policy Verification Test
:

我们可以点进去看详细的信息:
这里我们可以看到提示的信息开启这个功能需要9个DataNode,我们当前只有3个所以这个功能是不能使用的,我们可以选择添加一些DataNode来启动或者是选择关掉。
这里选择关掉这个功能:

然后我们回到HDFS的主页面,这里可以看到有一个类似于电源的按钮:
这个其实是当我们更改了一个服务的配置之后都会有的一个提示,我们点进去:

这里类似于一个diff,展示我们更改的内容。这里可以看到dfs.namenode.ec.system.default.policy
的值从RS-6-3-1024k
改为了空,我们选择重启服务。
这里提示我们是否要将client的配置文件也重新部署一下,这里要注意选择上,节点配置不一样可能出现奇奇怪怪的问题:
然后选择重启。
同样的这里也有一个指向命令详细的输出:

选择完成之后我们回到了主页,这里可以看到刚刚的健康警告没有了,但是还有3个配置警告:

我们点进去看一下都是什么原因:

Java Heap Size
4096non-Java memory size
一个是 2GiB 2048 一个是 6GiB 6144
这里我们按照推荐的大小进行设置即可,设置完成之后重启:

最终可以看到服务都正常了:

添加服务
我们这里以添加一个hive服务为例子,选择添加服务

我们首先要选择添加yarn(hive依赖于yarn去调度,所以我们得先创建yarn):

资产的角色:


这里可以看到命令的详细信息:

最终可以看到完成:

接下来我们添加hive的服务
选择hive:


节点的角色:

初始化数据库:
查看变更:
命令详情:
摘要:

完成:

## 后记
CDH的部署没有那么难,跟我一起念:
先把资源规划好,时间同步最重要。
脑子清醒手要慢,笔记文档要跟上。
集群出错不要慌,先看提示后查错。
你学会了吗?
参考资料
Install CDH