LSQL特性 | 协同存储

2022-06-01 00:00:00 数据 版本 磁盘 策略 副本


你还在堆机器吗?
你还在依赖大内存吗?
你在为大量的SSD盘成本而心痛吗?
Hadoop异构存储了解一下~

异构存储简言之,就是从硬件设备上进行优化存储和性能,针对冷数据,采用容量大的、读写性能不高的介质存储,比如普通的磁盘;针对热数据,实时进行查询的,经常用到的就用SSD进行存储。
在说Hadoop的异构存储之前我们先来简单了解一下SSD和SATA硬盘各自的优缺点。




硬盘对比




SSD硬盘:

  • 优点:无噪音,体积小,速度快,重量轻,发热小

  • 缺点:容量相对小,价格昂贵,数据稳定性不如SATA

    SATA盘:

  • 优点:容量大,价格低,技术成熟,存储可靠

  • 缺点:速度相对于固态硬盘慢,噪声大

由此可见,SSD硬盘的优势很明显,但是综合考虑成本和数据数据安全的问题,SSD并不能完全取代SATA。
Hadoop在2.6.0版本以后引入了异构存储,就是根据存储介质的不同特性发挥各自的优势。针对不需要多次访问的数据,采用容量大但可以读写性能一般的存储介质存储;而对于需要多次访问的数据,可以采用SSD的方式存储。




异构机制




1. HDFS中存储介质分类(StoragType类中有相关定义)

  • RAM_DISK(内存)

  • SSD(固态硬盘)

  • DISK(普通硬盘,在HDFS中,如果没有主动声明数据目录存储类型默认都是DISK)

  • ARCHIVE(没有特指哪种存储介质,主要的指的是计算能力比较弱而存储密度比较高的存储介质,用来解决数据量的容量扩增的问题)

2. HDFS异构存储的存储策略

① 存储策略种类

  • Lazy_persist一个副本保存在内存RAM_DISK中,其余副本保存在磁盘中

  • ALL_SSD:所有副本都保存在SSD中

  • One_SSD:一个副本保存在SSD中,其余副本保存在磁盘中

  • Hot:所有副本保存在磁盘中,这也是默认的存储策略

  • Warm:一个副本保存在磁盘上,其余副本保存在归档存储上

  • Cold:所有副本都保存在归档存储上

② 存储策略相关shell命令

hdfs dfsadmin -setStoragePolicy--创建文件或目录时,其存储策略未指定,可以使用该命令指定存储策略。hdfs storagepolicies -setStoragePolicy -path xxx -policy xxx--为指定路径(数据存储目录)设置指定的存储策略hdfs storagepolicies -getStoragePolicy -path xxx--获取指定路径(数据存储目录或文件)的存储策略hdfs storagepolicies -unsetStoragePolicy -path xxx--取消存储策略;执行改命令之后该目录或者文件,以其上级的目录为准,如果是根目录,那么就是HOT。
3. HDFS异构存储的原理

① DataNode通过心跳汇报自身数据存储目录的StorageType给NameNode(数据存储目录的解析/心跳汇报过程)

② 随后NameNode进行汇总并更新集群内各个节点的存储类型情况

③ 待存储文件根据自身设定的存储策略信息向NameNode请求拥有此类型存储介质的DataNode作为候选节点

4. HDFS异构存储流程

异构存储更多介绍请参考Haoop官方。





LSQL协同存储




依赖Hadoop中HDFS的异构机制,将HDFS中访问磁盘属性标识为SSD,创建“/data/ssdindex”目录作为索引异构的SSD磁盘目录,并设置One_SSD策略;LSQL结合HDFS将索引结构差异化存储,比如需要多次访问的tim、tip文件可以存储在HDFS的“/data/ssdindex”目录下,其他文件可以存储在HDFS的“/data/index”目录下,对于LSQL来说“/data/ssdindex”和“/data/index”目录是一个整体;如果不设置就默认使用“/data/index”目录。如下图所示:

协同方案1

  • SSD磁盘只存储tim、tip相关的数据,没有其副本,副本在其他介质的磁盘上。

协同方案2(近三天协同存储):

  • SSD磁盘只存储【tim、tip】和近3天的【fdx、tip、doc】相关的数据,没有其副本,副本在其他介质的磁盘上。

  • 超过3天的【fdx、tip、doc】相关的数据会设置“/data/ssdindex2”路径中的子目录过期的为Hot,比如:/data/ssdindex2/20180701过期了,需要设置Hot存储策略,然后调用HDFS的mover程序将原来在SSD上的数据块转移到非SSD的磁盘介质上。

非协同存储方案:

索引文件名词解释:
  • tip 词典索引(前缀和后缀指针,该文件需内存加载)

  • doc 倒排表、词频,页码

  • fdt 行存,文档值

  • fdx 行存索引,本身也较小可以一次加进内存,访问频率少

  • dvd 列存编号:张三->1

  • dvm 为列存编号对应值:1->年龄

  • pos 分词位置,分词类型使用保证查询顺序

  • tim 后缀词块,倒排表指针,需要多次访问。 


简言之,就是从硬件设备上进行优化存储和性能,针对冷数据,采用容量大的、读写性能不高的介质存储,比如普通的磁盘;针对热数据,实时进行查询的,经常用到的就用SSD进行存储。




设置方法



磁盘标识


请参考hadoop官方,将存储盘标记为普通盘或者SSD:

http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html

这里做下对比说明:

修改SSD磁盘属性:

