一、前言

1、目的

  1. 通过增加计算节点使服务容量产生线性增长的能力。在集群计算能力浪费的情况下,减容避免集群资源浪费

    2、可伸缩应用程序特点:

  2. 只需要增加或减少资源,而不需要对应用程序本身进行大量修改。在集群资源紧张的情况下可通过动态的扩容节点来增加集群的计算能力。

    3、内容概述

    3.1、扩容

  3. 创建DataNode模板

  4. DataNode节点前置准备
  5. 上线DataNode节点并应用模板
  6. 执行Balance均衡集群数据

    3.2、减容

  7. 节点强制下线

  8. 节点正常下线

    4、测试环境

  9. CM和CDH版本为5.16.2

    5、前置条件

  10. CDH集群已安装成功并正常运行

  11. 集群已启用Kerberos

    二、集群扩容

    1、扩容前集群环境

  12. 集群信息

image.png

  1. HDFS容量

image.png

  1. YARN资源池情况

image.png

2、创建DataNode节点主机模板

  1. 登录Cloudera Manager Web界面,进入【主机模板】界面

image.png

  1. 点击“创建”,创建一个datanode主机模板

image.png

  1. 为模板选择角色,点击【创建】,完成DataNode模板创建。

image.png
image.png

3、DataNode节点的前置准备

3.1、修改主机名、修改并同步IP映射

  1. 修改主机名(exit退出shell,重新进入生效)

    1. hostnamectl set-hostname cdh2.macro.com

    image.png

  2. 配置hosts的ip映射

    1. vim /etc/hosts
    2. ---------复制如下内容---------
    3. 192.168.0.200 cdh1.macro.com
    4. 192.168.0.221 cdh2.macro.com
    5. 192.168.0.222 cdh3.macro.com

    image.png

  3. 同步到所有节点

    1. -------分发同步hosts文件到所有节点-------
    2. scp /etc/hosts root@cdh1.macro.com:/etc
    3. scp /etc/hosts root@cdh3.macro.com:/etc

    image.png

    3.2、添加yum源

  4. 确保OS、Cloudera Manager的yum源可以正常使用(集群其他节点repo文件scp到当前节点)

    1. cd /etc/yum.repos.d/
    2. scp cm.repo os.repo root@192.168.0.221:/etc/yum.repos.d/

    image.png

  5. yum repolist命令检查所有源是否可用(状态不能为0)

    1. yum repolist

    image.png

    3.3、修改基础前置条件

  6. 禁用SELinux

    1. setenforce 0
  7. 集群所有节点修改/etc/selinux/config文件如下(重启才能生效,所以需要配置上面的临时关闭):

    1. vi /etc/selinux/config
    2. ------修改如下信息,限制开机自启------
    3. SELINUX=disabled

    image.png

  8. 关闭防火墙

    1. service firewalld stop
    2. service firewalld enable
    3. service firewalld status

    image.png

  9. 设置swap为1

    1. sysctl vm.swappiness=1
    2. echo 1 > /proc/sys/vm/swappiness
    3. cat /proc/sys/vm/swappiness

    image.png

  10. 关闭透明大页面

    1. echo never > /sys/kernel/mm/transparent_hugepage/defrag
    2. cat /sys/kernel/mm/transparent_hugepage/defrag
    3. echo never > /sys/kernel/mm/transparent_hugepage/enabled
    4. cat /sys/kernel/mm/transparent_hugepage/enabled

    image.png

  11. 设置开机自动关闭

    1. vim /etc/rc.d/rc.local
    2. ------复制如下内容------
    3. if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled
    4. fi
    5. if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag
    6. fi

    image.png

  12. 赋权限

    1. cat /etc/rc.d/rc.local
    2. chmod +x /etc/rc.d/rc.local
    3. ls -l /etc/rc.d | grep rc.local

    image.png

    3.4、配置时钟同步

  13. 下载ntp时钟服务

    1. yum -y install ntp

    image.png

  14. 编辑ntp.conf文件同步主机时间如下

    1. vim /etc/ntp.conf
    2. -----注释部分行,添加同步主节点时间如下-------
    3. server 192.168.0.200

    image.png

  15. 重启时钟,加入开机自启

    1. service ntpd start
    2. service ntpd enable
    3. service ntpd status

    image.png

    4、安装Kerberos客户端

  • 由于集群启用了Kerberos服务,所以需要在Gateway节点安装Kerberos客户端
  1. 在Gateway节点上执行如下命令

    1. yum -y install krb5-libs krb5-workstation

    image.png

  2. 安装成功后查看安装的RPM包

    1. rpm -qa | grep krb5

    image.png

  3. 将CM集群中的/etc/krb5.conf文件拷贝至该Gateway节点/etc下

    1. scp /etc/krb5.conf root@cdh2.macro.com:/etc/

    image.png

  4. 在GateWay节点测试Kerberos客户端是否部署成功,如下图表示成功。

    1. kinit userkrb
    2. klist

    image.png

    5、上线DataNode节点

  5. 点击【所有主机】,进入主机列表

