博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《深入HDFS》HDFS异构存储
阅读量:4171 次
发布时间:2019-05-26

本文共 4668 字,大约阅读时间需要 15 分钟。

异构存储

异构存储是Hadoop2.6.0版本出现的新特性,可以根据各个存储介质读写特性不同进行选择。

例如冷热数据的存储,对冷数据采取容量大,读写性能不高的存储介质如机械硬盘,对于热数据,可使用SSD硬盘存储。
在读写效率上性能差距大。异构特性允许我们对不同文件选择不同的存储介质进行保存,以实现机器性能的最大化。

异构类型

1.RAM_DISK(内存)

2.SSD(固态硬盘)
3.DISK(机械硬盘)
4.ARCHIVE(高密度存储介质)

默认使用机械硬盘DISK

public enum StorageType {
DISK(false), SSD(false), ARCHIVE(false), RAM_DISK(true); private final boolean isTransient; public static final StorageType DEFAULT = DISK; ...}

其中true和false指是否使用transient,transient代表非持久化,而只有内存存储是transient。

HDFS中根据需要可设置文件存储目录的介质类型,需手动在dfs.datanode.data.dir中声明,如:

[SSD]file:/ / /grid / dn/ssdO

异构存储原理

异构存储工作步骤:

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

块存储策略

块存储指的是对hdfs文件的数据块副本储存,其中有6种策略:

HOT
COLD
WARM
ALL_SSD
ONE_SSD
LAZY_PERSIST

前三种根据冷热数据区分,后三种根据磁盘性质区分。

其中不同的策略,规定了适合的储存介质,在创建BlockStoragePolicySuite方法时可知:

public static BlockStoragePolicySuite createDefaultSuite() {
BlockStoragePolicy[] policies = new BlockStoragePolicy[16]; byte lazyPersistId = true; policies[15] = new BlockStoragePolicy((byte)15, "LAZY_PERSIST", new StorageType[]{
StorageType.RAM_DISK, StorageType.DISK}, new StorageType[]{
StorageType.DISK}, new StorageType[]{
StorageType.DISK}, true); byte allssdId = true; policies[12] = new BlockStoragePolicy((byte)12, "ALL_SSD", new StorageType[]{
StorageType.SSD}, new StorageType[]{
StorageType.DISK}, new StorageType[]{
StorageType.DISK}); byte onessdId = true; policies[10] = new BlockStoragePolicy((byte)10, "ONE_SSD", new StorageType[]{
StorageType.SSD, StorageType.DISK}, new StorageType[]{
StorageType.SSD, StorageType.DISK}, new StorageType[]{
StorageType.SSD, StorageType.DISK}); byte hotId = true; policies[7] = new BlockStoragePolicy((byte)7, "HOT", new StorageType[]{
StorageType.DISK}, StorageType.EMPTY_ARRAY, new StorageType[]{
StorageType.ARCHIVE}); byte warmId = true; policies[5] = new BlockStoragePolicy((byte)5, "WARM", new StorageType[]{
StorageType.DISK, StorageType.ARCHIVE}, new StorageType[]{
StorageType.DISK, StorageType.ARCHIVE}, new StorageType[]{
StorageType.DISK, StorageType.ARCHIVE}); byte coldId = true; policies[2] = new BlockStoragePolicy((byte)2, "COLD", new StorageType[]{
StorageType.ARCHIVE}, StorageType.EMPTY_ARRAY, StorageType.EMPTY_ARRAY); return new BlockStoragePolicySuite((byte)7, policies); }

存储策略速度如下:

在这里插入图片描述

块存储策略的调用

public static BlockStoragePolicySuite createDefaultSuite() {
BlockStoragePolicy[] policies = new BlockStoragePolicy[16]; byte lazyPersistId = true; policies[15] = new BlockStoragePolicy((byte)15, "LAZY_PERSIST", new StorageType[]{
StorageType.RAM_DISK, StorageType.DISK}, new StorageType[]{
StorageType.DISK}, new StorageType[]{
StorageType.DISK}, true); byte allssdId = true; policies[12] = new BlockStoragePolicy((byte)12, "ALL_SSD", new StorageType[]{
StorageType.SSD}, new StorageType[]{
StorageType.DISK}, new StorageType[]{
StorageType.DISK}); byte onessdId = true; policies[10] = new BlockStoragePolicy((byte)10, "ONE_SSD", new StorageType[]{
StorageType.SSD, StorageType.DISK}, new StorageType[]{
StorageType.SSD, StorageType.DISK}, new StorageType[]{
StorageType.SSD, StorageType.DISK}); byte hotId = true; policies[7] = new BlockStoragePolicy((byte)7, "HOT", new StorageType[]{
StorageType.DISK}, StorageType.EMPTY_ARRAY, new StorageType[]{
StorageType.ARCHIVE}); byte warmId = true; policies[5] = new BlockStoragePolicy((byte)5, "WARM", new StorageType[]{
StorageType.DISK, StorageType.ARCHIVE}, new StorageType[]{
StorageType.DISK, StorageType.ARCHIVE}, new StorageType[]{
StorageType.DISK, StorageType.ARCHIVE}); byte coldId = true; policies[2] = new BlockStoragePolicy((byte)2, "COLD", new StorageType[]{
StorageType.ARCHIVE}, StorageType.EMPTY_ARRAY, StorageType.EMPTY_ARRAY); return new BlockStoragePolicySuite((byte)7, policies); } public BlockStoragePolicySuite(byte defaultPolicyID, BlockStoragePolicy[] policies) {
this.defaultPolicyID = defaultPolicyID; this.policies = policies; }

块存储策略默认使用HOT,将所有数据都当成热数据。

异构存储策略的缺点

HDFS无法在文件目录存储策略变更时自动进行数据迁移。

存储策略变更有如下两种情况:
原先未设置StoragePolicy ,后来进行了设置 。
原先设置了A策略,后来又设置了B策略。

HDFS存储策略的使用

列出现有存储策略

hdfs storagepolicies -listPolicies

设置指定路径的存储策略

hdfs -setStroagePolicy -path 
-policy

获取指定路径的存储策略

hdfs -getStroagePolicy -path 

手动迁移数据

数据迁移工具能扫描HDFS上的文件,如果不满足内部设置的存储策略,就重新迁移数据到目标存储类型节点上

hdfs mover -p 
| -f

转载地址:http://gukai.baihongyu.com/

你可能感兴趣的文章
HTML5学习之——HTML 5 Canvas vs. SVG
查看>>
HTML5学习之——HTML 5 应用程序缓存
查看>>
HTML5学习之——HTML 5 Web Workers
查看>>
HTML5学习之——HTML 5 Canvas
查看>>
HTML5学习之——HTML5 内联 SVG
查看>>
HTML5学习之——HTML 5 服务器发送事件
查看>>
SVG学习之——HTML 页面中的 SVG
查看>>
SVG 形状学习之——SVG圆形
查看>>
SVG 滤镜学习之——SVG 滤镜
查看>>
mysql中用命令行复制表结构的方法
查看>>
hbase shell出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException
查看>>
让代码变得更优雅-Lombok
查看>>
解决Rhythmbox乱码
查看>>
豆瓣爱问共享资料插件发布啦
查看>>
Ubuntu10.10 CAJView安装 读取nh\kdh\caj文件 成功
查看>>
kermit的安装和配置
查看>>
vim 配置
查看>>
openocd zylin
查看>>
进程创建时文件系统处理
查看>>
内核线程创建
查看>>