2020-10-12 《Hadoop 权威指南》学习日记之,读写的细节

近日阅读了《Hadoop权威指南第三版》,在第3.6小节数据流部分,对文件读取和文件写入进行了剖析,现在准备对这段内容做些重点描述,留下自己的疑惑,今后有所理解后再回头来解决,如果能有大佬在我这儿评论留言解答我的疑惑那就太美滋滋了嘿嘿嘿。

anyway

1.剖析文件读取

理解在这个过程中,HDFS,namenode与datanode之间的数据流是什么样的。

流程图截取自书:

  1. 客户端通过调用FileSyste对象的open()方法打开希望读取的文件
  2. DistributedSystem通过使用RPC(一个计算机通信协议,它允许运行于一台计算机的程序调用另一台计算机的子程序)来调用namenode,确认文件起始块的位置
  3. DIstributedFileSystem类返回一个FSDataInputStream对象(一个支持文件定位的输入流)给客户端并读取数据。FSDataInputStream类转而封装DFSInputStream对象,该对象管理者datanode和namenode的I/O,于是客户端对这个输入流调用read()方法
  4. 而DFSInputStream存储了datanode的地址,datanode存储着文件其实几个块,DFSInputStream随机连接距离最近的datanode。通过对数据流反复的调用read()方法,可以将数据从datanode传输到客户端
  5. 到达块的末端时,DFSInputStream关闭与datanode的连接,寻找下一个块的最佳datanode
  6. 当客户完成读取全部操作后,就对FSDataInputStream调用close()方法

疑惑:

此处显然是单机部署情况下的交互流程,若是HA部署中,对多个NameNode会怎样操作?

DFSInputStream类是否能够有确认数据完整性的检查工作?

此处描述的namnode告知客户端每个块中最佳的datanode,并让客户端直接连接到该datanode检索数据,此处的“最佳”该如何定义?是否以数据本地化作为参考标准?书中对此处“最佳”的解释用了网络拓扑,考虑到了实际机架中不同设备间的传输速率,带宽等问题。而带宽作为了距离的衡量标准。此处hadoop将网络看成树,这样做的数学依据如何能简单概括?

RPC原理个人认为需要学习一下,后续会整理一下相关资料,此处只理解了它的用途。

2.剖析文件写入

这里清楚的说明了HDFS的一致模型

  1. 客户端通过对DIstributedFileSystem对象调用create()函数来新建文件
  2. DistributedFileSystem对namenode创建一个RPC调用,在文件系统命名空间中新建一个文件,此时该文件种还没有相应的数据块,namenode执行各种不同的检查以确保这个文件不存在 以及客户端有新建该文件的权限。
  3. 在客户端写入数据时DFSOutputStream将它分成一个个的数据包,并写入内部队列,成为“数据队列”(data queue)。DataStreamer处理数据队列,他的责任是根据datanode列表来要求namenode分配适合的新块来存储数据复本
  4. DataStreamer将数据包流式传输到管线中的各个datanode上
  5. 收到管道中所有的datanode确认信息后,该数据包才会从确认队列删除
  6. 客户端完成数据的写入后,对数据流调用close()方法
  7. 该操作将剩余的所有数据包写入datanode管线,并在联系到namenode且发送文件写入完成信号之前,等待确认

疑惑:

 上述过程中的复本是否可以理解为副本?

上述的管线过程同样也是在实际机架上的一种集群分布,但对其详细流程还是不熟悉

第七步complete后,是否包含着对namenode上记录信息的更新操作?

数据在datanode的块中存储,默认的备份个数为3,即一份数据会在任意?还是一定顺序的datanode上存储3份?默认的备份个数什么情况下需要修改?

关于写入错误的处理过程还存在一些模糊的理解:“首先关闭管线,确认把队列中的所有数据包都添加回数据队列的最前端,以确保故障节点下游的datanode不会有漏掉任何一个数据包”,此处关闭管线时,为什么要把队列中的数据添加回数据队列最前端,若队列中的datanode多处报错,如何保证“所有”数据包?可能个人理解有问题,如果是在输入过程中,已完成输入的datanode怎么处理,这份写在损坏节点上的数据怎么办,是否在内存或者其它地方有完整的备份?

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值