档案存储是一种解决方案,可将不断增长的存储容量与计算容量分离。具有更高密度和价格便宜,计算能力低的存储节点正变得可用,并且可以用作集群中的冷存储。根据策略,热数据可以转移到冷数据。将更多节点添加到冷存储可以独立于群集中的计算容量来扩展存储。
异构存储和档案存储提供的框架将HDFS体系结构概括为包括其他类型的存储介质,包括SSD和内存。用户可以选择将其数据存储在SSD或内存中以获得更好的性能。
异构存储(HDFS-2832)的第一阶段将数据节点存储模型从单个存储(可能对应于多个物理存储介质)更改为存储的集合,每个存储都对应于一个物理存储介质。它还添加了存储类型DISK和SSD的概念,其中DISK是默认存储类型。
添加了一种新的存储类型ARCHIVE,它具有很高的存储密度(PB级存储),但计算能力却很小,可用于支持归档存储。
添加了另一个新的存储类型RAM_DISK,以支持在内存中写入单个副本文件。
引入了存储策略的新概念,以允许根据存储策略将文件存储在不同的存储类型中。
我们有以下存储策略:
更正式地说,存储策略由以下字段组成:
当有足够的空间时,将根据#3中指定的存储类型列表存储块副本。当列表#3中的某些存储类型空间不足时,在#4和#5中指定的后备存储类型列表将分别用于替换空间不足的存储类型,以用于文件创建和复制。
以下是典型的存储策略表。
政策 编号 | 政策 名称 | 块放置 (n个副本) | 用于创建的后备存储 | 用于复制的后备存储 |
---|---|---|---|---|
15 | 懒惰的 | RAM_DISK:1,DISK:n -1 | 磁盘 | 磁盘 |
12 | All_SSD | 固态硬盘:n | 磁盘 | 磁盘 |
10 | One_SSD | SSD:1,DISK:n -1 | SSD,磁盘 | SSD,磁盘 |
7 | 热(默认) | 碟片:n | <无> | 存档 |
5 | 暖 | 磁盘:1,存档:n -1 | 存档,磁盘 | 存档,磁盘 |
2 | 冷 | 存档:n | <无> | <无> |
1个 | 提供 | 提供:1,磁盘:n -1 | 提供,磁盘 | 提供,磁盘 |
注意1:Lazy_Persist策略仅对单个副本块有用。对于具有多个副本的块,所有副本将被写入DISK,因为仅将一个副本写入RAM_DISK不会提高整体性能。
注意2:对于具有条带化布局的擦除编码文件,合适的存储策略为All_SSD,热,冷。因此,如果用户为条带化EC文件设置了除上述策略以外的其他策略,则在创建或移动块时不会遵循该策略。
创建文件或目录时,未指定其存储策略。可以使用“ storagepolicies -setStoragePolicy ”命令指定存储策略。文件或目录的有效存储策略由以下规则解决。
如果使用存储策略指定了文件或目录,请返回它。
对于未指定的文件或目录,如果它是根目录,则返回默认存储策略。否则,返回其父级的有效存储策略。
可以通过“ storagepolicies -getStoragePolicy ”命令检索有效的存储策略。
如果数据节点存储位置的默认存储类型没有显式标记的存储类型,则它将为DISK。
在已经存在的文件/目录上设置新的存储策略将更改命名空间中的策略,但是不会在存储介质之间物理移动块。以下2个选项将允许用户根据新策略集移动块。因此,一旦用户更改/设置了文件/目录上的新策略,用户还应执行以下选项之一以实现所需的数据移动。请注意,两个选项不能同时运行。
当用户更改文件/目录上的存储策略时,用户可以调用HdfsAdmin API 满足StoragePolicy()以按照新策略集移动块。在namenode外部运行的SPS工具会定期扫描新策略集和放置的物理块之间的存储不匹配。这将仅跟踪用户为其调用的segmentStoragePolicy的文件/目录。如果SPS标识了要为文件移动的某些块,则它将计划将块移动任务调度到数据节点。如果运动中有任何故障,SPS将通过发送新的块运动任务来重新尝试。
SPS可以作为Namenode外部的外部服务启用,也可以动态禁用,而无需重新启动Namenode。
可以在Storage Policy Satisfier(SPS)(HDFS-10285)上找到详细的设计文档。
注意:当用户在目录上调用令人满意的StoragePolicy() API时,SPS将扫描所有子目录并考虑所有文件来满足策略。
HdfsAdmin API:公共无效的满意度StoragePolicy(最终路径路径)引发IOException
参数:
路径 | 需要块存储移动的路径。 |
添加了新的数据迁移工具,用于归档数据。该工具类似于Balancer。它会定期扫描HDFS中的文件,以检查块放置是否满足存储策略。对于违反存储策略的块,它将副本移动到其他存储类型,以满足存储策略要求。请注意,只要有可能,它总是尝试在同一节点内移动块副本。如果这不可能(例如,当一个节点没有目标存储类型时),它将通过网络将块副本复制到另一个节点。
命令:
hdfs移动器[-p <文件/目录> | -f <本地文件名>]
参数:
-p <文件/目录> | 指定以空格分隔的要迁移的HDFS文件/目录列表。 |
-f <本地文件> | 指定一个本地文件,其中包含要迁移的HDFS文件/目录的列表。 |
请注意,当同时省略-p和-f选项时,默认路径为根目录。
将存储策略设置为文件或目录。
命令:
hdfs storagepolicies -setStoragePolicy -path <路径> -policy <策略>
参数:
-path <路径> | 指向目录或文件的路径。 |
-policy <策略> | 存储策略的名称。 |
将存储策略取消设置为文件或目录。使用unset命令后,将应用最近的祖先的存储策略,并且如果没有关于任何祖先的策略,则将应用默认存储策略。
命令:
hdfs storagepolicies -unsetStoragePolicy -path <路径>
参数:
-path <路径> | 指向目录或文件的路径。 |
获取文件或目录的存储策略。
命令:
hdfs storagepolicies -getStoragePolicy -path <路径>
参数:
-path <路径> | 指向目录或文件的路径。 |
根据文件/目录的当前存储策略调度块移动。
命令:
hdfs storagepolicies -satisfyStoragePolicy -path <路径>
参数:
-path <路径> | 指向目录或文件的路径。 |
如果管理员想在Namenode运行时切换SPS功能的模式,则他/她首先需要为配置文件(hdfs-site)中的配置项dfs.storage.policy.satisfier.mode更新所需的值(外部或无)。 xml),然后运行以下Namenode reconfig命令
hdfs dfsadmin -reconfig namenode 主机:ipc_port开始