关于后端:hdfs的异构存储

4次阅读

共计 6584 个字符,预计需要花费 17 分钟才能阅读完成。

1 背景

在咱们理论的开发过程中,咱们的某些数据可能常常应用,然而过了一段时间,这个数据就不怎么应用了,即咱们的数据存在一个 等这些个性。那么针对 数据的热度 ,咱们能够采纳不同的策略,存储到不同的存储介质上。
比方:

  1. 针对常常拜访的数据,咱们能够存储在 SSD 上。
  2. 针对拜访频率不高的,咱们能够存储在DISK,即一般的硬盘上。
  3. 针对简直不会拜访的数据,保留在归档介质上。

留神:那么 hdfs 本人晓得哪些数据是热数据,哪些数据是冷数据吗,貌似是不晓得的,须要咱们本人去判断

2 hdfs 异构存储类型和存储策略

2.1 hdfs 反对的存储类型

hdfs反对如下 4 中存储类型

  • ARCHIVE: 它具备 高存储密度 (PB 级存储)但 计算能力弱,个别用于归档文件的存储。
  • DISK: 一般磁盘,默认的存储类型
  • SSD: SSD 固态硬盘
  • RAM_DISK: 反对在 内存 中写入单个正本文件

2.2 hdfs 如何晓得数据存储目录是那种存储类型

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 类型,这个是不会去校验的。

2.3 存储策略

2.3.1 在 hdfs 中反对如下存储策略

  • Hot: 用于存储和计算。当咱们的数据是 数据时,能够应用这种存储策略,所有的正本都在 DISK 中。
  • Warm: 仅实用于计算无限的存储。不再应用的数据或须要归档的数据从热存储挪动到冷存储。当一个块 时,所有正本都存储在 ARCHIVE 中。
  • Cold:局部热和局部冷。当一个块是热的时,它的一些正本存储在 DISK 中,其余的正本存储在 ARCHIVE 中。
  • All_SSD:用于将所有正本存储在 SSD 中。
  • One_SSD:用于将其中一个正本存储在 SSD 中。其余正本存储在 DISK 中。
  • Lazy_Persist:用于在内存中写入具备单个正本的块。正本首先用 RAM_DISK 写入,而后懈怠地保留在 DISK 中。
  • Provided:用于在 HDFS 之外存储数据

    2.3.2 存储策略表

    2.3.4 Storage Policy Resolution

    创立文件或目录时,未指定其存储策略。能够应用 storagePolicy -setStoragePolicy 命令指定存储策略。文件或目录的无效存储策略由以下规定解析。

  1. 如果文件或目录指定了存储策略,则返回它。
  2. 对于未指定的文件或目录,如果是根目录,则返回默认存储策略。否则,返回其父级的无效存储策略。

无效的存储策略能够通过 storagePolicy -getStoragePolicy 命令检索。

2.3.5 配置存储策略

  • dfs.storage.policy.enabled 用于启用或禁止存储策略个性,默认值是true
  • dfs.datanode.data.dir 在每个数据节点上,逗号分隔的存储地位应标记其存储类型。这容许存储策略依据策略将块搁置在不同的存储类型上。

举例说明

  1. 如果一个 datanode 上的存储地位 /grid/dn/disk0DISK类型,应该配置为[DISK]file:///grid/dn/disk0
  2. 如果一个 datanode 上的存储地位 /grid/dn/disk0SSD类型,应该配置为[SSD]file:///grid/dn/disk0
  3. 如果一个 datanode 上的存储地位 /grid/dn/disk0ARCHIVE类型,应该配置为[ARCHIVE]file:///grid/dn/disk0

如果 没有显式标记 的存储类型,则 datanode 存储地位的默认存储类型将是DISK

2.3.6 基于存储策略的数据挪动

曾经存在 文件 / 目录 设置新的存储策略 将扭转命名空间中的策略,但它不会在存储介质之间物理挪动块。
此处介绍基于 Mover 来解决这个问题,具体的细节须要看官网文档。

2.3.7 存储策略命令

2.3.7.1 列出所有存储策略
hdfs storagepolicies -listPolicies
2.3.7.2 为文件或目录设置存储策略
hdfs storagepolicies -setStoragePolicy -path <path> -policy <policy>

<path>:须要设置存储策略的文件或目录
<policy>:存储策略的名字

2.3.7.3 勾销存储策略
hdfs storagepolicies -unsetStoragePolicy -path <path>

勾销对文件或目录的存储策略设置。在 unset 命令之后,将利用最近先人的存储策略,如果没有任何先人的策略,则将利用默认存储策略。

2.3.7.4 获取文件或目录的存储策略。
hdfs storagepolicies -getStoragePolicy -path <path>
2.3.7.5 查看文件块散布
hdfs fsck xxx -files -blocks -locations

3 hdfs 异构存储案例

3.1 环境筹备

ip 地址 节点名 存储类型
192.168.121.140 hadoop01 DISK,ARCHIVE
192.168.121.141 hadoop02 DISK,SSD
192.168.121.142 hadoop03 SSD,ARCHIVE

3.2 节点 hdfs-site.xml 配置文件

3.2.1 hadoop01

<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>

3.2.2 hadoop02

<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>

3.2.3 hadoop03

<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>

3.3 重启 hdfs 集群,并看数据目录存储类型是否正确

3.4 案例演示

此处仅仅只是演示 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]]

4 参考文档

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

正文完
 0