一、前言
1、目的
通过增加计算节点使服务容量产生线性增长的能力。在集群计算能力浪费的情况下,减容避免集群资源浪费
2、可伸缩应用程序特点:
只需要增加或减少资源,而不需要对应用程序本身进行大量修改。在集群资源紧张的情况下可通过动态的扩容节点来增加集群的计算能力。
3、内容概述
3.1、扩容
创建DataNode模板
- DataNode节点前置准备
- 上线DataNode节点并应用模板
-
3.2、减容
节点强制下线
-
4、测试环境
-
5、前置条件
CDH集群已安装成功并正常运行
-
二、集群扩容
1、扩容前集群环境
集群信息
- HDFS容量
- YARN资源池情况
2、创建DataNode节点主机模板
- 登录Cloudera Manager Web界面,进入【主机模板】界面
- 点击“创建”,创建一个datanode主机模板
- 为模板选择角色,点击【创建】,完成DataNode模板创建。
3、DataNode节点的前置准备
3.1、修改主机名、修改并同步IP映射
修改主机名(exit退出shell,重新进入生效)
hostnamectl set-hostname cdh2.macro.com
配置hosts的ip映射
vim /etc/hosts
---------复制如下内容---------
192.168.0.200 cdh1.macro.com
192.168.0.221 cdh2.macro.com
192.168.0.222 cdh3.macro.com
同步到所有节点
-------分发同步hosts文件到所有节点-------
scp /etc/hosts root@cdh1.macro.com:/etc
scp /etc/hosts root@cdh3.macro.com:/etc
3.2、添加yum源
确保OS、Cloudera Manager的yum源可以正常使用(集群其他节点repo文件scp到当前节点)
cd /etc/yum.repos.d/
scp cm.repo os.repo root@192.168.0.221:/etc/yum.repos.d/
yum repolist命令检查所有源是否可用(状态不能为0)
yum repolist
3.3、修改基础前置条件
禁用SELinux
setenforce 0
集群所有节点修改/etc/selinux/config文件如下(重启才能生效,所以需要配置上面的临时关闭):
vi /etc/selinux/config
------修改如下信息,限制开机自启------
SELINUX=disabled
关闭防火墙
service firewalld stop
service firewalld enable
service firewalld status
设置swap为1
sysctl vm.swappiness=1
echo 1 > /proc/sys/vm/swappiness
cat /proc/sys/vm/swappiness
关闭透明大页面
echo never > /sys/kernel/mm/transparent_hugepage/defrag
cat /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/enabled
设置开机自动关闭
vim /etc/rc.d/rc.local
------复制如下内容------
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
赋权限
cat /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
ls -l /etc/rc.d | grep rc.local
3.4、配置时钟同步
下载ntp时钟服务
yum -y install ntp
编辑ntp.conf文件同步主机时间如下
vim /etc/ntp.conf
-----注释部分行,添加同步主节点时间如下-------
server 192.168.0.200
重启时钟,加入开机自启
service ntpd start
service ntpd enable
service ntpd status
4、安装Kerberos客户端
- 由于集群启用了Kerberos服务,所以需要在Gateway节点安装Kerberos客户端
在Gateway节点上执行如下命令
yum -y install krb5-libs krb5-workstation
安装成功后查看安装的RPM包
rpm -qa | grep krb5
将CM集群中的/etc/krb5.conf文件拷贝至该Gateway节点/etc下
scp /etc/krb5.conf root@cdh2.macro.com:/etc/
在GateWay节点测试Kerberos客户端是否部署成功,如下图表示成功。
kinit userkrb
klist
5、上线DataNode节点
点击【所有主机】,进入主机列表
- 点击【向集群添加新主机】
- 点击“继续”,输入要添加的新主机ip或hostname
- 点击“搜索
- 选择需要添加到集群的主机,点击“继续”
- 自定义Cloudera Manager Agent的parcel库地址,点击【继续】
- 勾选Java开发工具包及无限制强度加密策略文件。
- 输入root用户密码,点击[继续]
- 向集群添加新主机,等待安装成功,点击【继续】。
- 向新主机分发并激活parcel,等待激活成功,点击【继续】
- 主机正确性检查通过,点击“继续”,选择主机模板
- 点击“继续”,启动主机角色
- 启动成功后,点击“继续”,部署客户端配置
- 点击“完成”,进入主机列表
- 至此,向CDH已完成向CDH集群添加数据节点,节点上线后各服务节点磁盘使用情况
6、扩容后集群环境
- 节点信息
- HDFS容量
- YRAN资源
7、更新节点
7.1、重启相应服务更新集群拓扑信息
- 可以看到新添加的DataNode节点,磁盘几乎未使用,说明暂未有数据写入该数据节点。接下来对DataNode节点进行数据平衡操作。
- CM主页根据提示重启相应服务,提示需要重启或刷新相应配置,主要是更新集群的拓扑信息。
- 如果集群的NameNode、ResourceManager等服务启用了高可用在选择滚动重启,这样不会影响生产环境作业的运行
- 点击【立即重启】开始执行
- 等待重启完成点击【完成】
7.2、执行Balance操作
- Balance是为了平衡数据,如果不执行该操作,集群将会把新的数据都存放在新的datanode上,这样会造成数据分布不平衡,影响MR的工作效率。
- 进入HDFS服务,选择“重新平衡”菜单
- 点击“重新平衡”,执行重新平衡操作
- 执行成功
- Balance参数说明:
重新平衡阈值:值越低各节点越平衡,但消耗时间也更长,默认为10%
- 查看数据分布情况(通过HDFS的http://192.168.0.200:50070界面可以看到在执行了“重新平衡”操作后,新加入的DataNode节点磁盘的使用率和其它节点磁盘使用率相差在10%以内,如果需要降低各节点磁盘使用率差则要调整“重新平衡阈值”该值越低节点磁盘使用率差越低)。
三、集群减容
1、节点强制下线
1.1、计算资源
- 计算节点下线前DataNode节点磁盘使用情况和Yarn资源使用情况统计
- Yarn资源统计
1.2、下线节点
- 通过Cloudera Manager的进入所有主机列表
- 选中要下线的节点,点击从“从集群中删除”
- 点击“集群中删除”
- 去掉两个勾选,点击【确认】
- 等待执行成功点击【关闭】
- 删除成功。Hadoop相关角色已从该节点删除,但是依然存在Hosts列表中,受Cloudera Manager管理
- 将该节点从Cloudera Manager移除
- 点击“确认”,可以看到该节点已从集群中移除
1.3、查看集群资源情况
- 集群中DataNode节点磁盘使用情况统计
- Yarn资源统计
2、节点正常下线
- 计算节点下线前集群的DataNode节点磁盘使用情况统计
- 集群Yarn资源情况统计
- 通过Cloudera Manager的进入所有主机列表
- 选中要下线的节点,点击从【从集群中删除】
- 从集群中删除192.168.0.221节点
- 等待将该节点从集群中删除,解除授权的过程中,该下线节点上的数据也会被自动复制到其他的DataNode节点,如果下线节点的数据量较大,此步骤会耗费非常长的时间。
- 下线成功
- 选中该节点从Cloudera Manager中移除
7.点击“确认”,将该节点移除Cloudera Manager
- 可以看到172.31.7.172节点已被移除。
3、查看集群资源情况
- 登入192.168.0.200:50070查看集群资源使用情况
- 集群Yarn资源情况统计
四、集群增加Gateway角色
1、环境描述
1.1、内容概述
- 创建Gateway节点的主机模板
- Gateway节点的前置准备
- 增加Gateway节点到集群并应用主机模板
-
1.2、测试环境
CDH5.16.2
- 采用root用户操作
-
1.3、前置条件
CDH5.16.2集群运行正常
- Gateway节点已准备,并准备好前置
2、创建Gateway节点的主机模板
1、CM 的Web管理界面,点击【创建主机模板】
2、选择【创建】进行创建主机模板
3、命名模板,选择各个服务勾选相应的GateWay角色,点击【创建】
4、创建成功如下图所示:
3、Gateway节点的前置准备
3.1、修改主机名、修改并同步IP映射
修改主机名(exit退出shell,重新进入生效)
hostnamectl set-hostname cdh4.macro.com
配置hosts的ip映射
vim /etc/hosts
---------复制如下内容---------
192.168.0.200 cdh1.macro.com
192.168.0.221 cdh2.macro.com
192.168.0.222 cdh3.macro.com
192.168.0.223 cdh4.macro.com
同步到所有节点
-------分发同步hosts文件到所有节点-------
scp /etc/hosts root@cdh1.macro.com:/etc
scp /etc/hosts root@cdh2.macro.com:/etc
scp /etc/hosts root@cdh3.macro.com:/etc
3.2、添加yum源
确保OS、Cloudera Manager的yum源可以正常使用(集群其他节点repo文件scp到当前节点)
scp /etc/yum.repos.d/* root@cdh4.macro.com:/etc/yum.repos.d/
yum repolist命令检查所有源是否可用(状态不能为0)
yum repolist
3.3、修改基础前置条件
禁用SELinux
setenforce 0
集群所有节点修改/etc/selinux/config文件如下(重启才能生效,所以需要配置上面的临时关闭):
vi /etc/selinux/config
------修改如下信息,限制开机自启------
SELINUX=disabled
关闭防火墙
service firewalld stop
service firewalld enable
service firewalld status
设置swap为1
sysctl vm.swappiness=1
echo 1 > /proc/sys/vm/swappiness
cat /proc/sys/vm/swappiness
关闭透明大页面
echo never > /sys/kernel/mm/transparent_hugepage/defrag
cat /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/enabled
设置开机自动关闭
vim /etc/rc.d/rc.local
------复制如下内容------
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
赋权限
cat /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
ls -l /etc/rc.d | grep rc.local
3.4、配置时钟同步
下载ntp时钟服务
yum -y install ntp
编辑ntp.conf文件同步主机时间如下
vim /etc/ntp.conf
-----注释部分行,添加同步主节点时间如下-------
server 192.168.0.200
4、安装Kerberos客户端
- 由于集群启用了Kerberos服务,所以需要在Gateway节点安装Kerberos客户端
在Gateway节点上执行如下命令
yum -y install krb5-libs krb5-workstation
安装成功后查看安装的RPM包
rpm -qa | grep krb5
将CM集群中的/etc/krb5.conf文件拷贝至该Gateway节点/etc下
scp /etc/krb5.conf /etc/krb5.conf root@cdh4.macro.com:/etc/
在GateWay节点测试Kerberos客户端是否部署成功,如下图表示成功。
kinit userkrb
klist
5、增加Gateway节点的集群并应用主机模板
主页进入【所有主机】页面
- 点击【向群集添加主机】
- 点击【继续】
- 输入Gateway节点的IP或者hostname,点击【搜索】
- 点击【继续】
- 选择【自定义存储库】,选择输入Cloudera Manager的yum源http地址,点击【继续】
- 勾选Java的两个选项,点击【继续】
- 输入Gateway节点的SSH登录密码,并点击【继续】
- 等待cloudera-scm-agent在Gateway节点上安装
- 安装完成点击【继续】
- 等待分发Parcel包并激活完成,点击【继续】
- 主机检查,点击【继续】
- 选择主机模板
- 点击【继续】向集群中添加新主机,等待执行成功
- 点击【继续】,部署客户端配置
- 点击完成,查看主机列表GateWay节点的角色信息
HDFS命令测试
hadoop fs -ls /
Hive命令测试
hive
hadoop命令向集群提交作业
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 1
五、总结
- 强制下线不勾选【解除授权角色】和【跳过管理角色】,直接将该节点上面的所有角色停止并删除节点上的角色,不会处理该节点上的数据,会导致集群Block缺失。
勾选【解除授权角色】和【跳过管理角色】则下时会将该节点的数据复制到集群的其它节点上,在数据全部复制成功后才会将该节点从集群中删除。
六、常见问题
异常原因:由于强制下线数据节点,HDFS的Block缺失,导致NameNode进入安全模式。
解决方法:
hdfs修改复制因子数
- 命令行设置最小副本数
hdfs dfs -setrep 2 -R /user