- 0.书写思路
- 1.产生背景
- 2.优缺点
- 1.优点
- 2.缺点
- 3.组成架构
- 1.namenode
- 2.datenode
- 3.clicent
- 4.secondarynamenode
- 4.文件块大小的设置
- 5.shell操作
- 1.基本语法
- 2.常见命令
- 6.javaAPI
- 7.hdfs写数据
- 8.hdfs读流程
- 9.nn 和 2nn
- 1.nn和2nn的工作机制
- 1.namenode启动
- 2.2nn工作
- 3.fsimage和edits解析
- 4.checkPoint时间设置
- 5.nn故障处理
- 6. 集群安全模式
- 1.namenode启动
- 2.datanode启动
- 3.安全模式退出判断
- 7. NameNode多目录配置(了解)
- 10.datanode
- 1.工作机制
- 2.数据可靠性
- 3.掉线时限参数设置
- 4.节点的增加于减少
- 产生背景(为了解决说明问题)
- 优缺点
- 组成架构
- 运行机制: client->nn(2nn)->dn
随着数据量越来越大,在一个操作系统下无法存储所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,所以迫切需要**一种系统来管理多台机器上的文件。**这就是分布式文件管理系统,hdfs只是其中的一种
2.优缺点 1.优点- 高容错性
体现在副本策略 - 适合处理大数据
因为是分布式 - 可构建在廉价机器上,通过多副本机制,提高可靠性
- 不适合低延时数据访问,不然毫秒级存储
- 无法高效的对大量小文件进行存储
1)存储大量小文件的话,会占用namenode大量的内存来存储他们的元数据信息。但namenode的内存总是有限的
2)会使寻址时间大于读取时间 - 不支持并发写入,和文件的随机修改
1)一个文件自能有一个写,不允许多个线程写
2)对于文件自能进行追加写
1) 管理hdfs的名称空间
2)处理客户端的读写请求
3)配置副本策略
4)管理block的映射信息(block是存储在datanode的)
1)存储实际的block
2)执行block的读写 请求
1)文件切分
2)与namenode交互,获取文件位置信息
3)与datanode交互,读取或写入数据
4)提供一些命令来管理hdfs,如namedoe格式化
5)提供一下命名访问hdfs,如增删改查操作
1)辅助namenode,如定期合并fsimage和edits文件并推送给namenode
2)在紧急情况下,可辅助恢复namenode
1)hadoop3.x版本默认是128M,之前是64M
2)hdfs文件快大小主要取决于磁盘传输速率
原因
hadoop fs 具体命令2.常见命令
1)-ls: 显示目录信息
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -ls /
2)-mkdir:在HDFS上创建目录
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir -p /sanguo/shuguo
3)-cat:显示文件内容
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -cat /sanguo/shuguo/kongming.txt
4)-chgrp 、-chmod、-chown:Linux文件系统中的用法一样,修改文件所属权限
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -chmod 666 /sanguo/shuguo/kongming.txt
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -chown atguigu:atguigu /sanguo/shuguo/kongming.txt
5)-cp :从HDFS的一个路径拷贝到HDFS的另一个路径
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -cp /sanguo/shuguo/kongming.txt /zhuge.txt
6)-mv:在HDFS目录中移动文件
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -mv /zhuge.txt /sanguo/shuguo/
7)-tail:显示一个文件的末尾1kb的数据
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -tail /sanguo/shuguo/kongming.txt
8)-rm:删除文件或文件夹
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -rm /user/atguigu/test/jinlian2.txt
9)-rmdir:删除空目录
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /test
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -rmdir /test
10)-du统计文件夹的大小信息
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -du -s -h /user/atguigu/test
2.7 K /user/atguigu/test
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -du -h /user/atguigu/test
1.3 K /user/atguigu/test/README.txt
15 /user/atguigu/test/jinlian.txt
1.4 K /user/atguigu/test/zaiyiqi.txt
11)-setrep:设置HDFS中文件的副本数量
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -setrep 10 /sanguo/shuguo/kongming.txt
这里设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。
6.javaAPI1.配置hadoop环境变量
2.创建maven工程
3.导入依赖`
junit junit4.12 org.apache.logging.log4j log4j-slf4j-impl2.12.0 org.apache.hadoop hadoop-client3.1.3
在项目的src/main/resources目录下,新建一个文件,命名为“log4j2.xml”,在文件中填入
7.hdfs写数据
- client向namenode请求上传文件
- namenode响应可以上传文件
- client请求上传第一个block,请求返回datanode
- namenode返回dn1,dn2,dn3表示用这3个节点存储数据(就近原则)
- client向这三个节点依次请求建立传输通道
client->dn1->dn2->dn3 这样调用- 三个节点依次响应成功
- 传输数据
- 当第一个block传输完成之后,client再次向namenode请求上传第二个block(循环3—7)
- client向namenode回应传输完成
就近原则:
计算机网络的知识网络拓扑
8.hdfs读流程传输数据:
client传输给dn1,就可以了dn1会把数据拷贝给dn2,dn3.
- client 通过 DistributedFileSystem向NameNode请求下载文件namenode通过查询元数据,找到文件块所对应的datanode地址
- 挑选一台datanode读取数据(就近原则)
- DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。
- 客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。
1.namenode启动思考:NameNode中的元数据是存储在哪里的?
首先,我们做个假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的FsImage。
这样又会带来新的问题,当在内存中的元数据更新时,如果同时更新FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦NameNode节点断电,就会产生数据丢失。因此,引入Edits文件(只进行追加操作,效率很高)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。这样,一旦NameNode节点断电,可以通过FsImage和Edits的合并,合成元数据。
但是,如果长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits的合并,如果这个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode,专门用于FsImage和Edits的合并。
- 第一次启动namenode格式化后,创建fsimage,edits文件。如果不是第一次启动,那么会将,fsimage和edits加载到内存(合并完成前,hdfs会进入安全模式)
- 客户端对元数据继续增删改的请求
- namenode将这些请求写入edits文件中
- namenode在内存中完成对元数据的增删改操作
- 2nn询问nn是否需要checkPoint,直接带回检查结果
- 2nn请求执行checkPoint
- nn滚动正在写的edits文件
- 将滚动前的edits文件和fsimage文件拷贝到2nn
- 2nn将edits和fsimage文件加载内存,进行合并
- 生成新的fsimage.chenkPoint文件
- 将此文件拷贝给nn
- nn将文件重命名为fsimage
3.fsimage和edits解析NN和2NN工作机制详解:
Fsimage:NameNode内存中元数据序列化后形成的文件。
Edits:记录客户端更新元数据信息的每一步操作(可通过Edits运算出元数据)。
NameNode启动时,先滚动Edits并生成一个空的edits.inprogress,然后加载Edits和Fsimage到内存中,此时NameNode内存就持有最新的元数据信息。Client开始对NameNode发送元数据的增删改的请求,这些请求的操作首先会被记录到edits.inprogress中(查询元数据的操作不会被记录在Edits中,因为查询操作不会更改元数据信息),如果此时NameNode挂掉,重启后会从Edits中读取元数据的信息。然后,NameNode会在内存中执行元数据的增删改的操作。
由于Edits中记录的操作会越来越多,Edits文件会越来越大,导致NameNode在启动加载Edits时会很慢,所以需要对Edits和Fsimage进行合并(所谓合并,就是将Edits和Fsimage加载到内存中,照着Edits中的操作一步步执行,最终形成新的Fsimage)。SecondaryNameNode的作用就是帮助NameNode进行Edits和Fsimage的合并工作。
SecondaryNameNode首先会询问NameNode是否需要CheckPoint(触发CheckPoint需要满足两个条件中的任意一个,定时时间到和Edits中数据写满了)。直接带回NameNode是否检查结果。SecondaryNameNode执行CheckPoint操作,首先会让NameNode滚动Edits并生成一个空的edits.inprogress,滚动Edits的目的是给Edits打个标记,以后所有新的操作都写入edits.inprogress,其他未合并的Edits和Fsimage会拷贝到SecondaryNameNode的本地,然后将拷贝的Edits和Fsimage加载到内存中进行合并,生成fsimage.chkpoint,然后将fsimage.chkpoint拷贝给NameNode,重命名为Fsimage后替换掉原来的Fsimage。NameNode在启动时就只需要加载之前未合并的Edits和Fsimage即可,因为合并过的Edits中的元数据信息已经被记录在Fsimage中。
4.checkPoint时间设置1)oiv查看Fsimage文件
(1)查看oiv和oev命令
[atguigu@hadoop102 current]$ hdfs
oiv apply the offline fsimage viewer to an fsimage
oev apply the offline edits viewer to an edits file
(2)基本语法
hdfs oiv -p 文件类型 -i镜像文件 -o 转换后文件输出路径
(3)案例实操
[atguigu@hadoop102 current]$ pwd
/opt/module/hadoop-3.1.3/data/dfs/name/current[atguigu@hadoop102 current]$ hdfs oiv -p XML -i
fsimage_0000000000000000025 -o /opt/module/hadoop-3.1.3/fsimage.xml[atguigu@hadoop102 current]$ cat /opt/module/hadoop-3.1.3/fsimage.xml
将显示的xml文件内容拷贝到IDEA中创建的xml文件中,并格式化。部分显示结果如下。 16386
DIRECTORY user
1512722284477
atguigu:supergroup:rwxr-xr-x
-1 -1
16387 DIRECTORY atguigu
1512790549080
atguigu:supergroup:rwxr-xr-x
-1 -1
16389 FILE wc.input
3 1512722322219
1512722321610
134217728
atguigu:supergroup:rw-r–r--
1073741825 1001
59
思考:可以看出,Fsimage中没有记录块所对应DataNode,为什么?
在集群启动后,要求DataNode上报数据块信息,并间隔一段时间后再次上报。 2)oev查看Edits文件 (1)基本语法 hdfs oev
-p 文件类型 -i编辑日志 -o 转换后文件输出路径 (2)案例实操 [atguigu@hadoop102 current]$ hdfs oev -p XML -i edits_0000000000000000012-0000000000000000013 -o
/opt/module/hadoop-3.1.3/edits.xml[atguigu@hadoop102 current]$ cat /opt/module/hadoop-3.1.3/edits.xml
将显示的xml文件内容拷贝到Eclipse中创建的xml文件中,并格式化。显示结果如下。 encoding=“UTF-8”?>-63
OP_START_LOG_SEGMENT
129
OP_ADD 130
0 16407
/hello7.txt 2
1512943607866 1512943607866
134217728
DFSClient_NONMAPREDUCE_-1544295051_1
192.168.1.5
true
atguigu
supergroup
420908eafd4-9aec-4288-96f1-e8011d181561
0
OP_ALLOCATE_BLOCK_ID 131
1073741839
OP_SET_GENSTAMP_V2 132
1016
OP_ADD_BLOCK 133
/hello7.txt
1073741839
0
1016-2
OP_CLOSE
134 0 0
/hello7.txt 2
1512943608761 1512943607866
134217728
false
1073741839
25
1016
atguigu
supergroup
420
- checkPoint触发条件:
- 时间到了
- 操作次数达到一定条件
[hdfs-default.xml]5.nn故障处理2)一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode执行一次。 dfs.namenode.checkpoint.period 3600s dfs.namenode.checkpoint.txns 1000000 操作动作次数 dfs.namenode.checkpoint.check.period 60s 1分钟检查一次操作次数
- 将2nn的数据拷贝到nn存储数据的目录
nn存储数据路径
/opt/module/hadoop-3.1.3/data/tmp/dfs/name
2nn存储数据路径
/opt/module/hadoop-3.1.3/data/dfs/namesecondary/*
(1)kill -9 NameNode进程 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.3/data/tmp/dfs/name) [atguigu@hadoop102 hadoop-3.1.3]$ rm -rf /opt/module/hadoop-3.1.3/data/dfs/name/* (3)拷贝SecondaryNameNode中数据到原NameNode存储数据目录 [atguigu@hadoop102 dfs]$ scp -r atguigu@hadoop104:/opt/module/hadoop-3.1.3/data/dfs/namesecondary/* ./name/ (4)重新启动NameNode [atguigu@hadoop102 hadoop-3.1.3]$ hdfs --daemon start namenode
`使用-importCheckpoint选项启动NameNode守护进程,从而将SecondaryNameNode中数据拷贝到NameNode目录中。 (1)修改hdfs-site.xml中的6. 集群安全模式 1.namenode启动dfs.namenode.checkpoint.period 120 (2)kill -9 NameNode进程 (3)删除NameNode存储的数据(/opt/module/hadoop-3.1.3/data/dfs/name) [atguigu@hadoop102 hadoop-3.1.3]$ rm -rf /opt/module/hadoop-3.1.3/data/dfs/name/* (4)如果SecondaryNameNode不和NameNode在一个主机节点上,需要将SecondaryNameNode存储数据的目录拷贝到NameNode存储数据的平级目录,并删除in_use.lock文件 [atguigu@hadoop102 dfs]$ scp -r atguigu@hadoop104:/opt/module/hadoop-3.1.3/data/dfs/namesecondary ./ [atguigu@hadoop102 namesecondary]$ rm -rf in_use.lock [atguigu@hadoop102 dfs]$ pwd /opt/module/hadoop-3.1.3/data/dfs [atguigu@hadoop102 dfs]$ ls data name namesecondary (5)导入检查点数据(等待一会ctrl+c结束掉) [atguigu@hadoop102 hadoop-3.1.3]$ bin/hdfs namenode -importCheckpoint (6)启动NameNode [atguigu@hadoop102 hadoop-3.1.3]$ hdfs --daemon start namenode` dfs.namenode.name.dir /opt/module/hadoop-3.1.3/data/dfs/name
namenode启动时,首先将fsimage和edits文件加载到内存合并.一旦内存中成功建立文件系统元数据的映像,则会创建一个空edits,此时namenode开始监听datanode请求。这个过程期间hdfs对clinet来说时只读的
2.datanode启动 系统中的数据块的位置并不是通过nn维护,(nn只是保存了他们的位置映射)而是以快列表的形式存储在datanode。
在安全模式下,各个datanode会向nn发送最新的快列表信息。namenode了解到足够多的快位置信息之后(所有块的一份副本),即可高效运行文件系统。
如果满足最小副本条件nn会在30秒钟之后退出安全模式 。
最小副本条件:整个文件系统的99.9%的块满足最小副本级别(dfs.replication=1)。在一个刚刚格式化的hdfs集群中,因为系统没有任何块,所以nn不会进入安全模式。
1)基本语法 集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。 (1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态) (2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态) (3)bin/hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态) (4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态) 2)案例 模拟等待安全模式 3)查看当前模式 [atguigu@hadoop102 hadoop-3.1.3]$ hdfs dfsadmin -safemode get Safe mode is OFF 4)先进入安全模式 [atguigu@hadoop102 hadoop-3.1.3]$ bin/hdfs dfsadmin -safemode enter 5)创建并执行下面的脚本 在/opt/module/hadoop-3.1.3路径上,编辑一个脚本safemode.sh [atguigu@hadoop102 hadoop-3.1.3]$ touch safemode.sh [atguigu@hadoop102 hadoop-3.1.3]$ vim safemode.sh #!/bin/bash hdfs dfsadmin -safemode wait hdfs dfs -put /opt/module/hadoop-3.1.3/README.txt / [atguigu@hadoop102 hadoop-3.1.3]$ chmod 777 safemode.sh [atguigu@hadoop102 hadoop-3.1.3]$ ./safemode.sh 6)再打开一个窗口,执行 [atguigu@hadoop102 hadoop-3.1.3]$ bin/hdfs dfsadmin -safemode leave 7)观察 8)再观察上一个窗口 Safe mode is OFF 9)HDFS集群上已经有上传的数据了。7. NameNode多目录配置(了解)
1)NameNode的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性 2)具体配置如下 (1)在hdfs-site.xml文件中添加如下内容10.datanode 1.工作机制(2)停止集群,删除三台节点的data和logs中所有数据。 [atguigu@hadoop102 hadoop-3.1.3]$ rm -rf data/ logs/ [atguigu@hadoop103 hadoop-3.1.3]$ rm -rf data/ logs/ [atguigu@hadoop104 hadoop-3.1.3]$ rm -rf data/ logs/ (3)格式化集群并启动。 [atguigu@hadoop102 hadoop-3.1.3]$ bin/hdfs namenode –format [atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh (4)查看结果 [atguigu@hadoop102 dfs]$ ll 总用量 12 drwx------. 3 atguigu atguigu 4096 12月 11 08:03 data drwxrwxr-x. 3 atguigu atguigu 4096 12月 11 08:03 name1 drwxrwxr-x. 3 atguigu atguigu 4096 12月 11 08:03 name2 dfs.namenode.name.dir file://${hadoop.tmp.dir}/dfs/name1,file://${hadoop.tmp.dir}/dfs/name2
- 一个数据块在dn上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块长度,快数据的检验和(验证数据是否损坏),以及时间戳
- dn启动后会向nn注册,通过后,周期性(1小时)的向nn报告快信息
- 心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
- 集群运行中可以安全加入和退出一些机器。
思考:如果电脑磁盘里面存储的数据是控制高铁信号灯的红灯信号(1)和绿灯信号(0),但是存储该数据的磁盘坏了,一直显示是绿灯,是否很危险?同理DataNode节点上的数据损坏了,却没有发现,是否也很危险,那么如何解决呢?
如下是DataNode节点保证数据完整性的方法。
(1)当DataNode读取Block的时候,它会计算CheckSum。
(2)如果计算后的CheckSum,与Block创建时值不一样,说明Block已经损坏。
(3)Client读取其他DataNode上的Block。
(4)常见的校验算法 crc(32),md5(128),sha1(160)
(5)DataNode在其文件创建后周期验证CheckSum。
需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval的单位为秒。4.节点的增加于减少dfs.namenode.heartbeat.recheck-interval 300000 dfs.heartbeat.interval 3
1)需求 随着公司业务的增长,数据量越来越大,原有的数据节点的容量已经不能满足存储数据的需求,需要在原有集群基础上动态添加新的数据节点。 2)环境准备 (1)在hadoop104主机上再克隆一台hadoop105主机 (2)修改IP地址和主机名称 (3)删除原来HDFS文件系统留存的文件(/opt/module/hadoop-3.1.3/data和logs) (4)source一下配置文件 [atguigu@hadoop105 hadoop-3.1.3]$ source /etc/profile 3)服役新节点具体步骤 (1)直接启动DataNode,即可关联到集群 [atguigu@hadoop105 hadoop-3.1.3]$ hdfs --daemon start datanode [atguigu@hadoop105 hadoop-3.1.3]$ yarn --daemon start nodemanager (2)在hadoop105上上传文件 [atguigu@hadoop105 hadoop-3.1.3]$ hadoop fs -put /opt/module/hadoop-3.1.3/LICENSE.txt / (3)如果数据不均衡,可以用命令实现集群的再平衡 [atguigu@hadoop102 sbin]$ ./start-balancer.sh starting balancer, logging to /opt/module/hadoop-3.1.3/logs/hadoop-atguigu-balancer-hadoop102.out Time Stamp Iteration# Bytes Already Moved Bytes Left To Move Bytes Being Moved 6.5 退役旧数据节点 6.5.1 添加白名单和黑名单 白名单和黑名单是hadoop管理集群主机的一种机制。 添加到白名单的主机节点,都允许访问NameNode,不在白名单的主机节点,都会被退出。添加到黑名单的主机节点,不允许访问NameNode,会在数据迁移后退出。 实际情况下,白名单用于确定允许访问NameNode的DataNode节点,内容配置一般与workers文件内容一致。 黑名单用于在集群运行过程中退役DataNode节点。 配置白名单和黑名单的具体步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.3/etc/hadoop目录下分别创建whitelist 和blacklist文件 [atguigu@hadoop102 hadoop]$ pwd /opt/module/hadoop-3.1.3/etc/hadoop [atguigu@hadoop102 hadoop]$ touch whitelist [atguigu@hadoop102 hadoop]$ touch blacklist 在whitelist中添加如下主机名称,假如集群正常工作的节点为102 103 104 105 hadoop102 hadoop103 hadoop104 hadoop105 黑名单暂时为空。 2)在hdfs-site.xml配置文件中增加dfs.hosts和 dfs.hosts.exclude配置参数dfs.hosts /opt/module/hadoop-3.1.3/etc/hadoop/whitelist 3)分发配置文件whitelist,blacklist,hdfs-site.xml (注意:105节点也要发一份) [atguigu@hadoop102 etc]$ xsync hadoop/ [atguigu@hadoop102 etc]$ rsync -av hadoop/ atguigu@hadoop105:/opt/module/hadoop-3.1.3/etc/hadoop/ 4)重新启动集群(注意:105节点没有添加到workers,因此要单独起停) [atguigu@hadoop102 hadoop-3.1.3]$ stop-dfs.sh [atguigu@hadoop102 hadoop-3.1.3]$ start-dfs.sh [atguigu@hadoop105 hadoop-3.1.3]$ hdfs –daemon start datanode 5)在web浏览器上查看目前正常工作的DN节点 6.5.2 黑名单退役 1)编辑/opt/module/hadoop-3.1.3/etc/hadoop目录下的blacklist文件 [atguigu@hadoop102 hadoop] vim blacklist 添加如下主机名称(要退役的节点) hadoop105 2)分发blacklist到所有节点 [atguigu@hadoop102 etc]$ xsync hadoop/ [atguigu@hadoop102 etc]$ rsync -av hadoop/ atguigu@hadoop105:/opt/module/hadoop-3.1.3/etc/hadoop/ 3)刷新NameNode、刷新ResourceManager [atguigu@hadoop102 hadoop-3.1.3]$ hdfs dfsadmin -refreshNodes Refresh nodes successful [atguigu@hadoop102 hadoop-3.1.3]$ yarn rmadmin -refreshNodes 17/06/24 14:55:56 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.1.103:8033 4)检查Web浏览器,退役节点的状态为decommission in progress(退役中),说明数据节点正在复制块到其他节点 5)等待退役节点状态为decommissioned(所有块已经复制完成),停止该节点及节点资源管理器。注意:如果副本数是3,服役的节点小于等于3,是不能退役成功的,需要修改副本数后才能退役 [atguigu@hadoop105 hadoop-3.1.3]$ hdfs --daemon stop datanode stopping datanode [atguigu@hadoop105 hadoop-3.1.3]$ yarn --daemon stop nodemanager stopping nodemanager 6)如果数据不均衡,可以用命令实现集群的再平衡 [atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-balancer.sh starting balancer, logging to /opt/module/hadoop-3.1.3/logs/hadoop-atguigu-balancer-hadoop102.out Time Stamp Iteration# Bytes Already Moved Bytes Left To Move Bytes Being Moved 注意:不允许白名单和黑名单中同时出现同一个主机名称,既然使用了黑名单blacklist成功退役了hadoop105节点,因此要将白名单whitelist里面的hadoop105去掉。 dfs.hosts.exclude /opt/module/hadoop-3.1.3/etc/hadoop/blacklist



