我与HDFS那些事儿(一)HDFS的数据存储

我与HDFS那些事儿(一)HDFS的数据存储

闲话不多说,就来聊聊这些年与HDFS的那些事儿,我们首先来聊聊HDFS的数据存储。HDFS正是先有了数据的存储,才有后续的写入和管理等操作。数据存储包括两块:
1.内存存储;内存存储是一种十分特殊的存储方式,将会对集群数据的读写性能带来不小的提升。
2.异构存储;异构存贮能够帮助我们更加合理的把数据存到该存的地方。

HDFS内存存储

HDFS的内存存储与HDFS的缓存是有些异同的,大家注意区分。相同之处:都是使用机器的内存作为存储数据的载体。不同之处在于:缓存需要使用HDFS缓存管理命令,更像是改进用户使用的一种功能;而内存存储则使用内存存储策略,直接将内存作为数据存放的载体,可以理解为此时此节点的内存充当了一块“磁盘”,从底层扩展了数据存储方式。

  1. HDFS内存存储原理
    在了解内存存储原理之前大家可能会有这样两个疑问:1.数据临时维护在内存中,服务一旦停止,数据会不会全部丢失;2.如果服务停止时做持久化操作,如果数据量很大,一来内存空间可能不够用,二来大量数据写入磁盘的速度也会很慢;
    所以通用的、比较好的做法时异步持久化。
    在内存存储新数据的同时,持久化距离当前时刻最远(存储时间最早)的数据。好比有个内存数据块队列,在队列头不断有新增的数据块插入,在队列尾部的块,需要持久化到磁盘,形成一个循环。
    HDFS的LAZY_PERSIST内存存储策略用的就是这套方法。在这里插入图片描述

  2. linux虚拟内存盘
    想要将内存当作一块盘来用,需要了解linux中的另一项技术,虚拟内存盘;虚拟内存盘可以在某些特定的内存式存储文件系统下结合使用,比如tmpfs,ramfs。

  3. HDFS的内存存储流程分析
    HDFS文件内存存储策略设置
    第一种方式,通过命令行的方式:

hdfs storagepolicies -setStoragePolicy -path <path> -policy LAZY_PERSIST

第二种方法,调用对应的程序方法,比如暴露在外的create文件方法,但是得带上参数CreateFlag.LAZY_PERSIST。
5. LAZY_PERSIST内存存储的使用
第一步,准备内存存储的介质,需要完成虚拟内存盘的配置工作。以tmpfs为例,tmpfs默认式被挂载到/dev/shm,并且大小是32G。也就是说此目录中的数据实际上是存在内存中的。如果想挂载到自己的目录,可以使用以下命令:

sudo mount -t tmpfs -o size=16g tmpfs /mnt/dn-tmpfs/

首先需要将机器中完成好的虚拟内存盘配置到dfs.datanode.data.dir中,其次还要带上RAM_DISK标签。

<property>
	<name>dfs.datanode.data.dir</name>
	<value>/grid/0,/grid/1,/grid/2,[RAM_DISK]/mnt/dn-tmpfs/</value>
</property>

第二步,是设置具体的文件策略类型。方法参见上文。

HDFS异构存储

HDFS在2.6.0版本引入异构存储。可以各个存储介质读写特性的不同发挥各自的优势。比较适用的场景就是冷热数据的存储。对冷数据采用容量大,读写性能不高的存储介质,对于热数据,采用SSD的方式进行存储。

  1. 异构存储类型
    RAM_DISK
    SSD
    DISK
    ARCHIVE
    四种存储方式速度依次递减。RAM_DISK就是内存存储,SSD不必再解释,对热数据存储在这两种介质中,可以提高效率。ARCHIVE没有特质哪种存储介质,主要指高密度存储介质,用于解决数据扩容的问题,比较适用于存储冷数据。默认的存储类型是DISK。要让HDFS知道存储目录是哪种存储介质,需要配置dfs.datanode.data.dir属性,参考上文。
  2. 异构存储原理
    DataNode通过心跳汇报自身数据存储目录的StorageType给NameNode;
    随后NameNode进行汇总并更新集群内各个节点的存储类型情况;
    待复制文件根据自身设定的存储策略信息向NameNode请求拥有此类型存储介质的DataNode作为候选节点;
  3. 块存储策略集合
    HOT
    COLD
    WARM
    ALL_SSD
    ONE_SSD
    LAZY_PERSIST
    前三种是根据冷热的角度来划分的,后三种是根据存放盘的性质来划分的。ONE_SSD只有第一个块的副本块是此类型的 ,其余全部是DISK。ALL_SSD则是全部是SSD的存储。
  4. 异构存储的不足之处
    用户A在HDFS目录上创建了自己的存储目录/user/A,不设置任何策略,默认是DISK,有一天发现数据不怎么使用了,设置为CLOD,设置setStoragePolicy命令,是否目的就到达了呢?
    这里需要额外的执行hdsf -mover命令做文件目录的扫描。在mover命令扫描的过程中如果发现文件目录的实际存储类型与其设置的storagePolicy策略不同,将会进行数据块的迁移。

思考

HDFS的存储,首先要做的是需要区分哪些是经常使用的热数据,哪些是不常使用的冷数据。而这凭感觉多少会很有偏差,以此,对数据资产的管理,清楚的知道哪些数据有用,经常被使用,还是蛮重要的一件事情。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值