当前位置: 首页 > 后端技术 > Java

hdfs的异构存储

时间:2023-04-01 22:01:13 Java

1背景在我们实际的开发过程中,我们的一些数据可能会被频繁使用,但是经过一段时间后,这些数据就用的不多了,也就是我们的数据有hot,warm,cold之类的和其他特征。那么我们就可以根据数据的流行程度,采取不同的策略,将数据存储在不同的存储介质上。例如:对于经常访问的数据,我们可以将其存储在SSD上。对于访问频率不高的,我们可以将它们存放在DISK上,也就是普通硬盘。对于很少访问的数据,在存档媒体上。注意:hdfs是否知道哪些数据是热数据,哪些数据是冷数据?好像它不知道,还需要我们自己判断。2hdfs异构存储类型及存储策略2.1hdfs支持的存储类型hdfs支持以下4种存储类型ARCHIVE:存储密度高(PB级存储)但计算能力弱,一般用于归档文件的存储。DISK:普通磁盘,默认存储类型SSD:SSD固态硬盘RAM_DISK:支持在内存中写入单个副本文件2.2hdfs如何知道数据存储目录是哪种存储类型?什么样的存储类型,我们需要在配置的时候告诉hdfs。指定目录的存储类型vimhdfs-site.xmldfs.datanode.data.dir[SSD]file:///var/hadoop/dfs/data1,[DISK]file:///var/hadoop/dfs/data2从上面的配置可以看出,在/var/hadoop/dfs/data1前面可以指定[SSD],即data1directory是SSD存储介质,但是否是真正的SSD类型,这个无从考证。2.3存储策略2.3.1hdfs支持以下存储策略Hot:用于存储和计算。当我们的数据是热数据时,可以采用这种存储策略,所有的副本都在DISK中。Warm:仅适用于计算受限的存储。不再使用或需要归档的数据从热存储移动到冷存储。当一个块是冷的时,所有副本都存储在ARCHIVE中。冷:部分热部分冷。当一个块很热时,它的一些副本存储在DISK中,其余的存储在ARCHIVE中。All_SSD:用于将所有副本存储在SSD中。One_SSD:用于在SSD中存储一份副本。其余副本存储在DISK中。Lazy_Persist:用于在内存中写入具有单个副本的块。该副本首先写入RAM_DISK,然后延迟保存在DISK中。Provided:用于存储HDFS之外的数据2.3.2存储策略表2.3.4存储策略解析创建文件或目录时,没有指定其存储策略。您可以使用storagePolicy-setStoragePolicy命令指定存储策略。文件或目录的有效存储策略由以下规则决定。如果文件或目录指定了存储策略,则返回它。对于未指定的文件或目录,如果是根目录则返回默认的存储策略。否则,返回其父项的有效存储策略。可以通过storagePolicy-getStoragePolicy命令检索有效的存储策略。2.3.5配置存储策略dfs.storage.policy.enabled用于启用或禁用存储策略特性,默认值为truedfs.datanode.data.dir在每个数据节点上,逗号分隔的存储位置应标记其存储类型.这允许存储策略根据策略将块放置在不同的存储类型上。例如datanode上的存储位置/grid/dn/disk0为DISK类型,则配置为[DISK]file:///grid/dn/disk0如果存储位置为/grid/dn/disk0datanode为SSD类型,应配置为[SSD]file:///grid/dn/disk0如果datanode上的存储位置/grid/dn/disk0为ARCHIVE类型,则应配置为[ARCHIVE]file:///grid/dn/如果disk0没有显式标记存储类型,则datanode存储位置的默认存储类型为DISK。2.3.6基于存储策略的数据移动对现有文件/目录设置新的存储策略会更改命名空间中的策略,但不会在存储介质之间物理移动块。下面我们介绍如何基于Mover来解决这个问题。详情请参考官方文档。2.3.7存储策略命令2.3.7.1列出所有存储策略hdfsstoragepolicies-listPolicies2.3.7.2为文件或目录设置存储策略hdfsstoragepolicies-setStoragePolicy-path-policy:需要设置存储的策略的文件或目录:存储策略的名称2.3.7.3取消存储策略hdfsstoragepolicies-unsetStoragePolicy-path取消文件或目录的存储策略设置。unset命令后,将应用最近祖先的存储策略,或者如果没有任何祖先的策略,将应用默认存储策略。2.3.7.4获取文件或目录的存储策略。hdfsstoragepolicies-getStoragePolicy-path2.3.7.5查看文件块分布hdfsfsckxxx-files-blocks-locations3hdfs异构存储案例3.1环境准备ip地址节点名存储类型192.168.121.140hadoop01DISK,ARCHIVE192.168.121.141SKhadoop02SSD192。168.121.142hadoop03SSD,ARCHIVE3.2节点hdfs-site.xml配置文件3.2.1hadoop01dfs.replication2dfs.storage.policy.enabledtruedfs.datanode.data.dir[DISK]file:///opt/bigdata/hadoop-3.3.4/data/disk,[ARCHIVE]file:///opt/bigdata/hadoop-3.3.4/data/archive3.2.2hadoop02dfs.replication2dfs.storage.policy.enabledtruedfs.datanode.data.dir[DISK]file:///opt/bigdata/hadoop-3.3.4/data/disk,[SSD]file:///opt/bigdata/hadoop-3.3.4/data/ssd3.2.3hadoop03dfs.replication2dfs.storage.policy.enabledtruedfs.datanode.data.dir[SSD]file:///opt/bigdata/hadoop-3.3.4/data/ssd,[ARCHIVE]file:///opt/bigdata/hadoop-3.3.4/data/archive3.3重启hdfs集群,检查data目录的存储类型是否正确3.4案例演示这里只演示Warm类型从前面的存储策略表(2.3.2)可以看出,对于Warm类型的策略,只有一个块存储在DISK存储上,其余的都存储在ARCHIVE存储上。#在hdfs上创建一个目录[hadoopdeploy@hadoop01hadoop]$hadoopfs-mkdir-p/var/data/storage#上传文件到hdfs目录下[hadoopdeploy@hadoop01hadoop]$hadoopfs-put/etc/profile/var/data/storage/profile#设置/var/data/storage目录的存储策略为warm[hadoopdeploy@hadoop01hadoop]$hdfsstoragepolicies-setStoragePolicy-path/var/data/storage-policyWARMSetstoragepolicyWARMon/var/data/storage#查看/var/data/storage目录下的文件块分布,发现还有2个DISK,说明需要迁移历史数据。使用移动器命令[hadoopdeploy@hadoop01hadoop]$hdfsfsck/var/data/storage-files-blocks-locationsConnectingtonamenodeviahttp://hadoop01:9870/fsck?ugi=hadoopdeploy&files=1&blocks=1&locations=1&path=%2Fvar%2Fdata%2FstorageFSCK由hadoopdeploy(auth:SIMPLE)从/192.168.121.140开始用于路径/var/data/storageatSatMar1817:49:48CST2023/var/data/storage

