参考:
https://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html
https://blog.csdn.net/androidlushangderen/article/details/51105876
归档存储(Archival Storage)是一种将不断增长的存储容量和计算容量分离的解决方案。密度更高、存储成本更低、计算能力更低的节点正变得可用,并可在集群中用作冷存储。根据策略,热数据可以移动到冷数据。向冷存储中添加更多的节点可以独立于集群中的计算容量来增加存储。
异构存储(Heterogeneous Storage)和归档存储(Archival Storage)提供的框架概括了HDFS体系结构,该结构包括其他类型的存储介质,包括SSD和内存。用户可以选择将数据存储在SSD或内存中以获得更好的性能。
异构存储(HDFS-2832)的第一阶段是将DataNode的存储模式从一个存储(可能对应多个物理存储介质)更改为一组存储(每个存储对应一个物理存储介质)。它还增加了存储类型、DISK和SSD的概念,其中DISK是默认的存储类型。
为了支持archival storage,增加了一种新的存储类型 ARICHIVE,该存储类型具有高存储密度(PB)和低计算能力的特性。
另一种新的存储类型 RAM_DISK 的增加是为了支持在内存中写入单个存储副本文件。
引入存储策略的这个新概念,为的是根据存储策略将文件存储在不同的存储类型中。
当前有如下存储策略:
更正式地说,存储策略由以下字段组成:
当空间足够时,block副本将会按照 #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 | Provided | PROVIDED: 1, DISK: n-1 | PROVIDED, DISK | PROVIDED, DISK |
注意1: Lazy_Persist 策略只用于存储单个副本的blocks。对于超过单个副本的block而言,所有的副本都会写入到DISK中,因为只是将其中的一个副本写入到 RAM_DISK 并不会提高整体的性能。
注意2: 对于striping布局的纠删码化的文件,合适的存储策略是ALL_SSD,Hot,Cold。如果用户对于striped EC 文件设置了上述其他的存储策略,则它不会按照策略来创建和移动block。
当一个目录或者文件创建的时候,它的存储策略是未指定的。存储策略可以通过使用 “storagepolicies -setStoragePolicy” 命令来指定。文件或目录的有效存储策略按照以下规则解析:
通过“storagepolicies -getStoragePolicy” 命令可以获取有效的存储策略。
如果没有显式的标记存储类型,则默认的存储类型是DISK。
HDFS添加了一个新的数据迁移工具用于存档数据。该工具类似于Balancer。它定期扫描HDFS中的文件,以检查块位置是否满足存储策略。对于违反存储策略的块,它会将副本移动到不同的存储类型以满足存储策略要求。请注意,只要可能,它总是尝试在同一节点内移动块副本。如果这是不可能的(例如,当一个节点没有目标存储类型时),那么它会通过网络将块副本复制到另一个节点。
hdfs mover [-p | -f ]
选项 | 含义 |
---|---|
-p |
指定要迁移的HDFS文件/目录的空间分隔列表。 |
-f |
指定包含要迁移的HDFS文件/目录列表的本地文件。 |
如果 -p 和 -f 选项都省略了,那么默认的路径就是root目录。
$ hdfs storagepolicies -help
[-listPolicies]
List all the existing block storage policies.
[-setStoragePolicy -path -policy ]
Set the storage policy to a file/directory.
The path of the file/directory to set storage policy
The name of the block storage policy
[-getStoragePolicy -path ]
Get the storage policy of a file/directory.
The path of the file/directory for getting the storage policy
[-unsetStoragePolicy -path ]
Unset the storage policy set for a file/directory.
The path of the file/directory from which the storage policy will be
unset.
可以看到HDFS storagepolicies 有4个操作:
[-listPolicies]
[-setStoragePolicy -path -policy ]
[-getStoragePolicy -path ]
[-unsetStoragePolicy -path ]
列出所有的可用存储策略
hdfs storagepolicies -listPolicies
使用示例
$ hdfs storagepolicies -listPolicies
Block Storage Policies:
BlockStoragePolicy{PROVIDED:1, storageTypes=[PROVIDED, DISK], creationFallbacks=[PROVIDED, DISK], replicationFallbacks=[PROVIDED, DISK]}
BlockStoragePolicy{COLD:2, storageTypes=[ARCHIVE], creationFallbacks=[], replicationFallbacks=[]}
BlockStoragePolicy{WARM:5, storageTypes=[DISK, ARCHIVE], creationFallbacks=[DISK, ARCHIVE], replicationFallbacks=[DISK, ARCHIVE]}
BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}
BlockStoragePolicy{ONE_SSD:10, storageTypes=[SSD, DISK], creationFallbacks=[SSD, DISK], replicationFallbacks=[SSD, DISK]}
BlockStoragePolicy{ALL_SSD:12, storageTypes=[SSD], creationFallbacks=[DISK], replicationFallbacks=[DISK]}
BlockStoragePolicy{LAZY_PERSIST:15, storageTypes=[RAM_DISK, DISK], creationFallbacks=[DISK], replicationFallbacks=[DISK]}
为文件或目录设置存储策略
hdfs storagepolicies -setStoragePolicy -path -policy
选项 | 含义 |
---|---|
-path |
目录或文件的路径 |
-policy |
存储策略的名称 |
使用示例
$ hdfs storagepolicies -setStoragePolicy -path /data/lib -policy WARM
Set storage policy WARM on /data/lib
获取文件或目录的存储策略
hdfs storagepolicies -getStoragePolicy -path
选项 | 含义 |
---|---|
-path |
目录或文件的路径 |
使用示例
$ hdfs storagepolicies -getStoragePolicy -path /data/lib
The storage policy of /data/lib:
BlockStoragePolicy{WARM:5, storageTypes=[DISK, ARCHIVE], creationFallbacks=[DISK, ARCHIVE], replicationFallbacks=[DISK, ARCHIVE]}
取消文件或目录的存储策略设置。在unset命令之后,将应用最近祖先的存储策略,如果任何祖先上没有策略,则将应用默认存储策略。
hdfs storagepolicies -unsetStoragePolicy -path
选项 | 含义 |
---|---|
-path |
目录或文件的路径 |
使用示例
$ hdfs storagepolicies -unsetStoragePolicy -path /data/lib
Unset storage policy from /data/lib
$ hdfs storagepolicies -getStoragePolicy -path /data/lib
The storage policy of /data/lib is unspecified