hadoop文件保存(HDFS)原理浅析

hdfs组成

hdfs由NameNode、secondNameNode与DataNode组成。

DataNode存储真实的数据(1台真实的服务器为1个dataNode)

NameNode记录文件、block、DataNode之间的映射关系,保存在内存和磁盘之中各一份。

SecondNameNode合并操作日志,协助NameNode

存储过程

    一个大文件存储到hdfs中,会首先被切分成128M为大小的文件块,每一个文件块称之为一个block。不足128M的,单独作为一个block,占用实际文件大小空间。)每一个block会复制2份(共3份,具体复制份数可以配置),保存在不同的DataNode中。

    dataNode选择:首先1个block会存放在距离文件最近的机器,或者最闲的机器(通过cpu占用率检测)。不同的block会放在不同的机架上(机架感知策略),防止一个机架出现故障,所有的备份都出现问题。

    NameNode记录文件、block、dataNode之间的映射关系,以便查询文件。 NameNode数据会保存在内存和磁盘各一份。放在内存,为检索文件快速,保存在磁盘,为防止NameNode所在机器宕机后,数据丢失。单独搭建hadoop集群,只有1个NameNode,存在单节点故障风险,即NameNode宕机了,整个集群就瘫痪了。所以hadoop2.0,就引入了hadoop+zookeeper,实现了双NameNode的集群搭建,进一步保证的集群的可靠性。
nameNode数据格式参照如下:
FileName replicas block-Ids id2host
例如:/test/a.log,3,{b1,b2},[{b1:[h0,h1,h3]},{b2:[h0,h2,h4]}]
  /test/a.log为文件名
  3:备份份数
  {b1,b2}文件被切成两块
  b1:[h0,h1,h3]表示b1块保存在机器h0,h1,h3上。

NameNode详细

NameNode保存在磁盘中文件包括:
    fsimage 元数据镜像文件。存储NameNode元数据信息,并不实时同步内存数据。(即镜像文件可能比内存文件要小。)
    edits操作日志文件
    fstime 保存最近一次checkpoint时间。
当有写请求,NodeNode首先写editlog到磁盘edits文件中,成功后才会修改内存,并向客户端返回请求结果。
所以fsimage中并非实时数据,而是达到条件时,再进行更新,更新时需要secondNameNode参与。

secondNameNode

secondNameNode不是nameNode的备份,而是帮助NameNode进行edits与fsimage的合并。
触发secondNameNode的条件
    1、根据配置文件设置的文件间隔fs.checkpoint.period,默认是3600秒
    2、根据文件设计的edits大小 fs.checkpoint.size,默认是64M
更新过程
    1、secondNameNode通过http从NameNode获取文件edits,加载到内存中,与原fsimage文件进行合并生成一个新的fsimage.ckp文件。
    2、将fsimage.ckpt复制到NameNode中,重命名为fsimage,覆盖原文件。
    3、secondNameNode获取edits时,NameNode会生成edits.new文件来记录此时的操作记录。
    4、fsimage.ckpt重命名的同时,要对edits.new进行重命名为edits,等待下一次合并。

dataNode

    dataNode为实际存储Block的节点,可以有上千台服务器
    dataNode会不断向NameNode节点发送心跳报告(3s一次),工作中,dataNode会不断更新与NameNode节点之间对应的元数据信息,并接受NameNode节点的指令,创建、移动、删除本地磁盘上的数据块。
    如果10分钟未收到DataNode传来的心跳信息,则认为DataNode已经宕机,将其上block复制到其他DataNode。
    存储策略:
    第一个副本:如果上传文件的服务器本身就是DataNode,就放置在上传文件的DataNode;如果是外部客户端向集群上传,就随机选一台相对清闲的dataNode(通过cup使用率以及磁盘使用程度)。
    第二个副本:放在与第一个副本不同的机架上。
    第三个副本:放在与第二个副本相同机架上
    如果保存更多副本:随机节点。
    
注意:机架感知,需要手动配置。

HDFS优点

1、可存储超大文件,GB、TB、PB级别的文件,反正再大也会被切成小块。

2、检测和快速应对硬件故障,如果有个机器坏了,hadoop会自动把坏掉机器存储的数据,再次进行备份。

3、流式数据访问,主要是数据高吞吐,而非访问速度快。

4、简化的一致性模型,一般一次写入,多次读取。

5、高容错性,数据自动保存多个副本,副本丢失自动恢复。

6、可构建在廉价机器上。

HDFS缺点

1、低延迟数据访问,无法再毫秒或秒的范围内给与响应。

2、不支持大量小文件。数据映射都放在NameNode中,如果大量小文件,会在NameNode中新增大量记录,影响NameNode性能。

3、不适合多用户读写修改。HDFS只能一次写入,多次读取,不支持修改(2.0版本以后支持追加)。

4、不支持超强事务。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值