hdfs如何让某些数据查询快,某些数据查询慢?

  • hdfs冷热数据分层存储

本质: 不同路径制定不同的存储策略。

hdfs存储策略

hdfs的存储策略 依赖于底层的存储介质。

  • hdfs支持的存储介质:
  1. ARCHIVE:高存储密度但耗电较少的存储介质,例如磁带,通常用来存储冷数据
  2. DISK:磁盘介质,这是HDFS最早支持的存储介质
  3. SSD:固态硬盘,是一种新型存储介质,目前被不少互联网公司使用
  4. RAM_DISK :数据被写入内存中,同时会往该存储介质中再(异步)写一份
  • 存储策略可配置,可以设置全局的,也可以设置到某个文件夹。
  1. Lazy_persist:一个副本保存在内存RAM_DISK中,其余副本保存在磁盘中
  2. ALL_SSD:所有副本都保存在SSD中
  3. One_SSD:一个副本保存在SSD中,其余副本保存在磁盘中
  4. Hot:所有副本保存在磁盘中,这也是默认的存储策略
  5. Warm:一个副本保存在磁盘上,其余副本保存在归档存储上
  6. Cold:所有副本都保存在归档存储上

所谓的存储策略,其实就是将数据存储在不同的存储介质中。如果数据存储在SSD中,读写速度自然比存储在机械硬盘中的数据快。

总体上HDFS异构存储的价值在于,根据数据热度采用不同策略从而提升集群整体资源使用效率。对于频繁访问的数据,将其全部或部分保存在更高访问性能的存储介质(内存或SSD)上,提升其读写性能;对于几乎不会访问的数据,保存在归档存储介质上,降低其存储成本。但是HDFS异构存储的配置需要用户对目录指定相应的策略,即用户需要预先知道每个目录下的文件的访问热度,在实际大数据平台的应用中,这是比较困难的一点。

如何配置存储策略

$ hdfs storagepolicies -help
[-listPolicies] List all the existing block storage policies. [-setStoragePolicy -path <path> -policy <policy>] Set the storage policy to a file/directory. <path> The path of the file/directory to set storage policy
<policy> The name of the block storage policy [-getStoragePolicy -path <path>] Get the storage policy of a file/directory. <path> The path of the file/directory for getting the storage policy

事先划分好冷热数据存储目录,设置好对应的Storage Policy,然后后续相应的程序在对应分类目录下写数据,自动继承父目录的存储策略。

如何修改已有配置?

数据迁移

为了让存储策略生效了,hdfs中提供了一个新的数据迁移工具mover,mover与balancer工具相似都是周期触发的,运行时,它会扫描hdfs中各个文件的block以确认该block块的当前存储是否满足用户指定的storage policy,对于那些storage policy发生变化的block块,该工具会将对应的block块进行迁移。

关于HBASE的冷热数据存储

  • HBASE数据存储于hdfs的相对路径,可以通过制定hbase相对路径的存储策略,来让hbase的数据存储于SSD

hbase如何利用上述hdfs的异构存储特性?

HBase-12848(Utilize Flash storage for WAL)是1.1.0新推出的特性,它可以将WAL单独置于SSD上,配置方式是将如下的配置做相应修改:

hbase.wal.storage.policy

该配置的默认值是NONE,也就是wal文件和数据都存储在DISK上,不做区分,可以修改为ONE_SSD或者ALL_SDD,不同在于:

ONE_SSD:wal的一个副本置于SSD上,而其他副本仍然在默认存储;

ALL_SSD:wal文件的所有副本都存储于SSD盘上;

HDFS纠删码

HDFS纠删码技术能够降低数据存储的冗余度,以RS(3,2)为例,其数据冗余度为67%,相比Hadoop默认的200%大为减少。但是纠删码技术存储数据和数据恢复都需要消耗cpu进行计算,实际上是一种以时间换空间的选择,因此比较适用的场景是对冷数据的存储。冷数据存储的数据往往一次写入之后长时间没有访问,这种情况下可以通过纠删码技术减少副本数。

大数据存储优化:SSM

SSM(Smart Storage Management)系统

异构存储原理

概况性的总结为3小点:

  1. DataNode通过心跳汇报自身数据存储目录的StorageType给NameNode,
  2. 随后NameNode进行汇总并更新集群内各个节点的存储类型情况
  3. 待复制文件根据自身设定的存储策略信息向NameNode请求拥有此类型存储介质的DataNode作为候选节点

从以上3点来看,本质原理并不复杂.

其他问题探讨

  1. 同一类数据内部 是否支持冷热数据存储?比如让1年内的数据查询比较快,2-5年的数据查询比较慢?
  • A: 有几个方案:

    • SSM: 不成熟,还未大量使用
    • 分表:需要编写分表中间件等。此外hbase的region实际上就是帮我们做了分表的工作,屏蔽了分表的细节。

      ......

参考文献


tips:本文属于自己学习和实践过程的记录,很多图和文字都粘贴自网上文章,没有注明引用请包涵!如有任何问题请留言或邮件通知,我会及时回复。