image.png

  1. 点击【向集群添加新主机】

image.png

  1. 点击“继续”,输入要添加的新主机ip或hostname

image.png

  1. 点击“搜索

image.png

  1. 选择需要添加到集群的主机,点击“继续”

image.png

  1. 自定义Cloudera Manager Agent的parcel库地址,点击【继续】

image.png

  1. 勾选Java开发工具包及无限制强度加密策略文件。

image.png

  1. 输入root用户密码,点击[继续]

image.png

  1. 向集群添加新主机,等待安装成功,点击【继续】。

image.png

  1. 向新主机分发并激活parcel,等待激活成功,点击【继续】

image.png

  1. 主机正确性检查通过,点击“继续”,选择主机模板

image.png

  1. 点击“继续”,启动主机角色

image.png

  1. 启动成功后,点击“继续”,部署客户端配置

image.png

  1. 点击“完成”,进入主机列表

image.png

  1. 至此,向CDH已完成向CDH集群添加数据节点,节点上线后各服务节点磁盘使用情况

image.png

6、扩容后集群环境

  1. 节点信息

image.png

  1. HDFS容量

image.png

  1. YRAN资源

image.png

7、更新节点

7.1、重启相应服务更新集群拓扑信息

  • 可以看到新添加的DataNode节点,磁盘几乎未使用,说明暂未有数据写入该数据节点。接下来对DataNode节点进行数据平衡操作。
  1. CM主页根据提示重启相应服务,提示需要重启或刷新相应配置,主要是更新集群的拓扑信息。
  • 如果集群的NameNode、ResourceManager等服务启用了高可用在选择滚动重启,这样不会影响生产环境作业的运行

image.png

  1. 点击【立即重启】开始执行

image.png

  1. 等待重启完成点击【完成】

image.png

7.2、执行Balance操作

  • Balance是为了平衡数据,如果不执行该操作,集群将会把新的数据都存放在新的datanode上,这样会造成数据分布不平衡,影响MR的工作效率。
  1. 进入HDFS服务,选择“重新平衡”菜单

image.png

  1. 点击“重新平衡”,执行重新平衡操作

image.png

  1. 执行成功

image.png

  • Balance参数说明:

重新平衡阈值:值越低各节点越平衡,但消耗时间也更长,默认为10%
image.png

  1. 查看数据分布情况(通过HDFS的http://192.168.0.200:50070界面可以看到在执行了“重新平衡”操作后,新加入的DataNode节点磁盘的使用率和其它节点磁盘使用率相差在10%以内,如果需要降低各节点磁盘使用率差则要调整“重新平衡阈值”该值越低节点磁盘使用率差越低)。

image.png

三、集群减容

1、节点强制下线

1.1、计算资源

  1. 计算节点下线前DataNode节点磁盘使用情况和Yarn资源使用情况统计

image.png

  1. Yarn资源统计

image.png

1.2、下线节点

  1. 通过Cloudera Manager的进入所有主机列表

image.png

  1. 选中要下线的节点,点击从“从集群中删除”

image.png

  1. 点击“集群中删除”

image.png

  1. 去掉两个勾选,点击【确认】

image.png

  1. 等待执行成功点击【关闭】

image.png

  1. 删除成功。Hadoop相关角色已从该节点删除,但是依然存在Hosts列表中,受Cloudera Manager管理

image.png

  1. 将该节点从Cloudera Manager移除

image.png

  1. 点击“确认”,可以看到该节点已从集群中移除

image.png
image.png

1.3、查看集群资源情况

  1. 集群中DataNode节点磁盘使用情况统计

image.png

  1. Yarn资源统计

image.png

2、节点正常下线

  1. 计算节点下线前集群的DataNode节点磁盘使用情况统计

image.png

  1. 集群Yarn资源情况统计

image.png

  1. 通过Cloudera Manager的进入所有主机列表

image.png

  1. 选中要下线的节点,点击从【从集群中删除】

image.png

  1. 从集群中删除192.168.0.221节点

image.png

  1. 等待将该节点从集群中删除,解除授权的过程中,该下线节点上的数据也会被自动复制到其他的DataNode节点,如果下线节点的数据量较大,此步骤会耗费非常长的时间。

image.png

  1. 下线成功

image.png

  1. 选中该节点从Cloudera Manager中移除

image.png
7.点击“确认”,将该节点移除Cloudera Manager

image.png

  1. 可以看到172.31.7.172节点已被移除。

image.png

3、查看集群资源情况

  1. 登入192.168.0.200:50070查看集群资源使用情况

image.png

  1. 集群Yarn资源情况统计

image.png

四、集群增加Gateway角色

1、环境描述

1.1、内容概述

  1. 创建Gateway节点的主机模板
  2. Gateway节点的前置准备
  3. 增加Gateway节点到集群并应用主机模板
  4. GateWay节点命令测试

    1.2、测试环境

  5. CDH5.16.2

  6. 采用root用户操作
  7. CentOS7

    1.3、前置条件

  8. CDH5.16.2集群运行正常

  9. Gateway节点已准备,并准备好前置

    2、创建Gateway节点的主机模板

    1、CM 的Web管理界面,点击【创建主机模板】
    image.png
    2、选择【创建】进行创建主机模板
    image.png
    3、命名模板,选择各个服务勾选相应的GateWay角色,点击【创建】
    image.png
    4、创建成功如下图所示:
    image.png

3、Gateway节点的前置准备

3.1、修改主机名、修改并同步IP映射

  1. 修改主机名(exit退出shell,重新进入生效)

    1. hostnamectl set-hostname cdh4.macro.com

    image.png

  2. 配置hosts的ip映射

    1. vim /etc/hosts
    2. ---------复制如下内容---------
    3. 192.168.0.200 cdh1.macro.com
    4. 192.168.0.221 cdh2.macro.com
    5. 192.168.0.222 cdh3.macro.com
    6. 192.168.0.223 cdh4.macro.com

    image.png

  3. 同步到所有节点

    1. -------分发同步hosts文件到所有节点-------
    2. scp /etc/hosts root@cdh1.macro.com:/etc
    3. scp /etc/hosts root@cdh2.macro.com:/etc
    4. scp /etc/hosts root@cdh3.macro.com:/etc

    image.png

    3.2、添加yum源

  4. 确保OS、Cloudera Manager的yum源可以正常使用(集群其他节点repo文件scp到当前节点)

    1. scp /etc/yum.repos.d/* root@cdh4.macro.com:/etc/yum.repos.d/

    image.png

  5. yum repolist命令检查所有源是否可用(状态不能为0)

    1. yum repolist

    image.png

    3.3、修改基础前置条件

  6. 禁用SELinux

    1. setenforce 0
  7. 集群所有节点修改/etc/selinux/config文件如下(重启才能生效,所以需要配置上面的临时关闭):

    1. vi /etc/selinux/config
    2. ------修改如下信息,限制开机自启------
    3. SELINUX=disabled

    image.png

  8. 关闭防火墙

    1. service firewalld stop
    2. service firewalld enable
    3. service firewalld status

    image.png

  9. 设置swap为1

    1. sysctl vm.swappiness=1
    2. echo 1 > /proc/sys/vm/swappiness
    3. cat /proc/sys/vm/swappiness

    image.png

  10. 关闭透明大页面

    1. echo never > /sys/kernel/mm/transparent_hugepage/defrag
    2. cat /sys/kernel/mm/transparent_hugepage/defrag
    3. echo never > /sys/kernel/mm/transparent_hugepage/enabled
    4. cat /sys/kernel/mm/transparent_hugepage/enabled

    image.png

  11. 设置开机自动关闭

    1. vim /etc/rc.d/rc.local
    2. ------复制如下内容------
    3. if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled
    4. fi
    5. if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag
    6. fi

    image.png

  12. 赋权限

    1. cat /etc/rc.d/rc.local
    2. chmod +x /etc/rc.d/rc.local
    3. ls -l /etc/rc.d | grep rc.local

    image.png

    3.4、配置时钟同步

  13. 下载ntp时钟服务

    1. yum -y install ntp

    image.png

  14. 编辑ntp.conf文件同步主机时间如下

    1. vim /etc/ntp.conf
    2. -----注释部分行,添加同步主节点时间如下-------
    3. server 192.168.0.200

    image.png

    4、安装Kerberos客户端

  • 由于集群启用了Kerberos服务,所以需要在Gateway节点安装Kerberos客户端
  1. 在Gateway节点上执行如下命令

    1. yum -y install krb5-libs krb5-workstation

    image.png

  2. 安装成功后查看安装的RPM包

    1. rpm -qa | grep krb5

    image.png

  3. 将CM集群中的/etc/krb5.conf文件拷贝至该Gateway节点/etc下

    1. scp /etc/krb5.conf /etc/krb5.conf root@cdh4.macro.com:/etc/

    image.png

  4. 在GateWay节点测试Kerberos客户端是否部署成功,如下图表示成功。

    1. kinit userkrb
    2. klist

    image.png

    5、增加Gateway节点的集群并应用主机模板

  5. 主页进入【所有主机】页面

image.png

  1. 点击【向群集添加主机】

image.png

  1. 点击【继续】

image.png

  1. 输入Gateway节点的IP或者hostname,点击【搜索】

image.png

  1. 点击【继续】

image.png

  1. 选择【自定义存储库】,选择输入Cloudera Manager的yum源http地址,点击【继续】

image.png

  1. 勾选Java的两个选项,点击【继续】

image.png

  1. 输入Gateway节点的SSH登录密码,并点击【继续】

image.png

  1. 等待cloudera-scm-agent在Gateway节点上安装

image.png

  1. 安装完成点击【继续】

image.png

  1. 等待分发Parcel包并激活完成,点击【继续】

image.png

  1. 主机检查,点击【继续】

image.png

  1. 选择主机模板

image.png

  1. 点击【继续】向集群中添加新主机,等待执行成功


image.png

  1. 点击【继续】,部署客户端配置

image.png

  1. 点击完成,查看主机列表GateWay节点的角色信息

image.png

  • 至此,给Kerberos环境下CDH集群增加新的Gateway节点完成。

    6、Gateway节点测试

  1. HDFS命令测试

    1. hadoop fs -ls /

    image.png

  2. Hive命令测试

    1. hive

    image.png

  3. hadoop命令向集群提交作业


  1. hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 1

image.png

五、总结

  1. 强制下线不勾选【解除授权角色】和【跳过管理角色】,直接将该节点上面的所有角色停止并删除节点上的角色,不会处理该节点上的数据,会导致集群Block缺失。
  2. 勾选【解除授权角色】和【跳过管理角色】则下时会将该节点的数据复制到集群的其它节点上,在数据全部复制成功后才会将该节点从集群中删除。

    六、常见问题

    异常原因:由于强制下线数据节点,HDFS的Block缺失,导致NameNode进入安全模式。
    image.png

  3. 解决方法:

hdfs修改复制因子数
image.png

  1. 命令行设置最小副本数
    1. hdfs dfs -setrep 2 -R /user