青岛开发区网站wordpress dux1.2
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
 
