6.1.DataNode工作机制

  1. 一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,数据块的校验和,以及时间戳。
  2. DataNode启动后向NameNode注册,注册成功后,周期性的向NameNode上报所有的块信息。
  3. 心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令,例如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
  4. 集群运行中可以安全加入和退出一些机器。

6.2.数据完整性

  1. 当DataNode读取block的时候,它会计算checksum。
  2. 如果计算后的checksum,与block创建时值不一样,说明block已经损坏。
  3. client读取其他DataNode上的block。
  4. DataNode在文件创建后周期性验证checksum。

6.3.掉线时限参数设置

DataNode进程死亡或者网络故障造成DataNode无法与NameNode通信,NameNode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长。HDFS默认的超时时长为10分钟+30秒。如果定义超时时间为timeout,则超时时长的计算公式为:
timeout = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval
说明:默认的dfs.namenode.heartbeat.recheck-interval 大小为5分钟,dfs.heartbeat.interval默认为3秒。在hdfs-site.xml 配置文件中dfs.namenode.heartbeat.recheck-interval的单位为毫秒,dfs.heartbeat.interval的单位为秒。

<property><name>dfs.namenode.heartbeat.recheck-interval</name><value>300000</value>
</property>
<property><name> dfs.heartbeat.interval </name><value>3</value>
</property>

6.4.增加新数据节点

需求:随着公司业务的增长,数据量越来越大,原有的数据节点的容量已经不能满足存储数据的需求,需要在原有集群基础上动态添加新数据节点。

环境准备

  1. 克隆一台虚拟机(NameNode)
  2. 修改ip地址和主机名称
  3. 增加新增节点的ssh免密码登录配置
  4. 删除新节点上data和logs目录中的文件(因为克隆的NameNode主机)

操作步骤

  1. 在namenode的/opt/module/hadoop-2.7.2/etc/hadoop目录下创建dfs.hosts文件
touch dfs.hosts
vi dfs.hosts

添加如下主机名称(所有DataNode节点,包含新增的节点hadoop105)

hadoop102
hadoop103
hadoop104
hadoop105

注意:其中dfs.hosts列出了连入NameNode的节点,如果为空,则所有的DataNode都可以连入NameNode。如果不为空,则文件中存在的DataNode可以连入。
dfs.hosts.exclude列出了禁止连入NameNode的节点。如果一个节点同时存在于dfs.hosts和dfs.hosts.exclude,则禁止连入。

  1. 在namenode的hdfs-site.xml配置文件中增加dfs.hosts属性
<property><name>dfs.hosts</name><value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts</value>
</property>
  1. 刷新namenode
hdfs dfsadmin -refreshNodes

结果如下所示

Refresh nodes successful
  1. 刷新resourcemanager节点
yarn rmadmin -refreshNodes

结果如下所示

INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.1.103:8033
  1. 在NameNode和DataNode的slaves文件中增加新主机名称
hadoop102
hadoop103
hadoop104
hadoop105
  1. 在新的节点上启动数据节点和节点管理器
sbin/hadoop-daemon.sh start datanode

结果如下所示

starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-lubin-datanode-hadoop105.out
sbin/yarn-daemon.sh start nodemanager

结果如下所示

starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-lubin-nodemanager-hadoop105.out
  1. 在web浏览器上检查是否ok

  2. 如果数据不均衡,可以用命令实现集群的再平衡(在sbin目录下执行如下命令)

./start-balancer.sh

如下所示

starting balancer, logging to /opt/module/hadoop-2.7.2/logs/hadoop-lubin-balancer-hadoop102.out
Time Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved

6.5.退役旧数据节点

(1) 在namenode $HADOOP_HOME/etc/hadoop目录下创建dfs.hosts.exclude文件

touch dfs.hosts.exclude

添加退役节点主机名

hadoop105

(2) 在namenode的hdfs-site.xml配置文件中增加dfs.hosts.exclude属性

<property><name>dfs.hosts.exclude</name><value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts.exclude</value>
</property>

(3) 在namenode所在节点刷新namenode、在resourcemanager所在节点刷新resourcemanager

$ hdfs dfsadmin -refreshNodes

出现如下所示信息,表示刷新成功

Refresh nodes successful
$ yarn rmadmin -refreshNodes

出现如下所示信息,表示刷新成功

INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.1.103:8033

(4) 检查web浏览器,退役节点的状态为decommission in progress(退役中),说明数据节点正在复制块到其他节点。

(5) 等待退役节点状态为decommissioned(所有块已经复制完成),停止该节点及节点资源管理器。注意:如果副本数是3,服役的节点小于等于3,是不能退役成功的,需要修改副本数后才能退役。

(6) 在退役节点上,停止该节点进程

sbin/hadoop-daemon.sh stop datanode
stopping datanode
sbin/yarn-daemon.sh stop nodemanager
stopping nodemanager

(7) 从namenode的dfs.hosts文件中删除退役节点hadoop105

hadoop102
hadoop103
hadoop104

刷新namenode,刷新resourcemanager

