在我们实际的学习开发过程中,我们的构存某些数据可能经常使用,但是学习过了一段时间,这个数据就不怎么使用了,构存即我们的学习数据存在一个热、温、冷等这些特性。那么针对数据的热度,我们可以采用不同的策略,存储到不同的存储介质上。
比如:
注意:那么hdfs自己知道哪些数据是热数据,哪些数据是冷数据吗,貌似是不知道的,需要我们自己去判断。
hdfs支持如下4中存储类型
hdfs是不会自动检测我们指定的数据存储目录是何种存储类型的,需要我们在配置的时候告诉hdfs。
指定目录的存储类型
vim hdfs-site.xml
<property>
<name>dfs.datanode.data.dir</name>
<value>[SSD]file:///var/hadoop/dfs/data1,[DISK]file:///var/hadoop/dfs/data2</value>
</property>
从上面的配置中可以 /var/hadoop/dfs/data1前面指定了[SSD],则说明data1 这个目录是一个 SSD的存储介质,但是具体是不是真的SSD类型,这个是不会去校验的。
创建文件或目录时,未指定其存储策略。可以使用storagePolicy -setStoragePolicy命令指定存储策略。文件或目录的有效存储策略由以下规则解析。
有效的存储策略可以通过storagePolicy -getStoragePolicy命令检索。
举例说明
在已经存在的文件/目录上设置新的存储策略将改变命名空间中的策略,但它不会在存储介质之间物理移动块。 此处介绍基于Mover来解决这个问题,具体的细节需要看官方文档。
2.3.6.1 列出所有存储策略
hdfs storagepolicies -listPolicies
2.3.6.2 为文件或目录设置存储策略
hdfs storagepolicies -setStoragePolicy -path <path> -policy <policy>
<path>:需要设置存储策略的文件或目录
<policy>:存储策略的名字
2.3.6.3 取消存储策略
hdfs storagepolicies -unsetStoragePolicy -path <path>
取消对文件或目录的存储策略设置。在unset命令之后,将应用最近祖先的存储策略,如果没有任何祖先的策略,则将应用默认存储策略。
2.3.6.4 获取文件或目录的存储策略。
hdfs storagepolicies -getStoragePolicy -path <path>
2.3.6.5 查看文件块分布
hdfs fsck xxx -files -blocks -locations
ip地址节点名存储类型192.168.121.140hadoop01DISK,ARCHIVE192.168.121.141hadoop02DISK,SSD192.168.121.142hadoop03SSD,ARCHIVE
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 开启hdfs异构存储策略 -->
<property>
<name>dfs.storage.policy.enabled</name>
<value>true</value>
</property>
<!-- 配置block块的存储目录,配置hdfds数据的存储目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>[DISK]file:///opt/bigdata/hadoop-3.3.4/data/disk,[ARCHIVE]file:///opt/bigdata/hadoop-3.3.4/data/archive</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 开启hdfs异构存储策略 -->
<property>
<name>dfs.storage.policy.enabled</name>
<value>true</value>
</property>
<!-- 配置block块的存储目录,配置hdfds数据的存储目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>[DISK]file:///opt/bigdata/hadoop-3.3.4/data/disk,[SSD]file:///opt/bigdata/hadoop-3.3.4/data/ssd</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 开启hdfs异构存储策略 -->
<property>
<name>dfs.storage.policy.enabled</name>
<value>true</value>
</property>
<!-- 配置block块的存储目录,配置hdfds数据的存储目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>[SSD]file:///opt/bigdata/hadoop-3.3.4/data/ssd,[ARCHIVE]file:///opt/bigdata/hadoop-3.3.4/data/archive</value>
</property>
此处仅仅只是演示 Warm类型。
由之前的存储策略表(2.3.2)可知,Warm类型的策略,只有一个块存储在DISK存储上,其余的全部存储在ARCHIVE存储上。
# hdfs 上创建目录
[hadoopdeploy@hadoop01 hadoop]$ hadoop fs -mkdir -p /var/data/storage
# 上传文件到 hdfs 目录中
[hadoopdeploy@hadoop01 hadoop]$ hadoop fs -put /etc/profile /var/data/storage/profile
# 设置 /var/data/storage 目录的存储策略为 warm
[hadoopdeploy@hadoop01 hadoop]$ hdfs storagepolicies -setStoragePolicy -path /var/data/storage -policy WARM
Set storage policy WARM on /var/data/storage
# 查看 /var/data/storage 目录的文件块分布,发现还是 2个 DISK,说明历史数据需要迁移,使用 mover 命令
[hadoopdeploy@hadoop01 hadoop]$ hdfs fsck /var/data/storage -files -blocks -locations
Connecting to namenode via http://hadoop01:9870/fsck?ugi=hadoopdeploy&files=1&blocks=1&locations=1&path=%2Fvar%2Fdata%2Fstorage
FSCK started by hadoopdeploy (auth:SIMPLE) from /192.168.121.140 for path /var/data/storage at Sat Mar 18 17:49:48 CST 2023
/var/data/storage <dir>
/var/data/storage/profile 2098 bytes, replicated: replication=2, 1 block(s): OK
0. BP-1760725553-192.168.121.140-1676791226380:blk_1073741858_1036 len=2098 Live_repl=2 [DatanodeInfoWithStorage[192.168.121.141:9866,DS-e86f80ba-6f04-4074-ab96-f58212c3c0e2,DISK], DatanodeInfoWithStorage[192.168.121.140:9866,DS-ca40e8cf-4d38-4a42-bfcb-e636087e9025,DISK]]
......
# 将 /var/data/storage 按照存储策略移动数据块
[hadoopdeploy@hadoop01 hadoop]$ hdfs mover /var/data/storage
2023-03-18 17:52:04,620 INFO mover.Mover: namenodes = { hdfs://hadoop01:8020=null}
2023-03-18 17:52:04,630 INFO balancer.NameNodeConnector: getBlocks calls for hdfs://hadoop01:8020 will be rate-limited to 20 per second
2023-03-18 17:52:05,368 INFO net.NetworkTopology: Adding a new node: /default-rack/192.168.121.142:9866
2023-03-18 17:52:05,368 INFO net.NetworkTopology: Adding a new node: /default-rack/192.168.121.140:9866
2023-03-18 17:52:05,368 INFO net.NetworkTopology: Adding a new node: /default-rack/192.168.121.141:9866
2023-03-18 17:52:05,402 INFO balancer.Dispatcher: Start moving blk_1073741858_1036 with size=2098 from 192.168.121.140:9866:DISK to 192.168.121.140:9866:ARCHIVE through 192.168.121.140:9866
2023-03-18 17:52:05,412 INFO balancer.Dispatcher: Successfully moved blk_1073741858_1036 with size=2098 from 192.168.121.140:9866:DISK to 192.168.121.140:9866:ARCHIVE through 192.168.121.140:9866
Mover Successful: all blocks satisfy the specified storage policy. Exiting...
2023-3-18 17:52:15 Mover took 10sec
# 重新查看 /var/data/storage 目录的文件块分布,发现还是 一个是 DISK 另外一个 ARCHIVE,说明存储策略生效了
pdeploy@hadoop01 hadoop]$ hdfs fsck /var/data/storage -files -blocks -locations
Connecting to namenode via http://hadoop01:9870/fsck?ugi=hadoopdeploy&files=1&blocks=1&locations=1&path=%2Fvar%2Fdata%2Fstorage
FSCK started by hadoopdeploy (auth:SIMPLE) from /192.168.121.140 for path /var/data/storage at Sat Mar 18 17:53:23 CST 2023
/var/data/storage <dir>
/var/data/storage/profile 2098 bytes, replicated: replication=2, 1 block(s): OK
0. BP-1760725553-192.168.121.140-1676791226380:blk_1073741858_1036 len=2098 Live_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]]
1、https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html
2、https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
责任编辑:武晓燕 来源: 今日头条 异构存储hdfs(责任编辑:探索)
四川省甘孜州“五项措施”严守耕地红线 恢复耕地面积26.54亩
股权登记日第二天卖出股票还有分红吗?为什么股票一除权就亏了?
我国首台套丁二烯法己二腈工业化生产项目成功投产 补齐产业链短板
同济科技(600846.SH):终止2017年度配股公开发行证券方案 维护投资者利益
四川省自贡市做强工业主引擎 上半年完成工业投资111.4亿元