HDFS的多级(DISK、SSD)存储策略
归档存储是一种将不断增长的存储容量与计算容量分离开来的解决方案。密度更高、存储成本更低、计算能力更低的节点正在成为可用的、可以在集群中用作冷存储。根据策略,可以将热数据移到冷数据。增加节点到冷存储中可以增加不依赖于集群计算容量的存储容量。
异构存储和归档存储提供的框架对HDFS体系结构进行了概括,使其包含了SSD、内存等其他类型的存储介质。用户可以选择将数据存储在SSD或内存中以获得更好的性能。
存储类型和存储策略
存储类型: ARCHIVE,DISK,SSD 和 RAM _ DISK
异构存储的第一阶段(HDFS-2832)改变了datanode存储模式,从可能对应于多个物理存储介质的单个存储器 转变为 对应于一个物理存储介质的多个存储器 的集合。它还增加了存储类型的概念,DISK 和 SSD,其中 DISK 是默认的存储类型。
为了支持归档存储,添加了一种新的存储类型 ARCHIVE,它具有较高存储密度(存储容量 petabyte) ,但计算效率很低。
增加了另一种新的存储类型 RAM _ DISK,以支持在内存中写入单个副本文件。
存储策略: Hot, Warm, Cold, All_SSD, One_SSD and Lazy_Persist
引入了存储策略的新概念,以便根据存储策略将文件存储在不同的存储类型中。
我们有以下存储策略:
- Hot- 常用的数据保留在这个策略中。当一个块处于热状态时,所有副本都存储在 DISK 中
- Cold- 不再使用的数据或需要存档的数据。当块处于冷状态时,所有副本都存储在 ARCHIVE 中
- Warm- 当一个块处于Warm状态时,它的一些副本存储在 DISK 中,其余的副本存储在 ARCHIVE 中
- All_SSD- 所有副本存储在SSD中
- One_SSD - 在 SSD 中存储一个副本,其余副本存储在 DISK 中
- Lazy_Persist- 在内存中存放只有一个副本的块。block首先用 RAM _ DISK 写入,然后延迟地保存在 DISK 中
更正式地说,存储策略由以下字段组成:
- Policy ID
- Policy name
- 用于块放置的存储类型列表
- 后备存储类型列表
- 用于复制后备存储类型列表
当有足够的空间时,块副本将根据 3中指定的存储类型列表进行存储。当列表 3中的某些存储类型空间不足时,分别使用列表 4和 5中指定的后备存储类型列表替换文件创建和复制的空间不足存储类型。
下面是一个典型的存储策略表。
Policy ID | Policy Name | Block Placement (n replicas) | Fallback storages for creation | Fallback storages for replication |
---|---|---|---|---|
15 | Lazy_Persist | RAM_DISK: 1, DISK: n-1 | DISK | DISK |
12 | All_SSD | SSD: n | DISK | DISK |
10 | One_SSD | SSD: 1, DISK: n-1 | SSD, DISK | SSD, DISK |
7 | Hot (default) | DISK: n | ARCHIVE | |
5 | Warm | DISK: 1, ARCHIVE: n-1 | ARCHIVE, DISK | ARCHIVE, DISK |
2 | Cold | ARCHIVE: n |
注意1: Lazy _ persist 策略只对单个副本块有用。对于具有多个副本的块,所有副本都将写入到 DISK,因为只将一个副本写入 RAM _ DISK 并不会提高总体性能。
注2: 对于erasure coded文件,合适的存储策略是 All _ ssd、 Hot、 Cold。因此,如果用户为 erasure coded文件设置策略而不是上面提到的策略,那么在创建或移动块时就不会遵循该策略。
存储策略解决方案
创建文件或目录时,不会指定其存储策略。可以使用“storagepolicies -setStoragePolicy
” 命令指定存储策略。
有效的存储策略可以通过“storagepolicies -getStoragePolicy
”命令进行检索。
配置
-
dfs.storage.policy.enabled - 启用/禁用存储策略特性。默认值为true.
-
dfs.datanode.data.dir - 在每个数据节点上,逗号分隔的存储位置应标记为其存储类型。这允许存储策略根据策略将块放置在不同的存储类型上。例如:
- datanode的存储路径 /grid/dn/disk0 是DISK类型,应配置为:[DISK]file:///grid/dn/disk0
- datanode的存储路径 /grid/dn/ssd0 是SSD类型,应配置为:[ SSD ]file://grid/dn/ssd0
- datanode的存储路径 /grid/dn/archive0 是ARCHIVE类型,应配置为:[ ARCHIVE ]file://grid/dn/archive0
- datanode的存储路径 /grid/dn/ram0 是RAM_DISK类型,应配置为:[ RAM_DISK ]file://grid/dn/ram0
如果datanode存储位置没有显式标记的存储类型,则默认存储类型为 DISK。
Mover-一种新的数据迁移工具
为归档数据添加了一个新的数据迁移工具。这个工具类似于平衡器。它定期扫描 HDFS 中的文件,以检查块放置是否满足存储策略。对于违反存储策略的块,它将副本移动到不同的存储类型,以满足存储策略要求。请注意,只要有可能,它总是尝试在同一节点内移动块副本。如果这是不可能的(例如,当一个节点没有目标存储类型) ,那么它将通过网络将块副本复制到另一个节点。
-
命令:
hdfs mover [-p <files/dirs> | -f <local file name>]
-
Arguments:
-p <files/dirs> |
Specify a space separated list of HDFS files/dirs to migrate. |
-f <local file> |
Specify a local file containing a list of HDFS files/dirs to migrate. |
请注意,如果省略-p 和-f 选项,则默认路径是根目录。
存储策略命令
存储策略列表
列出所有的存储策略。
-
命令:
hdfs storagepolicies -listPolicies
设置存储策略
为文件或目录设置存储策略。
-
命令:
hdfs storagepolicies -setStoragePolicy -path <path> -policy <policy>
-
Arguments:
-path <path> |
The path referring to either a directory or a file. |
-policy <policy> |
The name of the storage policy. |
取消存储策略
为文件或目录取消存储策略。在 unset 命令之后,将应用最近父目录的存储策略,如果对任何父节点没有策略,则应用默认存储策略。
-
命令:
hdfs storagepolicies -unsetStoragePolicy -path <path>
-
参数
path <path>
The path referring to either a directory or a file.
获取存储策略
获取文件或目录的存储策略。
-
命令:
hdfs storagepolicies -getStoragePolicy -path <path>
-
参数:
-path <path>
The path referring to either a directory or a file.