$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
$ yarn rmadmin -refreshNodes
INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.1.103:8033

(8) 从NameNode和DataNode的slave文件中删除退役节点hadoop105

hadoop102
hadoop103
hadoop104

(9) 如果数据不均衡,可以用命令实现集群的再平衡

$ sbin/start-balancer.sh
starting balancer, logging to /opt/module/hadoop-2.7.2/logs/hadoop-lubin-balancer-hadoop102.out
Time Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved

6.6.Datanode多目录配置

  • datanode也可以配置成多个目录,每个目录存储的数据不一样。即:数据不是副本。
  • 修改配置文件hdfs-site.xml
<property><name>dfs.datanode.data.dir</name><value>file:///${hadoop.tmp.dir}/dfs/data1,file:///hd2/dfs/data2</value>
</property>

注意:默认值为file:///${hadoop.tmp.dir}/dfs/data,若服务器有多个磁盘必须对这个参数进行修改(注意挂载磁盘的访问权限问题);
每台服务器节点磁盘情况不一样,所以修改该配置后,不需要分发;

6.7.数据均衡

6.7.1.Hadoop节点间数据均衡

(1) 开启数据均衡

sbin/start-balancer.sh -threshold 10

参数:10表示集群中各节点磁盘空间利用率相差不超过10%,可根据实际情况进行调整

(2) 停止数据均衡

sbin/stop-balancer.sh

注意:由于HDFS需要启动单独的Rebalance Server来执行Rebalance操作,所以尽量不要在NameNode上执行start-balancer.sh。

(2) Hadoop2.X 支持节点间数据均衡

hdfs balancer -help
Usage: java Balancer[-policy <policy>]    the balancing policy: datanode or blockpool[-threshold <threshold>]    Percentage of disk capacity[-exclude [-f <hosts-file> | comma-sperated list of hosts]]    Excludes the specified datanodes.[-include [-f <hosts-file> | comma-sperated list of hosts]]    Includes only the specified datanodes.

为了更高效率的执行balancer操作,建议如下:

  • -threshold 10 参数含义:判断集群是否平衡的目标参数,每一个 datanode 存储使用率和集群总存储使用率的差值都应该小于这个阀值,理论上,该参数设置的越小,整个集群就越平衡,但是在线上环境中,hadoop集群在进行balance时,还在并发的进行数据的写入和删除,所以有可能无法到达设定的平衡参数值。

  • -include 参数含义:要进行均衡的datanode列表

  • -exclude 参数含义:不想进行均衡的datanode列表

hdfs dfsadmin -setBalancerBandwidth xxx 参数含义:设置balance工具在运行中所能占用的带宽,设置的过大可能会造成mapred运行缓慢。

CDH Balancer的用法很简单,只需要设定好上述参数,再点击Actions→Rebalance菜单项,就会自动开始平衡了。如果之前有运行,需要先中止掉,如果起不来,需要kill 掉

6.7.2.磁盘间数据均衡

(1) 开启disk balancer
在CDH 5.8.2+版本中,可以通过在CM中配置。如果使用的Hadoop版本是3.0+(hadoop2.X不支持磁盘间数据均衡),就直接在hdfs-site.xml中加入相关项。设置dfs.disk.balancer.enabled为true

(2) 生成均衡计划

hdfs diskbalancer -plan cdh4

注意:cdh4为需要均衡的主机

(3) 执行均衡计划

hdfs diskbalancer -execute {/system/diskbalancer/XXXXX/{主机名}.plan.json}

(4) 查看执行状态hdfs diskbalancer -query {主机名}

(5)结束及检查

hadoop2.x不能自动对磁盘进行均衡,在节点的hdfs-site.xml中添加了几个参数用来改变数据存储策略已达到均衡的目的,添加完参数后重启这个节点的datanode即可。

<property> <name>dfs.datanode.fsdataset.volume.choosing.policy</name> <value>org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy</value>
</property><property> <name>dfs.datanode.available-space-volume-choosing-policy.balanced-space-threshold</name> <value>10737418240</value>
</property> <property> <name>dfs.datanode.available-space-volume-choosing-policy.balanced-space-preference-fraction</name> <value>0.85f</value>
</property>

参数解释
dfs.datanode.available-space-volume-choosing-policy.balanced-space-threshold 剩余容量最大的磁盘与最小的磁盘的容量之差(10G默认值)

dfs.datanode.available-space-volume-choosing-policy.balanced-space-preference-fraction 如果当前副本的大小大于lowAvailableVolumes里面所有的磁盘最大的可用空间,那么会存放到highAvailableVolumes里面,除此之外的情况会以85%的概率存放到highAvailableVolumes,15%的概率存放到lowAvailableVolumes。
注意
这个对于已经存储到磁盘上面的数据是无效的,只针对后续存储的数据有效,对于已经存储的数据使用均衡进行数据转移。

