Hadoop之DataNode

DataNode

1、DataNode工作机制

修改:以后每周期(6小时)上报所有块信息!!!!!

心跳机制:心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制。DataNode会主动联系NameNode。

工作流程

1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。在介绍NameNode时,介绍了NameNode中含有每隔块中的信息,包括文件(或者目录)的id,权限,所有者以及文件大小等,但是不包括块是存储在哪一个DataNode里面,这时候在汇报的时候,NameNode会汇报自己含有的块信息。

2)DataNode启动后向NameNode注册,通过后,周期性(6小时)的向NameNode上报所有的块信息。
3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
4)集群运行中可以安全加入和退出一些机器。

2、数据完整性

DataNode会自己去校验自己的信息,避免数据错误。但是在一般情况下,不是人为的破坏数据,DataNode中的数据不会有变化或者修改。

校验流程

1)当DataNode读取block的时候,它会计算checksum

2)如果计算后的checksum,与block创建时值不一样,说明block已经损坏。

3)client读取其他DataNode上的block.

4)datanode在其文件创建后周期验证checksum
通常使用的校验算法是crc(32)校验、md5(128)校验、sha1(160)校验

算法校验拓展

crc、md5、sha1

  1. 算法不同。CRC采用多项式除法,MD5和SHA1使用的是替换、轮转等方法;

  2. 校验值的长度不同。CRC校验位的长度跟其多项式有关系,一般为16位或32位;MD5是16个字节(128位);SHA1是20个字节(160位);

  3. 校验值的称呼不同。CRC一般叫做CRC值;MD5和SHA1一般叫做哈希值(Hash)或散列值;

  4. 安全性不同。这里的安全性是指检错的能力,即数据的错误能通过校验位检测出来。CRC的安全性跟多项式有很大关系,相对于MD5和SHA1要弱很多;MD5的安全性很高,不过大概在04年的时候被山东大学的王小云破解了;SHA1的安全性最高。

  5. 效率不同,CRC的计算效率很高;MD5和SHA1比较慢。

  6. 用途不同。CRC一般用作通信数据的校验;MD5和SHA1用于安全(Security)领域,比如文件校验、数字签名等。
    在这里插入图片描述

在这个奇偶校验算法中还是存在问题,算法过于简单而且容易出错。所以,在确保数据完整性还是需要**校验算法,而且校验算法有一定的可靠性!!!**才可以保证数据大概率不会出错。

3、掉线时限参数设置

在这里插入图片描述

datanode进程死亡或者网络故障造成datanode无法与namenode通信,namenode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长。HDFS默认的超时时长为10分钟+30秒。如果定义超时时间为timeout,则超时时长的计算公式为:

TimeOut = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.namenode.heartbeat.recheck

而默认的dfs.namenode.heartbeat.recheck-interval大小是5分钟,dfs.namenode.heartbeat.recheck心跳机制的默认时间是3秒

修改hdfs-site.xml文件进行修改NameNode和DataNode联系的时间

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

4、服务新数据节点

需求

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

环境配置

1)在原有的主机上克隆一台新的主机hadoop3

2)修改hadoop3主机的IP地址和主机名称

2)删除原来HDFS文件系统中保存的文件(所有的data数据和logs日志)

4)source 一下配置文件,配置一下/etc/profile(hadoop以及jdk的环境变量)

服役新节点的具体步骤

  • 直接启动DataNode,即可关联到集群
hdfs --daemon start datanode 
# start-dfs.sh
yarn --daemon start yarn
# stop-yarn.sh

5、退役旧数据结点

添加到白名单的主机节点,都允许访问NameNode,不在白名单的主机节点,都会被直接退出。

添加到黑名单的主机节点,不允许访问NameNode,会在诗句迁移后退出。

实际情况下,白名单用于确定允许访问DataNode节点,内容配置一般与workers文件内容一致。黑名单用于在集群运行过程中退役DataNode节点。

增加黑名单和白名单

