上海网站建设hxwlkj/百度百科官网登录
HDFS客户端
客户端作用
- 管理文件目录
- 文件系统操作
- 读写
客户端生成
配置项
配置
客户端状态
缓冲相关参数,读写缓冲
失败切换操作
推测执行??
NN引用
NNProxy
客户端关闭
关闭IO流
修改状态
关闭RPC连接
是否有多个RPC连接?
HDFS读
- 打开文件
- 构建输入流
输入流
FSInputStream (seek,pos)
DFSInputStream (缓存相关,读取相关)
HDFSInputStream (获取当前的数据节点,获取当前的块,获取所有的块等)
open方法
获取文件对应的块信息: ClientProtocol.getBlockLoactions();
NN端响应,需要给出排序规则。
获取块对应的长度信息:ClientDatanodeProtocol.getReplicaVisibleLength()方法。
read方法
最终的目的是从一个流读取一定长度的信息
- 网络读
- 短路读: 客户端和DN在同一个节点,DomainSocket
- 零拷贝读
调用blockSeekTo,(RPC)找到pos文件块信息,找到合适的datanode,构建BlockReader
readBuffer增加校验和重试逻辑
BlockReader.doRead方法进行实际的读取
HDFS写
正常的写步骤如下:
- 创建文件,返回DFSoutputStream
- 申请数据块,构建管道
- 写数据
- 关闭流,提交文件
故障恢复:
- 重发
- 复制
- 更新NN