> 文章列表 > HDFS 梳理

HDFS 梳理

HDFS 梳理

HDFS客户端

客户端作用

  • 管理文件目录
  • 文件系统操作
  • 读写

客户端生成

配置项

配置
客户端状态
缓冲相关参数,读写缓冲
失败切换操作
推测执行??

NN引用

NNProxy

客户端关闭

关闭IO流
修改状态
关闭RPC连接

是否有多个RPC连接?

HDFS读

  1. 打开文件
  2. 构建输入流

输入流

FSInputStream (seek,pos)
DFSInputStream (缓存相关,读取相关)
HDFSInputStream (获取当前的数据节点,获取当前的块,获取所有的块等)

open方法

获取文件对应的块信息: ClientProtocol.getBlockLoactions();

NN端响应,需要给出排序规则。

获取块对应的长度信息:ClientDatanodeProtocol.getReplicaVisibleLength()方法。

read方法

最终的目的是从一个流读取一定长度的信息

  • 网络读
  • 短路读: 客户端和DN在同一个节点,DomainSocket
  • 零拷贝读

调用blockSeekTo,(RPC)找到pos文件块信息,找到合适的datanode,构建BlockReader
readBuffer增加校验和重试逻辑
BlockReader.doRead方法进行实际的读取

HDFS写

【未完待续】