[喵咪大数据]Hadoop节点添加下线和磁盘扩容操作
Hadoop绝非一个简单程序,集群模式下更是如此,所有的数据都存储在Hadoop中如果操作不当会存在丢失数据的风险,那么怎么在安全的情况,扩容下线维护或者磁盘满了怎么增加空间,就是今天的主要内容了.
附上:
Hadoop的官网:hadoop.apache.org 喵了个咪的博客:w-blog.cn
1.增加节点
当磁盘满了或节点不够处理速度慢了都需要对节点或者通过增加节点的方式进行磁盘扩容,这个时候就需要用到Hadoop扩容机制了
通过如下命令可以查看各节点情况磁盘容量等
> hadoop dfsadmin -report
笔者现在有两个节点两还剩下大约 33GB的容量,我们先向HDFS中写入一些数据(笔者这里写入了9.1GB的数据)
> hdfs dfs -mkdir input
> hdfs dfs -put /app/install/* input
可以看到已经写入了很多大文件这个时候查询集群状态会发现两个节点从原本的33GB剩余已经缩减到了23GB,因为现在我们只有两个节点选择的备份数量也是2个所以每份文件都会在两个节点中进行存储
首先先进行节点扩容我们的hadoop-1现在只是作为了NameNode现在要把hadoop-1加入DataNode中然后把现在有的数据进行平均负载让hadoop-1也承担一部分文件存储工作
在master节点上修改slaves增加hadoop-1
> vim /usr/local/hadoop-2.7.3/etc/hadoop/slaves
hadoop-1
在需要增加到集群的节点中指向如下命令
> hadoop-daemon.sh start datanode #启动datanode
> yarn-daemons.sh start nodemanager #启动yarn
在master节点上执行
hadoop dfsadmin -refreshNodes #刷新识别新增加的节点
yarn rmadmin -refreshNodes #刷新yarn识别新节点
这个时候在通过 hadoop dfsadmin -report 查看集群状况就可以看到增加了一个节点,但是这个节点暂时没有存储任何的文件需要指向如下命令将文件进行负载均衡
如果不balance,那么cluster会把新的数据都存放在新的node上,但是这样会降低mapred的工作效率 设置平衡阈值,默认是10%,值越低各节点越平衡,但消耗时间也更长
start-balancer.sh -threshold 5
如果拷贝时间非常慢可以通过修改hdfs-site.xml设置balance的带宽,默认只有1M/s
> vim /usr/local/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>10485760</value>
<description>
Specifies the maximum amount of bandwidth that each datanode
can utilize for the balancing purpose in term of
the number of bytes per second.
</description>
</property>
2.下线节点
当我们不需要节点或者是需要对节点进维护(比如增加磁盘等操作需要重启)希望能够平滑下线Hadoop提供对应的方式
在NameNode节点中添加(或修改)如下配置项到hdfs-site.xml
> vim /usr/local/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/hadoop-2.7.3/etc/hadoop/dfshosts.exclude</value>
</property>
编辑dfshosts.exclude 增加需要下线的节点名称
> vim /usr/local/hadoop-2.7.3/etc/hadoop/dfshosts.exclude
hadoop-2
在执行下线命令
hdfs dfsadmin -refreshNodes
在通过查看节点就会发现有一个 Decommissioning datanodes 此时任何数据都不会写入到下线的datanode中(下线的节点中有数据的话hadoop复制该datanode block至其他datanode需要一定的下线时间)此时下线的是hadoop-2 , hadoop-2中的块将会被迁移到 hadoop-1中,前已完成之后Decommissioning datanodes将会消失然后就可以关闭hadoop-2中的服务了,如果需要在加入到集群中只需要去除dfshosts.exclude在重新刷新
下线nodemanager也是一样修改l增加如下配置
> vim /usr/local/hadoop-2.7.3/etc/hadoop/yarn-site.xml
<property>
<name>mapred.hosts.exclude</name>
<value>/usr/local/hadoop-2.7.3/etc/hadoop/dfshosts.exclude</value>
</property>
执行下线命令
yarn rmadmin -refreshNodes
在已经下线的节点就可以正常的关闭 datanode进程
hadoop-daemon.sh stop datanode
通过 hadoop dfsadmin -report 查看会发现hadoop-2的状态是 Decommissioned 退役状况 这个时候文件不会再写入到hadoop2节点中
3.磁盘扩容
当整个集群存入的数据量慢慢增加磁盘总会不够,此时此刻就需要增加磁盘来解决此类问题
现在我们有3个节点可以查看到如下信息
> hdfs dfsadmin -report
Configured Capacity: 126421499904 (117.74 GB)
Present Capacity: 107068563456 (99.72 GB)
DFS Remaining: 81215922176 (75.64 GB)
DFS Used: 25852641280 (24.08 GB)
DFS Used%: 24.15%
此时我们给节点2进行磁盘扩容,这里使用的阿里云服务器增加了一块100GB的磁盘挂载到了hadoop-2服务器上 步骤 4:Linux 格式化和挂载数据盘_快速入门_云服务器 ECS-阿里云
> df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 41152832 13745964 25293384 36% /
/dev/vdb1 103080224 61176 97776220 1% /mnt
多出了一个 /mut 赋予权限
> sudo chown -R hadoop:hadoop /mnt
首先现需要下线hadoop-2节点,下线之后在hadoop-2
> su hadoop
> hadoop-daemon.sh stop datanode
修改hadoop-2配置文件vim hdfs-site.xml
> vim /usr/local/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop-2.7.3/tmp/dfs/data,file:/mnt/dfs/data</value>
</property>
然后在启动datanode
> hadoop-daemon.sh start datanode
在hadoop-1通过NameNode中查看集群状态
> hadoop dfsadmin -report
Name: 192.168.1.102:50010 (sunmi-hadoop-2)
Hostname: sunmi-hadoop-2
Decommission Status : Decommissioned
Configured Capacity: 147694649344 (137.55 GB)
DFS Used: 9414242304 (8.77 GB)
Non DFS Used: 12258566144 (11.42 GB)
DFS Remaining: 126021840896 (117.37 GB)
DFS Used%: 6.37%
DFS Remaining%: 85.33%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu Jul 20 11:30:42 CST 2017
hadoop-2的容量就增加了然后重新让节点上线
vim /usr/local/hadoop-2.7.3/etc/hadoop/dfshosts.exclude
# 清除
hadoop-2
# 更新节点
> hdfs dfsadmin -refreshNodes
> yarn rmadmin -refreshNodes
然后在查看集群状况就增加了100GB的DFS的空间
> hadoop dfsadmin -report
Configured Capacity: 231975649280 (216.04 GB)
Present Capacity: 207191623885 (192.96 GB)
DFS Remaining: 176628416512 (164.50 GB)
DFS Used: 30563207373 (28.46 GB)
DFS Used%: 14.75%
4 总结
关于Hadoop相关的配置到这篇就已经结束了,关于Hadoop如果希望深入了解可以读阅**<Hadoop权威指南>**这本书,在本次实践中Hadoop主要起到的作用是对原数据的存储以及提供的任务处理调度能力.后续的博文将介绍围绕Hadoop生态展开的各项应用组件,最后多谢大家的关注我们下节再见.
注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!
- Kubernetes的服务网格(第4部分):通过流量切换持续部署
- QTableView表格视图的列宽设置
- OpenProcess打开进程返回错误的问题
- Python标准库01 正则表达式 (re包)
- 剑指OFFER之栈的压入、弹出序列(九度OJ1366)
- Python标准库03 路径与文件 (os.path包, glob包)
- AI人工智能时代已经到来 “北斗即时判”实现纯语音交互
- 剑指OFFER之链表中倒数第k个节点(九度OJ1517)
- 用Qt写软件系列四:定制个性化系统托盘菜单
- Linux简介与厂商版本
- 用Qt写软件系列三:一个简单的系统工具之界面美化
- VS编译链接时错误(Error Link2005)的解决方法
- HttpClient使用心得
- 剑指OFFER之重建二叉树(九度OJ1385)
- 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 数组属性和方法
- Python 序列化/反序列化自定义类型
- Windows10下使用VS2017编译和使用yaml-cpp库
- CentOS7下编译yaml-cpp库
- SAP Spartacus CurrentProductService返回的null对象
- SAP Spartacus产品明细页面用Observable显示产品名称
- 关于rxjs里operators filter和map的详细讨论
- 用代码查看SAP Spartacus购物车内的行项目
- rxjs的map和switchMap在SAP Spartacus中的应用
- 用代码查看SAP Spartacus购物车内的行项目
- rxjs fromEvent的用法
- Python2和Python3的区别简单总结
- Django操作数据库
- Hive元数据服务MetaStore
- Linux---Shell脚本字符显示特殊颜色效果
- 快速学习-RocketMQ运维管理