如何为Kerberos环境的CDH集群在线扩容数据节点
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢
1.文档编写目的
Hadoop集群其中一个优点就是可伸缩性(横向扩展),通过增加计算节点使服务容量产生线性增长的能力。可伸缩的应用程序的主要特点是:只需要增加资源,而不需要对应用程序本身进行大量修改。在集群资源紧张的情况下可通过动态的扩容节点来增加集群的计算能力,前面Fayson的文章讲过《如何在非Kerberos环境下对CDH进行扩容》、《如何使用Cloudera Manager在线为集群减容》。本篇文章主要介绍如何为Kerberos环境的CDH集群在线扩容数据节点。Kerberos和非Kerberos的集群减容步骤是一样的,Fayson不会专门用文章来介绍。
- 内容概述
1.创建DataNode模板
2.DataNode节点前置准备
3.上线DataNode节点并应用模板
4.执行Balance均衡集群数据
- 测试环境
1.CM和CDH版本为5.11.2
- 前置条件
1.CDH集群已安装成功并正常运行
2.集群已启用Kerberos
2.扩容集群环境说明
1.扩容前集群节点信息
2.扩容前HDSF容量
3.扩容前Yarn资源池情况
3.创建DataNode节点主机模板
1.登录Cloudera Manager Web界面,进入“主机模板”界面
2.点击“创建”,创建一个datanode主机模板,并为模板选择角色
3.点击“创建”,完成DataNode模板创建
4.DataNode节点的前置准备
前置准备请参考Fayson之前的文章《CDH安装前置准备》,主要包括以下步骤:
1.确保OS的yum源可以正常使用,通过yum repolist命令可以查看到匹配的OS的所有包
2.确保Cloudera Manager的yum源运行正常
3.hosts文件配置,需要将Gateway节点的IP和hostname加入到CDH集群节点的hosts文件中,并同步到所有机器包括Gateway节点
4.禁用SELinux
5.关闭防火墙
6.设置swap为10
7.关闭透明大页面
8.配置时钟同步
9.为待上线节点安装Kerberos客户端并配置krb5.conf文件
sudo yum -y install krb5-libs krb5-workstation
将KDC服务器上/etc/krb5.conf文件拷贝至新节点的/etc目录下
测试Kerberos客户端是否安装成功
kinit -kt fayson.keytab fayson
klist
显示如上截图则表示初始化成功。
关于Kerberos客户安装可参考Fayson前面的文章《如何给Kerberos环境下的CDH集群添加Gateway节点》和《如何在CDH集群启用Kerberos》。
请务必确保以上操作都已完成,并成功配置,否则接下来的增加节点操作会失败!
5.上线DataNode节点
1.点击“所有主机”,进入主机列表
2.点击“向集群添加新主机”
3.点击“经典向导”,进入添加新主机引导页
4.点击“继续”,输入要添加的新主机ip或hostname
点击“搜索”
5.选择需要添加到集群的主机,点击“继续”
6.输入Cloudera Manager Agent的parcel库地址,点击“继续”
勾选Java开发工具包及无限制强度加密策略文件。
7.安装JDK,点击“继续”
8.输入ec2-user用户密码,点击“继续”
向集群添加新主机,等待安装成功。
9.安装完成,点击“继续”
向新主机分发并激活parcel
10.激活成功,点击“继续”
11.主机正确性检查通过,点击“继续”,选择主机模板
12.点击“继续”,启动主机角色
13.启动成功后,点击“继续”,部署客户端配置
14.点击“完成”,进入主机列表
至此,向CDH已完成向CDH集群添加数据节点。
节点上线后各服务节点磁盘使用情况
可以看到新添加的DataNode节点,磁盘几乎未使用,说明暂未有数据写入该数据节点。接下来对DataNode节点进行数据平衡操作。
6.扩容后集群环境说明
1.HDFS容量
2.Yarn资源
7.重启相应服务更新集群拓扑信息
回到CM主页根据提示重启相应服务,提示需要重启或刷新相应配置,主要是更新集群的拓扑信息,如果集群的NameNode、ResourceManager等服务启用了高可用在选择滚动重启,这样不会影响生产环境作业的运行。
8.执行Balance操作
Balance是为了平衡数据,如果不执行该操作,集群将会把新的数据都存放在新的datanode上,这样会造成数据分布不平衡,影响MR的工作效率。
1.进入HDFS服务,选择“重新平衡”菜单
2.点击“重新平衡”
3.点击“重新平衡”,执行重新平衡操作
4.执行成功
Balance参数说明:
重新平衡阈值:值越低各节点越平衡,但消耗时间也更长,默认为10%
dfs.datanode.balance.max.concurrent.moves:允许同时并发复制的块数
9.查看数据分布情况
通过HDFS的http://hostname:50070界面可以看到在执行了“重新平衡”操作后,新加入的DataNode节点磁盘的使用率和其它节点磁盘使用率相差在10%以内,如果需要降低各节点磁盘使用率差则需要调整“重新平衡阈值”该值越低节点磁盘使用率差越低。
10.常见问题
1.在启动新扩容节点DataNode角色时报错,提示:代码块部分可以左右滑动查看噢
+ '[' nfs3 = datanode ']'
+ '[' namenode = datanode -o secondarynamenode = datanode -o datanode = datanode ']'
+ HADOOP_OPTS='-Dsecurity.audit.logger=INFO,RFAS -Djava.net.preferIPv4Stack=true '
+ export 'HADOOP_OPTS=-Dhdfs.audit.logger=INFO,RFAAUDIT -Dsecurity.audit.logger=INFO,RFAS -Djava.net.preferIPv4Stack=true '
+ HADOOP_OPTS='-Dhdfs.audit.logger=INFO,RFAAUDIT -Dsecurity.audit.logger=INFO,RFAS -Djava.net.preferIPv4Stack=true '
+ '[' namenode = datanode -a rollingUpgrade = '' ']'
+ exec /opt/cloudera/parcels/CDH-5.11.2-1.cdh5.11.2.p0.4/lib/hadoop-hdfs/bin/hdfs --config /run/cloudera-scm-agent/process/3479-hdfs-DATANODE datanode
Cannot locate Java Home
异常原因:由于集群将JDK升级至JDK8,在新节点前置准备时未将jdk8安装至/usr/java目录下导致。
解决方法:从集群其它节点将jdk安装包拷贝至新节点的/usr/java目录下
scp -i fayson.pem.txt -r jdk1.8.0_131-cloudera/ ip-172-31-15-138.ap-southeast-1.compute.internal:/usr/java/
关于JDK升级可以参考Fayson前面的文章《如何将CDH集群JAVA升级至JDK8》和《如何将Kerberos环境下CDH集群JAVA升级至JDK8》
2.在集群执行MR作业异常日志,提示:代码块部分可以左右滑动查看噢
17/12/24 03:54:51 INFO mapreduce.Job: Task Id : attempt_1514093030036_0001_m_000007_1000, Status : FAILED
Application application_1514093030036_0001 initialization failed (exitCode=255) with output: main : command provided 0
main : run as user is fayson
main : requested yarn user is fayson
User fayson not found
异常原因:由于我们新加入的DataNode节点无fayson用户导致,在执行MR作业时报错“User fayson not found”
解决方法:将集群节点上创建的用户信息同步至新DataNode节点的OS中。
[ec2-user@ip-172-31-15-138 java]$ sudo useradd fayson
[ec2-user@ip-172-31-15-138 java]$ id fayson
uid=1001(fayson) gid=1001(fayson) groups=1001(fayson)
[ec2-user@ip-172-31-15-138 java]$
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 栈与队列:总结篇!
- Appium移动端自动化测试--元素操作与触摸动作【移动端自动化测试教程奉上】
- 接口测试Mock利器--moco runner是如何工作的?
- Java中类型判断的几种方式
- 如何实现类似@Component的Spring动态注入功能
- 一次代码优化实践,用了模板方法+策略+工厂方法模式
- 给 JDK 报了一个 P4 的 Bug,结果居然……
- Git | Git Server 搭建
- leetcode树之二叉树的深度
- Nic*app的native层算法破解
- ActiveMq的顺序性消费问题
- 佳能遭严重勒索软件攻击,10TB数据被窃取,大量服务宕机
- 进程线程剖析(二)-进程组成、状态与特点
- 【Flink】基于 Flink 实时计算商品订单流失量
- 这就是你日日夜夜想要的docker!!!---------TLS加密远程连接Docker