基于CDH6扩容

2,869 阅读6分钟

1. 前提

1.1 在线扩容

1.2 滚动式扩容,一台扩容成功后再扩容第二台

1.3 服务器需要良好的网络

1.4 提前下载好cdh安装包

2. 服务器环境

2.0 ECS选型(和原CDH一样的型号和配置,系统版本centos7.6 )

2.1 设置新服务器在CDH集群免密登陆。

2.2 jdk版本oracle jdk1.8.0_162(软件包从原cdh机器复制过来)

tar xf jdk-8u162-linux-x64.tar.gz
mkdir /usr/java/
mv jdk1.8.0_162/ /usr/java/

2.3 统一hosts文件,将新增机器的hosts更新和统一(使用运维工具或脚本批量更新, 或手动复制到新机器)

2.4 更新系统环境(/etc/profile),从原cdh机器复制过来(使用运维工具或脚本批量更新, 或手动复制到新机器)

2.5 安装必要的工具和优化系统内核

#安装命令工具
yum install wget iptables-services telnet net-tools git curl unzip sysstat lsof ntpdate lrzsz vim  -y


#优化内核参数
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo "*                -       nofile    100001"  >> /etc/security/limits.conf
echo "*                -       nproc     100001"  >> /etc/security/limits.conf
sed -i "s/SELINUXTYPE=targeted/#SELINUXTYPE=targeted/" /etc/selinux/config
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

2.5 数据盘分区格式化挂载(使用此脚本可一键 分区,格式化,挂载,开机启动)

#!/bin/bash

#将磁盘分区名称写入数组中
files=(
/dev/vdb
/dev/vdc
/dev/vdd
)

i=0
for file in ${files[@]}
do
   echo $file
   #将磁盘转为gpt格式,然后分区为一块 p为显示磁盘信息
   parted $file mklabel gpt
   parted $file mkpart primary 0% 100%
   parted $file p
   echo ${file}1
   sleep 2
   #格式化磁盘为ext4类型
   mkfs.ext4 ${file}1
   sleep 2
   #查看磁盘uuid
   blkid ${file}1
   uuid=`blkid ${file}1 | awk '{print$2}'`
   i=`expr $i + 1`;
   echo $i
   if [ $i -ge 10 ];then
      mkdir -pv /hdfs/data${i}
      echo "${uuid} /hdfs/data${i} ext4 defaults,noatime 0 0" >>/etc/fstab   else
      mkdir -pv /hdfs/data0${i}      echo "${uuid} /hdfs/data0${i} ext4 defaults,noatime 0 0" >>/etc/fstab   fi
   sleep 2
done
#挂载全部磁盘==刷新fstab配置
mount -a

2.6 下载mysql连接jar包(因为是扩容,其实用不到的,主要是防止后期迁移应用时踩坑)

mkdir -pv /usr/share/java/
cd /usr/share/java 
wget wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz
tar xf mysql-connector-java-5.1.46.tar.gz
scp mysql-connector-java-5.1.46-bin.jar /usr/share/java/

2.7 至此服务器环境初始化完成,重启一下机器 *坑1(记得把hosts文件多余的记录删除)

开机后执行一下命令:

echo never > /sys/kernel/mm/transparent_hugepage/defrag 
echo never > /sys/kernel/mm/transparent_hugepage/enabled

3. CDH增加主机

3.1 将cdh客户端包复制到新机器 *坑2(大坑,客户端其实是6.1.0 而原机器界面竟然显示的是6.1.1)

包名: cloudera-manager-agent-6.1.0-769885.el7.x86_64.rpm cloudera-manager-daemons-6.1.0-769885.el7.x86_64.rpm

3.2 安装客户端 *坑3(一定要以这种离线方式安装,如果在界面上在线安装,以阿里云的网,安装这些软件包不知道要多久多久了)

#localinstall为安装本地包
yum localinstall cloudera-manager-agent-6.1.0-769885.el7.x86_64.rpm  cloudera-manager-daemons-6.1.0-769885.el7.x86_64.rpm -y

.3 打开CDH UI界面。开始增加机器, 点击Add Hosts

https://cdnbamboo.qupeiyin.cn/20200401/37c555a28e0594fb68dd822a1496b630.png

3.4 点击继续后,将主机名填写到框中, 然后点击搜索

