HDFS异构存储机制研究

本文详细介绍了HDFS中的异构存储机制,包括存储介质分类(如RAM_DISK、SSD、DISK、ARCHIVE)、存储策略(如Lazy_persist、ALL_SSD等)以及相关shell命令。此外,还阐述了存储原理,数据存储目录解析流程,心跳汇报过程,并解释了如何根据存储策略选择合适DataNode节点的过程。
摘要由CSDN通过智能技术生成

HDFS异构存储机制研究

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

  1. RAM_DISK(内存)
  2. SSD(固态硬盘)
  3. DISK(普通硬盘,在HDFS中,如果没有主动声明数据目录存储类型默认都是DISK)
  4. ARCHIVE(没有特指哪种存储介质,主要的指的是计算能力比较弱而存储密度比较高的存储介质,用来解决数据量的容量扩增的问题)

二、HDFS异构存储的存储策略
(1)存储策略种类

  • Lazy_persist:一个副本保存在内存RAM_DISK中,其余副本保存在磁盘中
  • ALL_SSD:所有副本都保存在SSD中
  • One_SSD:一个副本保存在SSD中,其余副本保存在磁盘中
  • Hot:所有副本保存在磁盘中,这也是默认的存储策略
  • Warm:一个副本保存在磁盘上,其余副本保存在归档存储上
  • Cold:所有副本都保存在归档存储上

(2)存储策略相关shell命令

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

三、HDFS异构存储的原理

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

四、HDFS异构存储流程
HDFS异构存储过程调用的流程图
在这里插入图片描述

1、数据存储目录解析流程

  • FsDatasetImpl类的构造方法FsDatasetImpl(DataNode, DataStorage,Configuration)实现数据目录解析的功能,该方法调用DataNode类的getStorageLocation方法实现此功能
  • DataNode类的getStorageLocation方法中调用StorageLocation类的parse方法
  • StorageLocation类的parse方法采用正则匹配的方式将数据存储目录对应的字符串解析成StorageLocation对象
  • FsDatasetImpl类的addVolume方法将数据存储目录标识符和数据存储目录对应的DataNodeStorage实例加入storageMap

org.apache.hadoop.hdfs.server.datanode.fsdataset.impl下FsDatasetImpl类的构造方法——实现数据目录解析的功能

  FsDatasetImpl(DataNode datanode, DataStorage storage, Configuration conf
      ) throws IOException {
	......
    String[] dataDirs = conf.getTrimmedStrings(DFSConfigKeys.DFS_DATANODE_DATA_DIR_KEY);
    Collection<StorageLocation> dataLocations = DataNode.getStorageLocations(conf);
    List<VolumeFailureInfo> volumeFailureInfos = getInitialVolumeFailureInfos(
        dataLocations, storage);
     ......
    storageMap = new ConcurrentHashMap<String, DatanodeStorage>();
    volumeMap = new ReplicaMap(this);
    ramD
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值