在含有SSD磁盘的节点将“hdfs-site.xml”中“dfs.datanode.data.dir”中的SSD磁盘对应的文件路径前面加[SSD],如下所示:

<name>dfs.datanode.data.dir</name><value>file:///hdfsdata/1/hdfsdata/data,file:///hdfsdata/2/hdfsdata/data,file:///hdfsdata/3/hdfsdata/data,[SSD]file:///hdfsdata/4/hdfsdata/data, [SSD]file:///hdfsdata/5/hdfsdata/data,[SSD]file:///hdfsdata/6/hdfsdata/data</value>

也可以不同机器分别设置,如下所示:

如果是普通盘这样设置:

<property>   <name>dfs.datanode.data.dir</name>   <value>/data1/dfs,/data2/dfs </value> </property>

如果是SSD的盘这里要加[SSD]标识:

<property>   <name>dfs.datanode.data.dir</name>   <value>[SSD]/ssd1/dfs,[SSD]/ssd2/dfs </value> </property>

注意:如果该数据节点磁盘全是SSD盘,则每个路径前全加[SSD],如果该节点是SSD盘和SATA混合使用,则只在SSD磁盘对应的文件路径前加[SSD]


列簇配置


协同存储通常会跟列簇组合使用,在列簇存储里,通过下述方法配置(列簇详细使用方法参考LSQL特性 | 列簇存储):

create columnfamily common_performance (default at 'cleanday@90,yyyyMMdd' 'index@false' 'store@false' 'ssdindex@tim,doc' 'ssdindex2@fdt,fdx');

ssdindex,ssdindex2不同的协同存储


指定策略


1. 创建SSD路径:
hadoop fs -mkdir -p /data/lsqlointer/ssdindexhadoop fs -mkdir -p /data/lsqlointer/ssdindex2hadoop fs -mkdir -p /data/lsqlointer/ssdindex3hadoop fs -mkdir -p /data/lsqlointer/ssdindex4
2. 设置One_SSD策略(因版本差异,不同版本hadoop的命令如下):
--Hadoop2.6版本:hdfs dfsadmin -setStoragePolicy /data/lsqlointer/ssdindex One_SSDhdfs dfsadmin -setStoragePolicy /data/lsqlointer/ssdindex2 One_SSDhdfs dfsadmin -setStoragePolicy /data/lsqlointer/ssdindex3 One_SSDhdfs dfsadmin -setStoragePolicy /data/lsqlointer/ssdindex4 One_SSD
--Hadoop2.7/2.8版本:hdfs storagepolicies -setStoragePolicy -path /data/lsqlointer/ssdindex -policy One_SSDhdfs storagepolicies -setStoragePolicy -path /data/lsqlointer/ssdindex2 -policy One_SSDhdfs storagepolicies -setStoragePolicy -path /data/lsqlointer/ssdindex3 -policy One_SSDhdfs storagepolicies -setStoragePolicy -path /data/lsqlointer/ssdindex4 -policy One_SSD
3. 取消One_SSD策略(因版本差异,不同版本hadoop的命令如下):
--Hadoop2.6版本:hdfs dfsadmin -setStoragePolicy /data/lsqlointer/ssdindex Hothdfs dfsadmin -setStoragePolicy /data/lsqlointer/ssdindex2 Hothdfs dfsadmin -setStoragePolicy /data/lsqlointer/ssdindex3 Hothdfs dfsadmin -setStoragePolicy /data/lsqlointer/ssdindex4 Hot
--Hadoop2.7/2.8版本:hdfs storagepolicies -setStoragePolicy -path /data/lsqlointer/ssdindex -policy Hothdfs storagepolicies -setStoragePolicy -path /data/lsqlointer/ssdindex2 -policy Hothdfs storagepolicies -setStoragePolicy -path /data/lsqlointer/ssdindex3 -policy Hothdfs storagepolicies -setStoragePolicy -path /data/lsqlointer/ssdindex4 -policy Hot
4. 检查One_SSD策略(因版本差异,不同版本hadoop的命令如下):
--Hadoop2.6版本 hdfs dfsadmin -getStoragePolicy /data/lsqlointer/ssdindexhdfs dfsadmin -getStoragePolicy /data/lsqlointer/ssdindex2hdfs dfsadmin -getStoragePolicy /data/lsqlointer/ssdindex3hdfs dfsadmin -getStoragePolicy /data/lsqlointer/ssdindex4
--Hadoop2.7/2.8版本 hdfs storagepolicies -getStoragePolicy -path /data/lsqlointer/ssdindexhdfs storagepolicies -getStoragePolicy -path /data/lsqlointer/ssdindex2hdfs storagepolicies -getStoragePolicy -path /data/lsqlointer/ssdindex3hdfs storagepolicies -getStoragePolicy -path /data/lsqlointer/ssdindex4

过期数据策略更改


配置或取消ONE_SSD模式后,只有新写入的数据才会生效,旧的数据不会迁移过来。旧的数据需要通过mover进行数据的迁移。

hdfs mover /data/ssdindex

以上即为LSQL协同存储的所有用法介绍。LSQL的协同存储与其列簇存储功能相结合,通过列簇实现综合使用不同类型硬盘的能力,可以大幅度降低集群中的固态硬盘的使用量,使固态硬盘可以降低到原先的二分之一,甚至十分之一,大幅缩减了硬件的使用成本。


来源:https://mp.weixin.qq.com/s/ljP4G4qic037fZsUubXKtA

相关文章