HDFS的数据存储

文章首发地址

HDFS的数据存储

  • HDFS的数据存储包括两块:
    • 一块是HDFS内存存储
    • 另一块是HDFS异构存储

HDFS内存存储是一种十分特殊的存储方式,将会对集群数据的读写带来不小的性能提升,而HDFS异构存储则能帮助我们更加合理地把数据存到应该存的地方。

HDFS内存存储

  • 异步存储的大体步骤可以归纳如下:
  1. 对目标文件目录设置StoragePolicy为LAZY_PERSIST的内存存储策略。
  2. 客户端进程向NameNode发起创建/写文件的请求。
  3. 客户端请求到具体的DataNode后DataNode会把这些数据块写入RAM内存中,同时启动异步线程服务将内存数据持久化写到磁盘上。

内存的异步持久化存储是内存存储与其他介质存储不同的地方。这也是LAZY_PERSIST名称的源由,数据不是马上落盘,而是懒惰的、延时地进行处理。

LAZY_PERSIST内存存储

  • LAZY_PERSIST相关结构如下:
    • FsDatasetImpl:FsDatasetImpl,它是一个管理DataNode所有磁盘读写的管家
      • RamDiskReplicaLruTracker:是副本块跟踪类,此类中维护了所有已持久化、未持久化的副本以及总副本数据信息。所以当一个副本被最终存储到内存中后,相应地会有副本所属队列信息的变更。当节点内存不足时,会将最近最少被访问的副本块移除。
      • RamDiskAsyncLazyPersistService:此对象是异步持久化线程服务,针对每一个磁盘块设置一个对应的线程池,需要持久化到给定磁盘的数据块会被提交到对应的线程池中去。每个线程池的最大线程数为1。
      • LazyWriter:这是一个线程服务,此线程会不断地从数据块列表中取出数据块,将数据块加入到异步持久化线程池RamDiskAsyncLazyPersistService中去执行。

HDFS异构存储

针对冷数据,采用容量大的、读写性能不高的存储介质存储,比如最普通的磁盘。而对于热数据而言,可以采用SSD的方式进行存储,这样就能保证高效的读性能,在速率上甚至能做到十倍或百倍于普通磁盘的读写速度。换句话说,HDFS异构存储特性的出现使得我们不需要搭建2套独立的集群来存放冷热2类数据,在一套集群内就能完成。所以这个功能还是有非常大的实用价值的。

HDFS异构存储可总结为以下三点:

  1. DataNode通过心跳汇报自身数据存储目录的StorageType给NameNode。
  2. 随后NameNode进行汇总并更新集群内各个节点的存储类型情况。
  3. 待复制文件根据自身设定的存储策略信息向NameNode请求拥有此类型存储介质的DataNode作为候选节点。
相关推荐
twins352042 分钟前
解决Vue应用中遇到路由刷新后出现 404 错误
前端·javascript·vue.js
qiyi.sky1 小时前
JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
前端·javascript·vue.js
煸橙干儿~~1 小时前
分析JS Crash(进程崩溃)
java·前端·javascript
安冬的码畜日常1 小时前
【D3.js in Action 3 精译_027】3.4 让 D3 数据适应屏幕(下)—— D3 分段比例尺的用法
前端·javascript·信息可视化·数据可视化·d3.js·d3比例尺·分段比例尺
l1x1n02 小时前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html
昨天;明天。今天。2 小时前
案例-任务清单
前端·javascript·css
zqx_73 小时前
随记 前端框架React的初步认识
前端·react.js·前端框架
惜.己3 小时前
javaScript基础(8个案例+代码+效果图)
开发语言·前端·javascript·vscode·css3·html5
什么鬼昵称4 小时前
Pikachu-csrf-CSRF(get)
前端·csrf
长天一色4 小时前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript