2.HDFS基本原理

一、HDFS架构

1NameNode

2DataNode

3Sencondary NameNode


二、namenode

1.是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。

2.namenode保存元数据信息,文件包括:

fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。

edits:操作日志文件。

fstime:保存最近一次checkpoint的时间

以上这些文件是保存在linux的文件系统中

3.nomenode的元数据信息启动后会加载到内存

Metadata(元数据信息)



解释:a.log文件 存了3个副本,切分成两份,每一份存放在哪个机器上(分成3块,分别存放的位置)

三、secondry NameNode

(hadoop1.0和2.0伪分布式有,2.0完全分布式没有secondry namenode)
1.HA的一个解决方案,主要用来备份主节点信息。但不支持热备,配置即可。
2.执行过程:从NameNode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并将其推送到NameNode,替换旧的fsimage.
3.默认在安装在NameNode节点上,但这样...不安全!


SecondaryNameNode定期合并 fsimage edits日志,将 edits日志文件大小控制在一个限度下。

什么时候进行checkout

fs.checkpoint.period 指定两次checkpoint的最大时间间隔,默认3600秒。 
fs.checkpoint.size    规定edits文件的最大值,一旦超过这个值则强制checkpoint,不管是否到达最大时间间隔。默认大小是64M。

SecondaryNameNode处理流程

(1)namenode响应Secondary namenode请求,将edit log推送给Secondary namenode ,重新写一个新的edit log

(2)Secondary namenode收到来自 namenode fsimage文件和 edit log

(3)Secondary namenode fsimage加载到内存,应用 edit log并生成一个新的 fsimage文件。

(4)Secondary namenode将新的 fsimage推送给 Namenode

(5) Namenode用新的 fsimage取代旧的 fsimage fstime文件中记下检查点发生的时间。


在实际生产环境中并不使用secondary namenode因为存在单点故障,还可能会丢失部分数据。

HDFS HA 搭建一个zookeeper集群,集群中会有两个namenode,一个处于active状态,一个是standby状态,zkfc一直会监控namenode的状态,通过心跳机制向zookeeper汇报,如发现问题,将standby状态的节点切换为active状态。两个nomenode之间的同步是通过中间件journalnode来管理,原来的simage和edies文件在secondaryNamenode时,现在由处于stantbay的namenode去做。


四、datanode

1.存储数据(block)

2.启动datanode线程的时候会向namenode汇报block信息

3.通过向nomenode发送心跳保持联系(3秒一次),如果nomenode10分钟没有接受到datanode的心跳,就认为其已经lost,并copy其上的block到其它datanode

block的副本放置策略


五、HDFS文件读取的解析


文件读取流程

1.使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;

2.Namenode会视情况返回文件的部分或者全部block列表,对于每个blockNamenode都会返回有该block拷贝的DataNode地址;

3.客户端开发库Client会选取离客户端最接近的DataNode来读取block;如果客户端本身就是DataNode,那么将从本地直接获取数据.

4.读取完当前block的数据后,关闭与当前的DataNode连接,并为读取下一个block寻找最佳的DataNode

5.当读完列表的block后,且文件读取还没有结束,客户端开发库会继续向Namenode获取下一批的block列表。

6.读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读。

六、HDFS文件写入的解析


1.使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;

2.Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会让客户端抛出异常;

3.当客户端开始写入文件的时候,会将文件切分成多个packets,并在内部以数据队列”data queue”的形式管理这些packets,并向Namenode申请新的blocks,获取用来存储replicas的合适的datanodes列表,列表的大小根据在Namenode中对replication的设置而定。

4.开始以pipeline(管道)的形式将packet写入所有的replicas中。把packet以流的方式写入第一个datanode,该datanode把该packet存储之后,再将其传递给在此pipeline中的下一个datanode,直到最后一个datanode,这种写数据的方式呈流水线的形式。

5.最后一个datanode成功存储之后会返回一个ackpacket,在pipeline里传递至客户端,在客户端的开发库内部维护着”ack queue”,成功收到datanode返回的ack packet后会从”ack queue”移除相应的packet

6.如果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭,出现故障的datanode会从当前的pipeline中移除,剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的datanode,保持replicas设定的数量。

七、HDFS2.0新特性

       1NameNodeHA:

       2NameNodeFederation:集群中提供多个NameNode,每个NameNode负责管理一部分DataNode

       3HDFS快照:帮助用户保存某个时刻的数据。防止用户误删数据。使用命令开启该功能。

       4HDFS缓存:

       5HDFSACL:启用时需要修改配置文件。原来的方式受限于单一user和单一group机制。

       6、异构层级存储结构:原本是将所有的存储介质抽象成性能相同的DISK

               每个节点是由多种异构存储介质组成的。

               当前功能尚在完善中。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值