配置黑名单和白名单的具体步骤如下:

1)在NameNode的/usr/local/hadoop/etx/hadoop(这是我自己配置的hadoop路径,hadoop路径根据自己自身情况而定)目录下分别创建whitelist和blacklist文件。

# 假设现在的路径在/usr/local/hadoop/etc/hadoop
# 新建黑白两个名单
touch whitelist	# 新建白名单
touch blacklist # 新建黑名单

在whitelist白名单中添加配置的主机名称hadoop3,假设集群正常工作的节点是hadoop,hadoop1,hadoop2

hadoop
hadoop1
hadoop2
hadoop3

黑名单暂时为空

2)在NameNode的hdfs-site.xml配置文件中添加dfs.hosts和dfs.hosts.exclude 配置

<!--配置白名单-->
<property>
<name>dfs.hosts</name>
<value>/usr/local/hadoop/etc/hadoop/etc/hadoop/whitelist</value>
</property>
<!--配置黑名单-->
<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/hadoop/etc/hadoop/etc/hadoop/blacklist<value>
<property>

3)集群分发

# 分发whitelist
rsync whitelist root@hadoop:/usr/local/hadoop/etc/hadoop/etc/hadoop/whitelist  # 其他节点同理

# 分发blacklist
rsync blacklist root@hadoop:/usr/local/hadoop/etc/hadoop/etc/hadoop/blacklist

# 分发hdfs-site.xml
rsync whitelist root@hadoop:/usr/local/hadoop/etc/hadoop/etc/hadoop/hdfs-site.xml

4)重新启动集群

start-dfs.sh
start-yarn.sh

黑名单退役

1)准备使用黑名单退役hadoop3

编写blacklist文件,增加hadoop3

vi blacklist
hadoop3

2)刷新NameNode

hdfs dfsadmin -refreshNodes

3)在web端查看DN状态,hadoop3正在退役中。。进行数据的迁移退役中表示将数据给其他可运行的NameNode,当节点hadoop3节点完成退役后,颜色会变成黄色。

4)如果hadoop3启动了NameNode以及NodeManager,也可以刷新yarn的状态

yarn rmadmin -refreshNodes

如果想要退役的节点重新回来

  • 去掉黑名单的内容
  • 重新刷新一遍 输入 hdfs dfsadmin -refreshNodes

白名单退役【不推荐】

1)找到白名单的位置

2)删除(擦除)不需要的数据

6、DataNode 多目录

DataNode也可以配置成多个目录,每个目录存储的数据不一样。即:数据不是副本

配置在hdfs-site.xml

<!--存放data的节点地方-->
<property>
 <name>dfs.datanode.data.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
</property>

需要清除之前所有的数据(data)和日志(logs),进行重新格式化,然后再启动集群

7、DataNode和NameNode多目录区别

NameNode多目录配置

NameNode的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性
具体配置如下
(1)在hdfs-site.xml文件中增加如下内容

<property>
    <name>dfs.namenode.name.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2</value>
</property>

步骤

(1)修改完毕后,将修改内容分发一下并重启dfs
(2)停止集群,删除data和logs中所有数据。
(3)格式化集群并启动。

bin/hdfs namenode –format
sbin/start-dfs.sh

NameNode多目录的作用:提高可用性

Datanode多目录配置

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>

步骤:修改文件后同步,重新格式化,启动hdfs及yarn,上传文件测试,观察目录中的内容不一样
Datanode的作用:保证所有磁盘都被利用均衡

一、引起磁盘倾斜不均衡的可能原因有哪些
(1)扩容节点,向集群中添加新的数据节点 (服役新节点候可以使用hadoop自带的balancer来使数据再平衡)
(2)数据节点之间的磁盘大小不一致

二、磁盘倾斜引起的性能问题
(1)MR程序无法很好地利用本地计算的优势
(2)机器之间无法达到更好的网络带宽使用率
(3)机器磁盘无法利用

  • 18
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值