2020/12/17 sunhaiqi@bonc.com.cn
文章目录
HDFS的存储策略
一、存储类型
HDFS支持如下四种存储类型:
1.1、DISK
普通磁盘(机械硬盘)
1.2、SSD
固态硬盘
1.3、RAM_DISK
内存磁盘,虚拟内存盘(内存)
1.4、ARCHIVE
这个并不是特指某种存储介质,而是为了满足高密度存储而定义的一种存储类型,一般读与归档的、访问不怎么频繁的数据可以以ARCHIVE的形式存储。
存储速度:RAM_DISK>SSD>DISK>ARCHIVE
单bit存储成本:RAM_DISK>SSD>DISK>ARCHIVE
在配置DataNode的存储路径的时候,我们可以分别为四种存储类型配置存储位置
<property>
<name>dfs.datanode.data.dir</name>
<value>[RAM_DISK]file:///ram_disk,[SSD]file:///ssd1/dn,[DISK]file:///disk1/dn,[ARCHIVE]file:///archive1/dn</value>
<description>DataNode存放数据的地方</description>
</property>
配置的DataNode的多个存储位置由逗号隔开,每一个存储位置由存储类型和存储物理路径组成。HDFS通过该配置感知底层存储的位置和类型
二、存储策略
在master机器上执行以下命令来查看HDFS支持的存储策略
hdfs storagepolices -listPolicies
Block Storage Policies:
BlockStoragePolicy{COLD:2, storageTypes=[ARCHIVE], creationFallbacks=[], replicationFallbacks=[]}
BlockStoragePolicy{WARM:5, storageTypes=[DISK, ARCHIVE], creationFallbacks=[DISK, ARCHIVE], replicationFallbacks=[DISK, ARCHIVE]}
BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}
BlockStoragePolicy{ONE_SSD:10, storageTypes=[SSD, DISK], creationFallbacks=[SSD, DISK], replicationFallbacks=[SSD, DISK]}
BlockStoragePolicy{ALL_SSD:12, storageTypes=[SSD], creationFallbacks=[DISK], replicationFallbacks=[DISK]}
BlockStoragePolicy{LAZY_PERSIST:15, storageTypes=[RAM_DISK, DISK], creationFallbacks=[DISK], replicationFallbacks=[DISK]}
返回结果分别为:COLD、WARM、HOT、ONE_SSD、ALL_SSD、LAZY_PERSIST
2.1、COLD
BlockStoragePolicy{COLD:2, storageTypes=[ARCHIVE], creationFallbacks=[], replicationFallbacks=[]}
这个存储策略的名称是COLD,策略ID是2,存储类型是ARCHIVE。这种存储策略是用于存储冷数据,也就是很少会使用的归档数据可以设置为这个存储策略。
creationFallbacks:这个是指当创建数据块的时候,如果当前存储策略指定的存储类型的空间不足的时候的备选存储类型
replicationFallbacks:这个是当数据块复制的时候,如果当前存储策略指定的存储类型的空间不足的时候的备选存储类型
对于COLD的存储策略,所有的数据都存储在ARCHIVE存储类型对应的存储位置上,数据块创建或者复制的时候都没有备选的存储类型
2.2、WARM
BlockStoragePolicy{WARM:5, storageTypes=[DISK, ARCHIVE], creationFallbacks=[DISK, ARCHIVE], replicationFallbacks=[DISK, ARCHIVE]}
这个存储策略的名称是WARM,策略ID是5,存储类型是DISK, ARCHIVE。半冷半热的数据可以设置这个存储策略。设置为这个存储策略的时候,如果数据块的备份数是n的话,那么,创建的第一个数据块的数据存储在DISK类型的存储目录中,其他复制的(n - 1)个数据块的数据存储在ARCHIVE类型的存储目录中。
在这种存储策略下:
当创建数据块的时候,如果当前存储策略指定的存储类型的空间不足的时候的备选存储类型是DISK, ARCHIVE
当数据块复制的时候,如果当前存储策略指定的存储类型的空间不足的时候的备选存储类型是DISK, ARCHIVE
2.3、HOT(HDFS默认存储策略)
`BlockStoragePolicy{HOT:``7``, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}`
这个存储策略的名称是HOT,策略ID是7,存储类型是DISK。**热(其实就是经常会使用)**的数据可以设置这个存储策略。设置为这个存储策略的时候,如果数据块的备份数是n
的话,那么,不管是新建的数据块还是复制的数据块的数据都存储在DISK类型中对应的存储位置上是HDFS的默认的数据存储策略
在这种存储策略下:
当创建数据块的时候,没有备选存储类型
当数据块复制的时候,如果当前存储策略指定的存储类型的空间不足的时候的备选存储类型是ARCHIVE
2.4、ONE_SSD
`BlockStoragePolicy{ONE_SSD:``10``, storageTypes=[SSD, DISK], creationFallbacks=[SSD, DISK], replicationFallbacks=[SSD, DISK]}`
这个存储策略的名称是ONE_SSD,策略ID是10,存储类型是SSD, DISK。
设置为这个存储策略的时候,如果数据块的备份数是n的话,那么,1个新建的数据块存储在SSD类型的对应的位置上,其他的(n - 1)个复制的数据块存储在DISK类型的对应的位置上。
在这种存储策略下:
当数据块复制的时候,如果当前存储策略指定的存储类型的空间不足的时候的备选存储类型是SSD, DISK
当数据块复制的时候,如果当前存储策略指定的存储类型的空间不足的时候的备选存储类型是SSD, DISK
2.5、ALL_SSD
`BlockStoragePolicy{ALL_SSD:``12``, storageTypes=[SSD], creationFallbacks=[DISK], replicationFallbacks=[DISK]}`
这个存储策略的名称是ALL_SSD,策略ID是12,存储类型是SSD。设置为这个存储策略的时候,如果数据块的备份数是n的话,那么,不管是新建的还是复制的n个数据块都存储在SSD类型对应的位置上
在这种存储策略下:
当数据块复制的时候,如果当前存储策略指定的存储类型的空间不足的时候的备选存储类型是DISK
当数据块复制的时候,如果当前存储策略指定的存储类型的空间不足的时候的备选存储类型是DISK
2.6、LAZY_PERSIST
`BlockStoragePolicy{LAZY_PERSIST:``15``, storageTypes=[RAM_DISK, DISK], creationFallbacks=[DISK], replicationFallbacks=[DISK]}`
这个存储策略的名称是LAZY_PERSIST,策略ID是15,存储类型是RAM_DISK, DISK。设置为这个存储策略的时候,如果数据块的备份数是n
的话,那么,1个新建的数据块存储在RAM_DISK类型的对应的位置上,其他的(n - 1)个复制的数据块存储在DISK类型的对应的位置上。
在这种存储策略下:
当数据块复制的时候,如果当前存储策略指定的存储类型的空间不足的时候的备选存储类型是DISK
当数据块复制的时候,如果当前存储策略指定的存储类型的空间不足的时候的备选存储类型是DISK
LAZY_PERSIST比较特殊,如果一个文件的存储策略被指定为LAZY_PERSIST,在写入时会先写入内存,再异步地写入磁盘,即主要用来降低小数据量的写入延迟,代价是在某些情况下会有数据丢失。
官方对LAZY_PERSIST的解释如下:
Applications can choose to use Lazy Persist Writes to trade off some durability guarantees in favor of reduced latency:应用程序可以选择使用Lazy Persist Writes来权衡一些耐久性保证,以减少延迟
2.7、综述
按照ALL_SSD、 ONE_SSD 、HOT、 WARM 、 COLD的顺序,面向的数据是越来越冷
策略ID | 策略名称 | 数据块放置情况(n个备份) | creationFallbacks | replicationFallbacks |
---|---|---|---|---|
2 | COLD | ARCHIVE: n | ||
5 | WARM | DISK: 1, ARCHIVE: n-1 | ARCHIVE, DISK | ARCHIVE, DISK |
7 | HOT(默认策略) | DISK: n | ARCHIVE | |
10 | ONE_SSD | SSD: 1, DISK: n-1 | SSD, DISK | SSD, DISK |
12 | ALL_SSD | SSD: n | DISK | DISK |
15 | LAZY_PERSIST | RAM_DISK: 1, DISK: n-1 | DISK | DISK |
开启HDFS的存储策略的功能的话,需要配置参数dfs.storage.policy.enabled
为true
,默认的值是true
,即HDFS的默认是支持存储策略的。
三、存储策略设置
列出存储策略列表
[]$:hdfs storagepolicies -listPolicies
查看HDFS路径是否设置了存储策略
[]$:hdfs storagepolicies -getStoragePolicy -path /user/hadoop-twq/cmd
message:The storage policy of /user/hadoop-twq/cmd is unspecified //说明没有设置存储策略
设置存储策略
[]$:hdfs storagepolicies -setStoragePolicy -path /user/hadoop-twq/cmd -policy HOT
message:Set storage policy HOT on /user/hadoop-twq/cmd //存储策略HOT设置成功
再次查看该路径的存储策略
[]$:hdfs storagepolicies -getStoragePolicy -path /user/hadoop-twq/cmd
The storage policy of /user/hadoop-twq/cmd:
BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}
取消存储策略:将应用最近祖先的存储策略,如果没有任何祖先的策略,则将应用默认存储策略。
[]$:hdfs storagepolicies -unsetStoragePolicy -path <path>
参考资料
[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}
取消存储策略:将应用最近祖先的存储策略,如果没有任何祖先的策略,则将应用默认存储策略。
```shell
[]$:hdfs storagepolicies -unsetStoragePolicy -path <path>
参考资料
https://www.cnblogs.com/tesla-turing/p/11487899.html