hdfs冷热数据分层存储的更多相关文章

  1. Redis混合存储-冷热数据识别与交换

    Redis混合存储产品是阿里云自主研发的完全兼容Redis协议和特性的混合存储产品. 通过将部分冷数据存储到磁盘,在保证绝大部分访问性能不下降的基础上,大大降低了用户成本并突破了内存对Redis单实例 ...

  2. Linux 下的两种分层存储方案

    背景介绍 随着固态存储技术 (SSD),SAS 技术的不断进步和普及,存储介质的种类更加多样,采用不同存储介质和接口的存储设备的性能出现了很大差异.SSD 相较于传统的机械硬盘,由于没有磁盘的机械转动 ...

  3. JindoFS解析 - 云上大数据高性能数据湖存储方案

    JindoFS背景 计算存储分离是云计算的一种发展趋势,传统的计算存储相互融合的的架构存在一定的问题, 比如在集群扩容的时候存在计算能力和存储能力相互不匹配的问题,用户在某些情况下只需要扩容计算能力或 ...

  4. 腾讯云对象存储COS新品发布——智能分层存储,自动优化您的存储成本

    近日,腾讯云正式发布对象存储新品--智能分层存储,能够根据用户数据的访问模式,自动地转换数据的冷热层级,为用户提供与标准存储一致的低延迟和高吞吐的产品体验,同时具有更低的存储成本. 熟悉数据存储的用户 ...

  5. HDFS读写数据块--${dfs.data.dir}选择策略

    最近工作需要,看了HDFS读写数据块这部分.不过可能跟网上大部分帖子不一样,本文主要写了${dfs.data.dir}的选择策略,也就是block在DataNode上的放置策略.我主要是从我们工作需要 ...

  6. Ceph分层存储分析

    最近弄Ceph集群考虑要不要加入分层存储 因此花了点时间研究了下 1,首先肯定要弄清Ceph分层存储的结构 ,结构图大概就是下图所示 缓存层(A cache tier)为Ceph客户端提供更好的I/O ...

  7. 使用Hadoop的MapReduce与HDFS处理数据

    hadoop是一个分布式的基础架构,利用分布式实现高效的计算与储存,最核心的设计在于HDFS与MapReduce,HDFS提供了大量数据的存储,mapReduce提供了大量数据计算的实现,通过Java ...

  8. HDFS二.HDFS实现分布式文件存储---体系结构

    单击模式(Standalone): 单机模式是Hadoop的默认模式.当首次解压Hadoop的源码包时,Hadoop无法了解硬件安装环境,便保守地选择了最小配置.在这种默认模式下所有3个XML文件均为 ...

  9. ElasticSearch5.X的冷热数据架构

    转载:https://my.oschina.net/xiaomaijiang/blog/826701 当使用ElasticSearch做大规模的时序数据分析的时候,我们建议使用基于时序的索引并且采用3 ...

随机推荐

  1. 解决Vue跨域问题 : 正向代理与反向代理

    你需要做一个反向代理的东西   ===> 打开你的vue项目的config文件夹下的index.js 找到以下代码 dev: { proxyTable: { '/api': { target: ...

  2. SpringBoot:SpringBoot整合JdbcTemplate

    个人其实偏向于使用类似于JdbcTemplate这种的框架,返回数据也习惯于接受Map/List形式,而不是转化成对象,一是前后台分离转成json方便,另外是返回数据格式,数据字段可以通过SQL控制, ...

  3. Mybatis插件之Mybatis-Plus的CRUD方法

    使用Mybatis-plus进行基本的CRUD(增查改删)操作. 实体类(User)代码: import com.baomidou.mybatisplus.annotation.IdType; imp ...

  4. axios 使用post方式传递参数,后端接收不到

    最近做vue项目,做图片上传的功能,使用get给后台发送数据,后台能收到,使用post给后台发送图片信息的时候,vue axios post请求发送图片base64编码给后台报错HTTP 错误 414 ...

  5. js中的三目运算符详解

    判断 javascript中的三目运算符用作判断时,基本语法为: expression ? sentence1 : sentence2 当expression的值为真时执行sentence1,否则执行 ...

  6. Scala当中parallelize并行化的用法

    [学习笔记] parallelize并行化集合是根据一个已经存在的Scala集合创建的RDD对象.集合的里面的元素将会被拷贝进入新创建出的一个可被并行操作的分布式数据集.例如:val rdd03 = ...

  7. Netty源码剖析-接受数据

    参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线:worker thread ①多路复用器(Select ...

  8. 剑指offer34:第一个只出现一次的字符的位置

    1 题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 2 思路和方法 ch[ ...

  9. 20190804-Python基础 第二章 列表和元组

    容器,Python支持一种数据结构的基本概念(容器,基本上就是可包含其他对象的对象.) 两种主要的容器是:序列(如列表和元组)和映射(如字典) Ps: 列表与元组区别,列表可修改,元组不能. 对序列的 ...

  10. poj 1224

    题意:有一个5 * 6的矩阵,每个位置表示灯,1表示灯亮,0表示灯灭. 然后如果选定位置i,j点击,则位置i,j和其上下左右的灯的状态都会反转. 现在要你求出一个5 * 6的矩阵,1表示这个灯被点击过 ...