https://img2018.cnblogs.com/blog/1456560/201905/1456560-20190515112815547-1438094880.png

3.5 新机器搜索后,点击继续,然后选择官方的匹配版,不要自定义存储库(因为我们已经手动安装好了客户端 见3.2)

3.5 JDK安装选项不用选,因为我们在环境初始化也安装好了

3.6 提供SSH密钥。将服务器密钥上传点击继续既可

3.7 Install Agents(这里会很快安装成功。因为这是3.2的步骤,我们做过了), 如果这步出错,报"正在获取安装锁" 可以使用重启服务器(新安装的服务器),然后重启开始增加机器

3.8 Install Parcels *坑4 这一步是最难的。因为CDH集群之前安装了一些其他软件,但没有正确删除导致一直卡住,永远不会结束。所以这里我们尝试重启cdh manager,更新了parcels配置。都没有用。还是调用cdh接口取消弄好的. api文档: http://cdh-ui_IP:port/static/apidocs/

安装这一步之前一定要确认 big1(cdh manager) 路径下/opt/cloudera/parcel-repo/ 的安装文件大小和sha码是否正常。否则一卡要卡很长时间,因为本身安装时间就长。

3.9 上一步成功之后,就是检查主机正确性,有问题看提示改一下就好,基本是环境信息。如果提示PG相关的可以过滤,因为我们用的mysql

3.10 然后就是部署客户端命令到新机器。就是你可以使用hdfs,hbase,hive等命令了。此时新机器就增加完成。可以去主机界面查看

4. CDH增加服务

4.1 增加服务,这里因为我们的集群hadoop,hbase本身就是高可用,所以我们只需要增加从节点既可(hadoop的datanode, hbase的regionserver等)

4.2 我们这里先增加一个datanode,然后观察hadoop集群状态(在此之前一定要将hadoop集群数据做一份,以此对比) 越多截图越好,这里不一一展示

#查看当前集群报告
hdfs dfsadmin -report

#检查数据目录状态
hadoop fsck /

4.3 增加hadoop datanode服务

点击HDFS,进入界面后,点击操作->添加角色实例。然后在出现在的界面上选择datanode,其他都不要操作,其他都不要操作,其他都不要操作!!!

3.4 增加好之后等待一个小时之后,开始执行4.2的步骤。来对比数据和集群状态是否正常.如果没有问题就继续增加其他服务实例

3.5 依次进入hbase,flink,hive,yarn,spark增加相应的计算节点或数据节点.

3.6 增加完上面服务后,界面会出现很多可以更新或重启的提示. *坑5 此时一定要记住,先和数据同事沟通好,找个可以重启服务的时间来重启各服务。因为一但你点了刷新配置(不是点重启配置) 依然会重启所有有提示的服务。不是说你点的哪个服务就重启哪个。而是随便点哪个都会重启全部

3.7 *坑6 因为设置了hive的环境变量,所以跑任务如果调度到新机器会报错。这里要把hive-env.sh设置一下。然后将elasticsearch-hadoop包放到hive的lib目录下。参考原集群配置: /etc/hive/conf/hive-env.sh

vim /etc/hive/conf/hive-env.sh
包路径:
/data/cloudera/parcels/CDH-6.1.1-1.cdh6.1.1.p0.875250/lib/hive/lib/elasticsearch-hadoop-7.0.0.jar

3.8 *坑7 因为我集成了phoenix,所以如果新机器没安装,启动hbase会报错,这个很危险,一定要先做好

#从原集群机器中将这个目录完整复制过来既可
/data/phoenix5

3.9 然后跑一下测试,通过之后再根据上述 步骤扩容第二台,第三台。

5. 测试

5.1 跑集群自带的字符统计测试用例

su - hdfs
hadoop fs -mkdir /testinput
hadoop fs -put /tmp/messages /input/
hadoop jar /opt/cloudera/parcels/CDH-6.1.1-1.cdh6.1.1.p0.875250/jars/hadoop-mapreduce-examples-3.0.0-cdh6.1.1.jar wordcount /input /output
hadoop fs -cat /output/part-r-00000

5.2 找开发同事配合跑其他job

6. 通知

6.1 这里我们用的是钉钉通知,会根据进度来通知到群,完全透明或良好协助