JobPlus知识库 互联网 大数据 文章
Hadoop-HDFS

1.HDFS的设计理念

  • 存储大文件:这里的大文件是指GB甚至TB级别的文件
  • 高效的访问模式:一次写入,多次读取(流式数据访问)
  • 运行在普通廉价的服务器上:能运行在普通的硬件上,即使硬件出现故障,也可以通过容错策略来保证数据的完整性
    注:由于HDFS是为高数据吞吐量应用而设计的,必然以高延迟为代价所以不会将hdfs用于对数据访问要求低延迟的场景;hdfs的元数据存储在namenode的内存中,而namenode是单节点,小文件的数量大到一定的程度,namenode的内存就吃不消,所以也不可用来存储大量的小文件。

2.HDFS的基本概念

  • Block:在HDFS中,大文件是被分割成多个block进行存储的,一般block的大小默认是64MB(2.0版本后是128MB也可以自己设置)。而每个block会在多个datanode上存储多份副本,默认是3份(一般和datanode的个数有关)。
  • Namenode:存储元数据信息,管理数据块的映射;处理客户端的读写请求;配置副本策略;管理hdfs的名称空间等。
  • SeconaryNamenode:Namenode的备份;当namenode节点死亡,迅速启动接替namenode的工作;合并fsimage和edits log与namenode保持一致。
  • Datanode:负责存储client发来的数据块block;执行数据块的读写操作。
  • fsimage:元数据的镜像文件。
  • edits:元数据的操作日志

3.HDFS的实现思想

  • hdfs通过分布式集群来存储文件
  • 文件存储到hdfs集群中去的时候是被分切成若干的block
  • 文件的block存放在若干台的datanode节点上
  • hdfs文件系统的文件与真实的文件block之间有映射关系,由namode管理
  • 每个block在集群中都会存储多个副本

4.HDFS的基本架构

这里的rack是指机柜(包含若干台服务器)。上面的图其实并不能完全说明HDFS的工作机制,下面以往hdfs上面存放大文件为例,说明写操作的机制。

在这里,客户端将本地文件test.txt写到hdfs上(路径:hdfs://nn:9000/xudong, hadoop fs -put test.txt /xudong),首先大文件test.txt被切分成3个block(block1,block2,block3),然后分别存储到三台datanode节点上,每个block有几个备份放在其他的datanode节点上,上面只画了block1的2个备份。Namenode负责管理这些节点上的block。

5.NameNode元数据管理机制
namenode管理元数据是有自己的机制的,为了配套上面的客户端写文件到hdfs,下面举例说明NN管理上传文件的过程:

  • 1客户端上传文件时,NN首先往edits log文件中记录元数据的操作日志
  • 2客户端上传开始上传文件,完成后并返回成功信息给NN,NN就在内存中写入这次上传操作新产生的元数据。
  • 3每当edits log写满时,需要将这段时间的元数据刷到fsimage中去。

在NomeNode中元数据存储的细节:
NameNode(FileName,replicas,block_ids,idhost……..)
/xudong/test.txt,3,{blk_1,blk_2,blk_3},blk_1:[h0,h1,h3]},{blk_2:[h1,h2,h3],{blk_3:h0,h2,h3}}


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

¥ 打赏支持
440人赞 举报
分享到
用户评价(0)

暂无评价,你也可以发布评价哦:)

扫码APP

扫描使用APP

扫码使用

扫描使用小程序