Hadoop分布式文件系统HDFS

Hadoop分布式文件系统HDFS

HDFS文件系统由以下守护进程协调地运行提供服务:
NameNode进程
SecondaryNameNode进程
DataNode进程
HDFS是主从架构。运行NameNode进程的服务器是主节点,运行DataNode进程的服务器是从节点。集群上的每个从节点都会运行一个DataNode进程。这个DataNode进程管理着挂在到这个DataNode上的存储设备。HDFS系统提供一个统一的文件系统命名空间。NameNode进程负责管理这些存储在集群上文件的元数据。

1.  Hadoop文件的本质是块存储


在Hadoop系统,每个文件被分割成多个数据块。一般数据块的大小为64M,也可配置为32M或128M。
每个数据块存储在DataNode上。为了防止节点故障,这些数据块是有备份的。在Hadoop系统中,备份数量默认配置为3。
NameNode具有RackAware机架感知功能,这个可以配置:
        若client为DataNode节点,那存储block时,规则为:副本1,同client的节点上;副本2,不同机架节点上;副本3,同副本2机架的另一个节点上;其他副本随机挑选。
        若client不为DataNode节点,那存储block时,规则为:副本1,随机选择一个节点上;副本2,不同副本1,机架上;副本3,同副本2机架的另一个节点上;其他副本随机挑选。

2.  文件元数据和NameNode


文件元数据信息是由NameNode负责维护的。
NameNode管理所有的文件操作,包括文件/目录的打开、关闭、重命名、移动等待。DataNode是负责存储实际的文件数据。当客户端请求或发送文件数据,文件的数据在物理上是不经过NameNode传输的。客户端仅是简单地从NameNode获取文件的元数据,再根据其元数据信息直接从DataNode获取文件的数据块。
NameNode存储的一些元数据包括:
  • 文件/目录名称及其相对于父目录的位置;
  • 文件和目录的所有权及权限;
  • 各个数据块的文件名。
NameNode并不存储每个数据块的位置。每个数据块的位置是在集群启动时从每个DataNode获取的。NameNode维护的信息是HDFS的文件由哪些数据块组成。
元数据存储在NameNode的本地磁盘,为了快速访问,在集群操作时会把这些元信息加载到内存。

3.  HDFS系统写操作


有一个文件FileA,100M大小。Client将FileA写入到HDFS上。
HDFS按默认配置。
HDFS分布在三个机架上Rack1,Rack2,Rack3。
 
a.  Client将FileA按64M分块。分成两块,block1和Block2;
b.  Client向nameNode发送写数据请求,如图 蓝色虚线 ------>
c.  NameNode节点,记录block信息。并返回可用的DataNode,如 粉色虚线 --------->
   Block1: host2,host1,host3
   Block2: host7,host8,host4
d.  client向DataNode发送block1;发送过程是以流式写入。
   流式写入过程,
         1> 将64M的block1按64k的package划分;
         2> 然后将第一个package发送给host2;
         3> host2接收完后,将第一个package发送给host1,同时client想host2发送第二个package;
         4> host1接收完第一个package后,发送给host3,同时接收host2发来的第二个package。
         5> 以此类推,如图 红线实线 所示,直到将block1发送完毕。
         6> host2,host1,host3向NameNode,host2向Client发送通知,说“消息发送完了”。如图 粉红颜色 实线所示。
         7> client收到host2发来的消息后,向namenode发送消息,说我写完了。这样就真完成了。如图 黄色粗实线
         8> 发送完block1后,再向host7,host8,host4发送block2,如图 蓝色实线 所示。
         9> 发送完block2后,host7,host8,host4向NameNode,host7向Client发送通知,如图 浅绿色实线 所示。
         10> client向NameNode发送消息,说我写完了,如图 黄色粗实线 。。。这样就完毕了。
分析, 通过写过程,我们可以了解到:
     写1T文件,我们需要3T的存储,3T的网络流量带宽。
     在执行读或写的过程中,NameNode和DataNode通过HeartBeat进行保存通信,确定DataNode活着。如果发现DataNode死掉了,就将死掉的DataNode上的数据,放到其他节点去。读取时,要读其他节点去。
     挂掉一个节点,没关系,还有其他节点可以备份;甚至,挂掉某一个机架,也没关系;其他机架上,也有备份。

4.  HDFS系统读操作



如图所示,client要从datanode上,读取FileA。而FileA由block1和block2组成。 
那么,读操作流程为:
a. client向namenode发送读请求。
b. namenode查看Metadata信息,返回fileA的block的位置。
     block1:host2,host1,host3
     block2:host7,host8,host4
c. block的位置是有先后顺序的,先读block1,再读block2。而且block1去host2上读取;然后block2,去host7上读取;
 
上面例子中,client位于机架外,那么如果client位于机架内某个DataNode上,例如,client是host6。那么读取的时候,遵循的规律是:
优选读取本机架上的数据。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值