HDFS中的概念解析

1 HDFS block块
  • HDFS3.x上的文件,以128M(不足128M的以实际大小存储)为单位,切分成一个个block,分散的存储在集群的不同数据节点datanode上

  • 采用的是3副本技术

  • 设置指定文件(例如:test)副本数

hdfs dfs -setrep -R 4 /test
  • 查看文件的块信息
hdfs fsck /test -files -blocks -locations
2 HDFS体系架构

HDFS有metadata(元数据),其存储在nameNode的内存中。

  • 管理节点(nameNode),负责管理文件系统和命名空间,存放HDFS的元数据。
  • 元数据:文件系统树、所有的文件和目录、每个文件的块列表、块所在的dataNode等信息。
  • 文件、block、目录占用大概150Byte的元数据,所以HDFS适合存储大文件,不适合存储小文件。
  • 元数据信息以命名空间镜像文件fsimage和编辑日志(edits log)的方式保存;其中,fsimage是指元数据镜像文件,保存了文件系统的目录树信息以及文件和块的对应关系;edits log是日志文件,保存文件系统的更改记录。
    在这里插入图片描述
3 HDFS副本存储策略

第一副本:存储在上传文件的DataNode上;如果是集群外上传,则随机挑选一台磁盘不太慢、CPU不太忙的DataNode节点上;

第二副本:存储在与第一个副本不同的机架的节点上;

第三副本:存储在与第二个副本相同机架的不同节点上;

如果还有更多的副本:随机放在节点中;

注意
  • HDFS中存储的文件的副本数由上传文件时设置的副本数决定。无论以后怎么更改系统副本系数,这个文件的副本数都不会改变。
  • 在上传文件时优先使用CLI中指定的副本数,如果CLI没有指定则使用hdfs-site.xml中dfs.replication设置的默认值。
4 HDFS机制
4.1 HDFS心跳机制在这里插入图片描述
HDFS心跳机制的工作原理
  • master启动的时候,会开启一个ipc server。
  • slave启动后连接master,每隔3秒钟向master发送一个“心跳”并携带状态信息。
  • master通过这个心跳的返回值,向slave节点传达指令。
HDFS心跳机制的作用
  • NameNode负责数据块的复制,它周期性的接收集群中的每个DataNode发送过来的心跳信号和块状态报告(Blockreport)。NameNode可以接收到DataNode的心跳信号,则意味着该DataNode节点工作正常。块状态报告包含DataNode上所有数据块的列表。
  • DataNode启动成功后注册到NameNode上,注册成功后,DataNode周期性(1小时)的向NameNode上报所有块列表。DataNode每3秒向NameNode发送一次心跳,同时返回NameNode给该DataNode的命令(如:复制块数据到另一台机器,或删除某个数据块)。如果NameNode超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
  • hadoop集群刚启动时,会进入安全模式(99.9%=启动的block个数/全部的block个数),这时就用到了心跳机制。
元数据存储在NameNode的内存中,其带来的问题的解决办法

Secondary NameNode 从Primary NameNode取回fsimage和edits,然后将两者合并成fsimage.ckpt文件并传输到Primary NameNode中,然后把fsimage.ckpt文件持久化到Primary NameNode的硬盘上成为fsimage文件,新发生的edits也会持久化到硬盘上。如果Primary NameNode发生宕机重启后会把两者都加载到其内存,从而保证元数据的不丢失。
在这里插入图片描述

4.2 HDFS负载均衡
负载均衡简介

Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,例如:当集群内新增、删除节点,或者某个节点机器内硬盘存储达到饱和值。当数据不平衡时,Map任务可能会分配到没有存储数据的机器,这将导致网络带宽的消耗,也无法很好的进行本地计算。当HDFS负载不均衡时,需要对HDFS进行数据的负载均衡调整,即对各节点机器上数据的存储分布进行调整。从而,让数据均匀的分布在各个DataNode上,均衡IO性能,防止热点的发生。进行数据的负载均衡调整,必须要满足如下原则:

  • 数据平衡不能导致数据块减少,数据块备份丢失
  • 管理员可以中止数据平衡进程
  • 每次移动的数据量以及占用的网络资源,必须是可控的
  • 数据均衡过程,不能影响namenode的正常工作
HDFS数据负载均衡原理

数据均衡过程的核心是一个数据均衡算法,该数据均衡算法将不断迭代数据均衡逻辑,直至集群内数据均衡为止。该数据均衡算法每次迭代的逻辑步骤如下:

  • 数据均衡服务(Rebalancing Server)首先要求 NameNode 生成 DataNode 数据分布分析报告,获取每个DataNode磁盘使用情况。
  • Rebalancing Server汇总需要移动的数据分布情况,计算具体数据块迁移路线图。数据块迁移路线图,确保网络内最短路径。
  • 开始数据块迁移任务,Proxy Source Data Node复制一块需要移动的数据块。
  • 将复制的数据块复制到目标DataNode上。
  • 删除原始数据块。
  • 目标DataNode向Proxy Source Data Node确认该数据块迁移完成。
  • Proxy Source Data Node向Rebalancing Server确认本次数据块迁移完成。然后继续执行这个过程,直至集群达到数据均衡标准。
DataNode分组

在上述的第2步中,HDFS会把当前的DataNode节点,根据阈值的设定情况划分到Over、Above、Below、Under四个组中。在移动数据块的时候,Over组、Above组中的块向Below组、Under组移动。四个组定义如下:

  • Over组 :此组中的DataNode的均满足DataNode_usedSpace_percent > Cluster_usedSpace_percent + threshold
  • Above组 :此组中的DataNode的均满足Cluster_usedSpace_percent + threshold > DataNode_ usedSpace _percent >Cluster_usedSpace_percent
  • Below组 :此组中的DataNode的均满足Cluster_usedSpace_percent > DataNode_ usedSpace_percent > Cluster_ usedSpace_percent – threshold
  • Under组 :此组中的DataNode的均满足Cluster_usedSpace_percent – threshold > DataNode_usedSpace_percent
HDFS 数据自动平衡脚本使用方法

在Hadoop中,包含一个start-balancer.sh脚本,通过运行这个工具,启动HDFS数据均衡服务。该工具可以做到热插拔,即无须重启计算机和 Hadoop 服务。$HADOOP_HOME/sbin/目录下的start−balancer.sh脚本就是数据均衡服务的启动脚本。启动命令为:$HADOOP_HOME/sbin/start-balancer.sh,该命令的使用实例如下:

#启动数据均衡,默认阈值为 10%
$Hadoop_home/sbin/start-balancer.sh
 
#启动数据均衡,阈值 5%
$Hadoop_home/sbin/start-balancer.sh –threshold 5
 
#停止数据均衡
$Hadoop_home/bin/stop-balancer.sh
  • 影响Balancer的几个参数

    • -threshold

      • 默认设置:10,参数取值范围:0-100
      • 参数含义:判断集群是否平衡的阈值。理论上,该参数设置的越小,整个集群就越平衡
    • dfs.balance.bandwidthPerSec

      • 默认设置:1048576(1M/S)
      • 参数含义:Balancer运行时允许占用的带宽
  • 在hdfs-site.xml文件中可以设置数据均衡占用的网络带宽限制

<property>
    <name>dfs.balance.bandwidthPerSec</name>
    <value>1048576</value>
    <description> Specifies the maximum bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second. </description>
</property>
欢迎关注我的微信公众号,不定期更新文章和大家一起学习共勉-

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值