当前位置: 首页 > news >正文

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写

正常的写步骤如下:

  1. 创建文件,返回DFSoutputStream
  2. 申请数据块,构建管道
  3. 写数据
  4. 关闭流,提交文件

故障恢复:

  1. 重发
  2. 复制
  3. 更新NN
http://www.lryc.cn/news/60649.html

相关文章:

  • ChatGPT团队中,3个清华学霸,1个北大学霸,共9位华人
  • 通过工具生成指定 类型 大小 文件
  • 超外差收音机的制作-电子线路课程设计-实验课
  • TensorFlow 深度学习实战指南:1~5 全
  • 【数据结构】队列的实现
  • 【数据库】— 无损连接、Chase算法、保持函数依赖
  • 用英语翻译中文-汉字英文翻译
  • 瑞吉外卖项目——缓存优化
  • 从头创建一个新的浏览器,这合理吗?
  • TypeScript泛型类型和接口
  • docker命令
  • 2023 年 3 月 NFT 月度报告
  • 【http】 get方法和Post方法区别;http和https
  • 第三章 法的渊源与法的分类
  • 在Ubuntu18.04或者20.04下搭建edk2运行环境
  • 多线程编程常用函数用法
  • C++ 标准模板库(Standard Template Library,STL)
  • 一个寄存器的bit2 bit3位由10修改成11,C示例
  • 【洛谷】P1631 序列合并
  • 2023年七大最佳勒索软件解密工具
  • prettier 命令行工具来格式化多个文件
  • 我发现了PMP通关密码!这14页纸直接背!
  • Medical X-rays Dataset汇总(长期更新)
  • 一文告诉你如何做好一份亚马逊商业计划书的框架
  • 原来ChatGPT可以充当这么多角色
  • 数据结构_第十三关(3):归并排序、计数排序
  • “成功学大师”杨涛鸣被抓
  • 【hello C++】内存管理
  • AppArmor零知识学习十二、源码构建(9)
  • Unity - 带耗时 begin ... end 的耗时统计的Log - TSLog