/var/data/存储/配置文件2098字节,已复制:复制=2、1个块:OK0。BP-1760725553-192.168.121.140-1676791226380:blk_1073741858_1036len=2098Live_repl=2[DatanodeInfoWithStorage[192.168.121.141:9866,DS-e86f80ba-6f04-4074-ab96-f58212c3c0e2,DISK],DatanodeInfoWithStorage[192.168.121.140:9866,DS-ca4428cf-4074-ab96-f58212c3c0e2]36087e9025,DISK]]......#将/var/data/storage点击存储策略移动数据块[hadoopdeploy@hadoop01hadoop]$hdfsmover/var/data/storage2023-03-1817:52:04,620INFOmover.Mover:namenodes={hdfs://hadoop01:8020=null}2023-03-1817:52:04,630INFObalancer.NameNodeConnector:getBlocks对hdfs://hadoop01:8020的调用将受到速率限制到每秒20个2023-03-1817:52:05,368INFOnet.NetworkTopology:添加一个新节点:/default-rack/192.168.121.142:98662023-03-1817:52:05,368INFOnet.NetworkTopology:添加一个新节点节点:/default-rack/192.168.121.140:98662023-03-1817:52:05,368INFOnet.NetworkTopology:添加新节点:/default-rack/192.168.121.141:98662023-03-1817:52:05,402INFObalancer.Dispatcher:开始从192.168.121.140:9866:DIS移动大小为2098的blk_1073741858_1036k至192.168.121.140:9866:archive至192.168.121.140:98662023-03-1817:52:52:05,412信息balancer.dispatcher.dispatcher:成功移动的BLK_1073741858_1036,来自192.18.18.198.198.198.198.198.198.198.198.198.198.198.198.198.198.198.198.198.198.19888.an:ARCHIVEthrough192.168.121.140:9866Mover成功:所有块都满足指定的存储策略。Exiting...2023-3-1817:52:15Movertake10sec#查看/var/data/storage目录下文件块的分布情况,发现一个是DISK,一个是ARCHIVE,说明存储策略已生效pdeploy@hadoop01hadoop]$hdfsfsck/var/data/storage-files-blocks-locationsConnectingtonamenodeviahttp://hadoop01:9870/fsck?ugi=hadoopdeploy&files=1&blocks=1&locations=1&path=%2Fvar%2Fdata%2FstorageFSCK由hadoopdeploy(auth:SIMPLE)从/192.168.121.140开始用于路径/var/data/storageatSatMar1817:53:23CST2023/var/data/storage/var/data/存储/配置文件2098字节,已复制:复制=2、1个块:OK0。BP-1760725553-192.168.121.140-1676791226380:blk_1073741858_1036len=2098Live_repl=2[DatanodeInfoWithStorage[192.168.121.141:9866,DS-e86f80ba-6f04-4074-ab96-f58212c3c0e2,DISK],DatanodeInfoWithStorage[192.168.121.140:9866,DS-cf50253c-ea3f-46f6-bdd9-4ac1ad3907d2,ARCHIVE]]4参考文档1、https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html2、https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml