D07 hdfs读写机制及其checkpoint机制

一、hdfs写数据流程总结:即向hdfs上传文件
将源文件取128M做成一个block。

具体实现步骤 :
①client:向namenode请求上传文件;                         namenode:返回响应,可以上传;
②client:rpc请求上传第一个block,请返回datanode;namenode:返回dn1,dn3,dn4;
③client:向dn1请求建立bolock传输通道;                   datanode:dn1->dn3->dn4传递请求信号,dn4->dn3->dn1返回应答成功
④client:传送block,以packet为单位(packet里的chunk单位校验512byte);每个块只要有一个上传成功了,就算成功之后namenode会对datanode做异步的数据同步处理 
备注:每传一个block都需要向namenode请求一次。反复③④步骤。某个block放在dn1上,其备份放在dn3,dn4上。此时副本量是3。


二、hdfs读数据流程总结:即在hdfs下载文件

(假如被分成两个block;就是说一个文件被分成两部分;副本数量是3,就是指每个block都复制了三分存在不同的机器上。3个副本,将每个block的位置返回,block1在dn1,其副本在dn2,dn3上;block2在dn2上其副本在dn1,dn4)
明确文件分块,每个块备份的过程。

具体步骤:
①client:请求下载文件a.avi;                   namenode:返回目标文件的元数据
②client:向datanode请求读数据block1;datanode:将某一台机器上的block1传输给client
③client:继续向datanode请求读数据block2..3....4.....;datanode:将某台机器上的block2..3...4....传给client。

client存储方式是追加存储,后个block追加到前block的后面最后形成一个文件。

三、元数据机制与checkpoint
元数据存在namenode中。
namenode主要负责三个功能,分别是(1)管理元数据 (2)维护目录树 (3)响应客户请求
①元数据: 元数据 Metadata ),又称 中介数据 中继数据 ,为描述 数据 的数据(data about data),主要是描述数据 属性 (property)的 信息 ,用来支持如指示存储位置、 历史 数据、 资源 查找、文件记录等功能。
Namenode中的元数据就是记录hdfs存储信息数据的数据。
hdfs的修改添加等信息先记录在edits.log;

必须了解元数据的格式 ,也就明确了元数据是什么:
这里写图片描述

如果存储在namenode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。所以元数据metadata要存储在内存中!!!方便随机存储!

因此,元数据需要存放在内存中。但如果只存在内存中,一旦断点,元数据丢失,整个集群就无法工作了!!!

因此解决办法是元数据存储在内存中,但在磁盘中有备份,这个备份就是fsImage,存放在namenode节点对应的磁盘中。

(元数据->内存;edits.log,fsImage->磁盘;但三者都在Namenode中)

新的问题:当在内存中的元数据更新时,如果同时更新fsImage,就会导致效率过低,相当于第一种;但如果不更新,就会发生一致性问题,一旦namenode节点断点,就会产生数据丢失。

解决办法:引入edits.log文件(只进行追加操作,效率很高)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到edits.log中。这样,一旦namenode节点断电,可以通过fsImage和edits.log的合并,合成元数据。

(datanode数据改变的记录在元数据中,元数据的改变记录在edits.log中)

但是,如果长时间添加数据到edit.log中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行fsImage和edits.log的合并。

如果这个操作有namenode节点完成,又会效率过低。因此,引入一个新的节点secondaryNamenode,专门用于fsImage和edits.log的合并。

合并操作发生在secondary namenode中。

具体的checkpoint执行过程如下:

这里写图片描述

以下即是checkpoint过程:

secondary namenode请求主Namenode停止使用edits文件,暂时将新的写操作记录到一个新文件中,如edits.new。 
secondary namenode节点从主Namenode节点获取fsimage和edits文件(采用HTTP GET) 
secondary namenode将fsimage文件载入到内存,逐一执行edits文件中的操作,创建新的fsimage文件 
secondary namenode将新的fsimage文件发送回主Namenode(使用HTTP POST) 
主Namenode节点将从secondary namenode节点接收的fsimage文件替换旧的fsimage文件,用步骤1产生的edits.new文件替换旧的edits文件(即改名)。同时更新fstime文件来记录检查点执行的时间



四、hdfs操作的常用命令行

hadoop fs  -ls  /                              显示目录列表
hadoop fs  -mkdir -p /a/b/c           在hdfs上创建目录
hadoop fs  -cat  /a.txt                     显示该文件内容
hadoop fs  -cp  /a/a.txt   /b/b.txt.2 拷贝文件
hadoop fs  -mv /a/a.txt  /b             移动文件
hadoop fs  -get  /a.txt                    下载文件
hadoop fs  -put  /a.txt                    上传文件
hadoop fs  -rm   /a.txt                    删除文件或文件夹
hadoop fs  -rmdir  /a/b/c

hdfs目录简介:
①Input    用来存储所有的需要处理的数据文件。
②Output 用来存储所有的处理后的数据文件。
cenos-6.5-hadoop-2.6.4.tar.gz  用来做大型文件测试
⑤文本测试 test.txt
⑥wc的测试文本
⑦wc测试的输文本

hdfs可以用java客户端,也可以用linux命令行。一系列操作类似。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值