第6章 DataNode相关推荐

  1. HDFS(下):NameNode和SecondaryNameNode、HDFS工作机制、故障处理、集群安全模式、服役退役节点、集群黑白名单、DataNode多目录详解、HDFS2.x新特性

    接上篇,上篇文章传送门:HDFS(上):HDFS优缺点.HDFS操作.HDFS客户端操作.HDFS的API.HDFS数据流.HDFS的IO流.HDFS读写数据流程.HDFS文件处理详解.windows ...

  2. 【大数据】Hadoop (二) HDFS

    课程链接: 尚硅谷大数据Hadoop 3.x(入门搭建+安装调优)_哔哩哔哩_bilibili (Hadoop到底是干什么用的? - 知乎 (zhihu.com) 资料 Hadoop中文文档 (apa ...

  3. 03.Hadoop之HDFS

    第1章 HDFS概述 1.1 HDFS产出背景及定义 1)HDFS产生背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一 ...

  4. 03大数据技术之Hadoop(HDFS)

    03大数据技术之Hadoop(HDFS)(老师:尚硅谷) 文章目录 03大数据技术之Hadoop(HDFS)(老师:尚硅谷) 第1章 HDFS概述 1.1 HDFS产出背景及定义 1.2 HDFS优缺 ...

  5. 详细介绍HDFS的API实操与读写流程

    第 1 章 HDFS 概述 定义 是一个文件系统,是分布式的 使用场景 适合一次写入,多次读出的场景 优点 高容错性.适合处理大数据.可构建在廉价机器上 缺点 不适合低延时数据访问.无法高效的对大量小 ...

  6. 膜拜,华为内部都在强推的783页大数据处理系统:Hadoop源代码pdf

    前言 都说程序员工资高.待遇好, 2022 金九银十到了,你的小目标是 30K.40K,还是 16薪的 20K?作为一名 Java 开发工程师,当能力可以满足公司业务需求时,拿到超预期的 Offer ...

  7. 第七章:小朱笔记hadoop之源码分析-hdfs分析 Datanode 心跳分析

    第七章:小朱笔记hadoop之源码分析-hdfs分析 第五节:Datanode 分析 5.2 Datanode 心跳分析 (1)offerService分析 写道 (a)检查心跳间隔是否超时,如是向n ...

  8. 第七章:小朱笔记hadoop之源码分析-hdfs分析 第五节:Datanode 分析

    第七章:小朱笔记hadoop之源码分析-hdfs分析 第五节:Datanode 分析 5.1 Datanode 启动过程分析 5.2 Datanode 心跳分析 5.3 Datanode 注册分析 5 ...

  9. 数据结构思维 第六章 树的遍历

    第六章 树的遍历 原文:Chapter 6 Tree traversal 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 本章将介绍一个 Web 搜索引擎,我们将在本书其余部分开 ...

  10. 第三章-分布式文件系统HDFS

    第三章-分布式文件系统HDFS 文章目录 第三章-分布式文件系统HDFS HDFS简介 HDFS相关概念 HDFS块与组件 名称节点 第二名称节点 数据节点 HDFS体系结构 HDFS存储原理 冗余数 ...

最新文章

  1. js 获取今天以及前一周/前20天时间
  2. 完美搞定《DOCKER IN ACTION》第二章示例
  3. CVPR 2020 | 反传统的无监督人脸旋转方案:旋转-渲染
  4. python右对齐乘法表_python如何打印99乘法表
  5. DNN网络(三)python下用Tensorflow实现DNN网络以及Adagrad优化器
  6. 40vf什么意思_LED 的基本术语VF、IV、WL、IR 解释及光通量换算关系
  7. 最新JAVA+Python+大数据资料分享
  8. 用VC#.NET+GDI+开发交互式CAD系统
  9. IntelliJ IDEA入门教程:如何使用工具窗口
  10. win10内置ubuntu, 启动时提示“指定的网络名不再可用”无法启动解决办法
  11. 一个月薪 12000 的北京程序员的真实生活
  12. Vultr Debian系统如何重置ROOT管理员密码
  13. 门限签名技术火了,它的硬核之处绝不仅仅是秘密共享……
  14. AWS认证是什么意思?怎么报考?
  15. Python学习打卡第一周
  16. 又一AI大牛重返学界! 原京东高级副总裁周伯文受聘为清华电子工程系长聘教授...
  17. 如何组装一个注册中心?
  18. 计算机丢失credui.dll,修复credui.dll
  19. 送书 | 《趣学Python算法100例》
  20. 在给雅虎董事会的信中,鲍尔默说了什么?

热门文章

  1. 测试用例设计——正交实验法
  2. Multisim基础 调出面包板
  3. Springboot+jwt+shiro实现用户权限控制
  4. 矩阵的乘法与利用矩阵求解线性方程组
  5. 腾讯产品经理培训生笔试攻略,笔试题型详细解析(送历年笔试题库)!
  6. 阿里iconfont矢量图库使用
  7. 类成员函数作为线程函数使用
  8. POJ 3764 The xor-longest Path
  9. day048:LocalDateTime中增加、减少、直接修改时间的方法、计算时间间隔的方法
  10. Mac电脑Android模拟器连不上网,mac 解决安卓模拟器链接不上网络