Hadoop-HDFS之Datanode的操作及原理

DataNode详解

Datanode工作机制

在这里插入图片描述箭头所指的第一个文件存放真实的文件块,第二个meta文件是存放一些时间戳,校验和之类的。
在这里插入图片描述

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

设置节点掉线时限

当心跳3秒后该节点仍未有反应,那么namenode不会立即认为该节点死亡。
在这里插入图片描述

需要注意的是hdfs-site.xml 配置文件中的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>

数据完整性

在这里插入图片描述
1)当DataNode读取Block的时候,它会计算CheckSum。
2)如果计算后的CheckSum,与Block创建时值不一样,说明Block已经损坏。
3)Client读取其他DataNode上的Block。
4)DataNode在其文件创建后周期验证CheckSum。

新节点服役

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

  1. 环境准备
    (1)在hadoop3主机上再克隆一台hadoop4主机
    (2)修改IP地址和主机名称,告诉新机器namenode和resourcemanager在哪里。
    (3)删除原来HDFS文件系统留存的文件(/opt/module/hadoop-2.7.2/data 和log)
    (4)source 一下配置文件:

直接启动DataNode,即可关联到集群,同理,如果要扩容计算节点,只需启动resourcemanager和nodemanager

退役节点

添加白名单(伪退役)

添加到白名单的主机,都允许访问NameNode,不在白名单的主机,都会被退出。
配置白名单的具体步骤如下:
(1)在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目录下创建dfs.hosts文件:

[ygp@hadoop1 hadoop]$ pwd
/opt/module/hadoop-2.7.2/etc/hadoop
[ygp@hadoop1 hadoop]$ touch dfs.hosts
[ygp@hadoop1 hadoop]$ vi dfs.hosts

添加如下主机名称(不添加hadoop3)
hadoop1
hadoop2

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

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

(4)刷新NameNode

[ygp@hadoop1hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
添加黑名单(真退役)

如果是退役datanode节点,要保证在退役前将数据交给其他的datanode。
【注】一个datanode要真的退役,必须在白名单和黑名单同时存在。

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

[ygp@hadoop1 hadoop]$ pwd
/opt/module/hadoop-2.7.2/etc/hadoop
[ygp@hadoop1 hadoop]$ touch dfs.hosts.exclude
[ygp@hadoop1 hadoop]$ vi dfs.hosts.exclude

添加如下主机名称(要退役的节点)
hadoop3

同时我也要在白名单里加入hadoop3.
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

[ygp@hadoop1 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
  1.  检查Web浏览器,退役节点的状态为decommission in progress(退役中),说明数据节点正在复制块到其他节点
    
  2. 在这里插入图片描述

Datanode多目录配置

  1. DataNode也可以配置成多个目录,每个目录存储的数据不一样。即:数据不是副本
    2.具体配置如下
	hdfs-site.xml
<property>
        <name>dfs.datanode.data.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
</property>

哪个机器需要多目录就在哪个机器配置。
然后存数据的时候是配置的多目录轮流去存块,你存一块,我存一块。

Hadoop归档

在这里插入图片描述

1)需要启动YARN进程
[ygp@hadoop2 hadoop-2.7.2]$ start-yarn.sh
(2)归档文件
	把你自己建的测试目录比如/user/ygp/input里面的所有文件归档成一个叫input.har的归档文件,并把归档后文件存储到/user/ygp/output路径下。
[ygp@hadoop2 hadoop-2.7.2]$ hadoop archive -archiveName input.har –p  /user/ygp/input   /user/ygp/output
(3)查看归档
[ygp@hadoop2 hadoop-2.7.2]$ hadoop fs -lsr /user/ygp/output/input.har
[ygp@hadoop2 hadoop-2.7.2]$ hadoop fs -lsr har:///user/ygp/output/input.har4)解归档文件
[ygp@hadoop2 hadoop-2.7.2]$ hadoop fs -cp har:/// user/ygp/output/input.har/*    /user/ygp
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值