命令:hdfs storagepolicies -listPolicies
| ID | Name | 存储类型 | 降级机制(原本) | 降级机制(副本) |
| 1 | PROVIDED | PROVIDED DISK | PROVIDED DISK | PROVIDED DISK |
| 2 | COLD | ARCHIVE | 无 | 无 |
| 5 | WARM | DISK ARCHIVE | DISK ARCHIVE | DISK ARCHIVE |
| 7 | HOT | DISK | 无 | ARCHIVE |
| 10 | ONT_SSD | SSD DISK | SSD DISK | SSD DISK |
| 12 | ALL_SSD | SSD | DISK | DISK |
| 15 | LAZY_PROVIDED | RAM DISK | DISK | DISK |
(ARCHIVE代表的是计算能力比较弱而存储密度比较高的存储介质)
CLOD:数据全部位于ARCHIVE中;
WRAM:介于hot和cold之间,有一份数据放在DISK上;
Hot:数据放在DISK上;
ONT_SSD:将数据的一个副本存储在SSD中,其余的副本存储在磁盘中;
ALL_SSD:文件及其副本均放置在SSD中;
Lazy_Provided:如果文件被设置为Lazy_Persist策略,当客户端向该文件发起读写请求,客户端写入的数据会首先被相应Block块的DataNode写入到自己的RAM内存中,同时DN会启动异步线程服务将内存中的数据持久化到磁盘上。
hdfs支持在文件使用过程中灵活改变文件的storage policy,hdfs列出了几个storage policy相关的命令
配置:(1)开启hdfs异构存储策略:dfs.storage.policy.enabled,该配置默认是开启的(true)
(2)将机器物理硬件上已经部署好的磁盘配置添加到hdfs配置项dfs.datanode.data.dir中,
需要注意的是对于SSD或者RAM需要加上特殊的标签,如[SSD]、[RAM_DISK]
Hbase异构存储dfs.datanode.data.dir file:///home/data/data/hadoop/dfs/data/data1, file:///home/data/data/hadoop/dfs/data/data2, file:///home/data/data/hadoop/dfs/data/data3, file:///home/data/data/hadoop/dfs/data/data4, file:///home/data/data/hadoop/dfs/data/data5, file:///home/data/data/hadoop/dfs/data/data6, file:///home/data/data/hadoop/dfs/data/data7, file:///home/data/data/hadoop/dfs/data/data8, file:///home/data/data/hadoop/dfs/data/data9, file:///home/data/data/hadoop/dfs/data/data10, file:///home/data/data/hadoop/dfs/data/data11, file:///home/data/data/hadoop/dfs/data/data12, [SSD]file:///home/data/data/hadoop/dfs/data/data13 true
public static void setStoragePolicy(final FileSystem fs, final Configuration conf,
final Path path, final String policyKey, final String defaultPolicy) {
String storagePolicy = conf.get(policyKey, defaultPolicy).toUpperCase();
if (!storagePolicy.equals(defaultPolicy) &&
fs instanceof DistributedFileSystem) {
DistributedFileSystem dfs = (DistributedFileSystem)fs;
Class extends DistributedFileSystem> dfsClass = dfs.getClass();
Method m = null;
try {
m = dfsClass.getDeclaredMethod("setStoragePolicy",
new Class>[] { Path.class, String.class });
m.setAccessible(true);
} catch (NoSuchMethodException e) {
LOG.info("FileSystem doesn't support"
+ " setStoragePolicy; --HDFS-7228 not available");
} catch (SecurityException e) {
LOG.info("Doesn't have access to setStoragePolicy on "
+ "FileSystems --HDFS-7228 not available", e);
m = null; // could happen on setAccessible()
}
if (m != null) {
try {
m.invoke(dfs, path, storagePolicy);
LOG.info("set " + storagePolicy + " for " + path);
} catch (Exception e) {
LOG.warn("Unable to set " + storagePolicy + " for " + path, e);
}
}
}
}
理想的混合机型集群异构部署,
对于 Hbase 层面来看,文件存储可选三种策略:HOT, ONE_SSD, ALL_SSD,
其中 :
ONE_SSD 存储策略既可以把三个副本中的两个存储到便宜的 SATA 磁盘介质之上来减少 SSD 磁盘存储成本的开销,同时在数据读取访问本地 SSD 磁盘上的数据可以获得理想的 RT ,是一个十分理想的存储策略。
HOT 存储策略与不引入异构存储时的存储情况没有区别,而 ALL_SSD 将所有副本都存储到 SSD 磁盘上。
链接:
[Hadoop] 使用DFSIO测试集群I/O性能_mryqu_新浪博客
YCSB数据库性能测试工具 - 简书
Hbase测试|Hbase 2.2.1随机读写性能测试【图文】_mb5fdb0a6739180_51CTO博客
HDFS原理|HDFS-Tiering 数据分层存储
Hbase性能监控及最佳实践 - 豆丁网



