HDFS原理篇

来源:互联网 发布:韩顺平mysql笔记 编辑:程序博客网 时间:2024/05/01 14:43

HDFS

为什么出现:一台机器不能存储下所有的数据

是什么:分布式存储文件系统

特点:高容错性(多备份)

      批处理(移动计算,而不是移动数据;数据暴露给计算框架)

  适合大数据处理(可也达到10K+节点)

  流式文件(一次写入,多次读取;不可修改原有文件)

  构建在廉价的机器上(多副本,高容错)

  提高了磁盘的利用率(如果不切片进行存储,那么当需要拉去数据时,只能从该节点拉去数据,那么此时该节点将会成网络瓶颈,导致网络流量激增。)

 

缺点:不适合低延迟的数据访问(牺牲了低延迟,保留了高吞吐)

      不适合小文件的存取(Master内存中存放了数据块存储位置的元信息,所以占用大量内存;寻道时间大于读取时间)

解决访问:把小文件合并成大文件

      不适合并发写入,不适合文件随机修改,只支持追加操作

 

 

 

实现原理:

Hdfs回将数据先进行切片处理,比如说把50GB的数据切成 每块64MB的数据块,然后在多副本的形式存储在多个节点上。然后有两张表(元数据信息),分别时:1、存储被切分的数据由哪几个块组成  2、每个块存储在哪个节点上

这么做,解决了集群的负载均衡,以及解决了网络瓶颈。

 

Hdfs架构:


 

Masterslave架构:

Master就是namenode用来存放元数据信息的。负责处理数据的读写请求。

Slave就是datanode存储实际的数据,负责数据读写操作,每个datanonde回定时的向Namenode汇报心跳。

 

Client访问namenode的时候,告诉namenode我要进行数据存储了,那么此时namenode会告诉client写到哪几个datanode上。Client负责数据的切割。

 

Namenode存在单点故障问题,所以此时就存在了namenode backup这个东西。

Secondarynamenode 1.0出现的。而standbynamenode2.0的时候出现的热备份。

Standbynamenode定期合并fsimage(文件系统的镜像文集那)fsedits(文件系统的操作日志),推送给namenode

 

Hdfs默认三个备份,默认数据块64MB;两个数据都时可配置的。

 

 

Hdfs写流程:

 

Client需要进行写数据的时候,回创建一个DistributedFileSystem询问namenode我现在要写的文件是否存在,不存在则返回给client允许写。此时,client就回告诉FSDataOutputStream,要写数据了,那么在写数据之前,会向namenonde索要三个datanode的位置信息,FSDataOutputStream会将文件以更小的单元pack大小的形式传输给第一个datanode,第一个datanode接受到数据之后,会紧接着把数据传输给第二个datanode,然后第一个datanode会向client索要第二个pack数据,于此同时,第二个datanode会将数据传给第三个(具体过程同第一个datanode)。当所有的block都写完后,client会通知namenode自己写完数据,然后namenode就会进行元数据的记录。

 

 

Hdfs读流程:

 

Client通过namenode获取了所需要的文件有哪几个block,分别这些block又在哪几个datanode。获取到这些信息,然后client就去相应的datanode获取block

Hdfs块副本放置策略:

副本1:client存放在同一个机架上面

副本2:不同与client的其他机架

副本3:与副本2相同的机架上的另一个节点

其他副本随机选择

 

 

Hdfs可靠性策略:

文件损坏:当读取文件之前对CRC32校验码进行校验,如果校验失败,则认为该副本失败,从其他副本读取。

 

网络或者机器挂了:通过datanode定时发送的心跳来判断,当namenode发现datanode挂了,就会把对应datanode上的数据在其他datanode上进行重构。

 

Namenode挂了:元信息会定期刷新到磁盘上。备用namenodeFsimagefsedit整合。