Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

介绍

档案存储是一种解决方案,可将不断增长的存储容量与计算容量分离。具有更高密度和价格便宜,计算能力低的存储节点正变得可用,并且可以用作集群中的冷存储。根据策略,热数据可以转移到冷数据。将更多节点添加到冷存储可以独立于群集中的计算容量来扩展存储。

异构存储和档案存储提供的框架将HDFS体系结构概括为包括其他类型的存储介质,包括SSD内存。用户可以选择将其数据存储在SSD或内存中以获得更好的性能。

存储类型和存储策略

存储类型:ARCHIVE,DISK,SSD和RAM_DISK

异构存储(HDFS-2832)的第一阶段将数据节点存储模型从单个存储(可能对应于多个物理存储介质更改为存储的集合,每个存储都对应于一个物理存储介质。它还添加了存储类型DISK和SSD的概念,其中DISK是默认存储类型。

添加了一种新的存储类型ARCHIVE,它具有很高的存储密度(PB级存储),但计算能力却很小,可用于支持归档存储。

添加了另一个新的存储类型RAM_DISK,以支持在内存中写入单个副本文件。

存储策略:热,热,冷,All_SSD,One_SSD,Lazy_Persist和提供

引入了存储策略的新概念,以允许根据存储策略将文件存储在不同的存储类型中。

我们有以下存储策略:

  • -用于存储和计算。流行且仍用于处理的数据将保留在此策略中。块热时,所有副本都存储在DISK中。
  • -仅适用于计算量有限的存储。不再使用的数据或需要归档的数据从热存储移动到冷存储。当块处于冷状态时,所有副本都存储在ARCHIVE中。
  • 温暖 -部分热和部分冷。块热时,其某些副本存储在DISK中,其余副本存储在ARCHIVE中。
  • All_SSD-用于将所有副本存储在SSD中。
  • One_SSD-用于将副本之一存储在SSD中。其余副本存储在DISK中。
  • Lazy_Persist-用于在内存中写入具有单个副本的块。首先将副本写入RAM_DISK,然后将其延迟保存在DISK中。
  • 提供 -用于在HDFS外部存储数据。另请参阅HDFS提供的存储

更正式地说,存储策略由以下字段组成:

  1. 政策编号
  2. 政策名称
  3. 块放置的存储类型列表
  4. 用于文件创建的后备存储类型列表
  5. 用于复制的后备存储类型列表

当有足够的空间时,将根据#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 ”命令指定存储策略。文件或目录的有效存储策略由以下规则解决。

  1. 如果使用存储策略指定了文件或目录,请返回它。

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

可以通过“ storagepolicies -getStoragePolicy ”命令检索有效的存储策略。

组态

  • dfs.storage.policy.enabled-用于启用/禁用存储策略功能。默认值为true
  • dfs.datanode.data.dir-在每个数据节点上,以逗号分隔的存储位置应使用其存储类型进行标记。这允许存储策略根据策略将块放置在不同的存储类型上。例如:
    1. DISK上的数据节点存储位置/ grid / dn / disk0应该配置为[DISK] file:/// grid / dn / disk0
    2. 可以使用[SSD] file:/// grid / dn / ssd0配置SSD上的datanode存储位置/ grid / dn / ssd0
    3. ARCHIVE上的数据节点存储位置/ grid / dn / archive0应该配置为[ARCHIVE] file:/// grid / dn / archive0
    4. 应使用[RAM_DISK] file:/// grid / dn / ram0配置RAM_DISK上的数据节点存储位置/ grid / dn / ram0

    如果数据节点存储位置的默认存储类型没有显式标记的存储类型,则它将为DISK。

基于存储策略的数据移动

在已经存在的文件/目录上设置新的存储策略将更改命名空间中的策略,但是不会在存储介质之间物理移动块。以下2个选项将允许用户根据新策略集移动块。因此,一旦用户更改/设置了文件/目录上的新策略,用户还应执行以下选项之一以实现所需的数据移动。请注意,两个选项不能同时运行。

小号 torage P olicy 小号 atisfier(SPS)

当用户更改文件/目录上的存储策略时,用户可以调用HdfsAdmin API 满足StoragePolicy()以按照新策略集移动块。在namenode外部运行的SPS工具会定期扫描新策略集和放置的物理块之间的存储不匹配。这将仅跟踪用户为其调用的segmentStoragePolicy的文件/目录。如果SPS标识了要为文件移动的某些块,则它将计划将块移动任务调度到数据节点。如果运动中有任何故障,SPS将通过发送新的块运动任务来重新尝试。

SPS可以作为Namenode外部的外部服务启用,也可以动态禁用,而无需重新启动Namenode。

可以在Storage Policy Satisfier(SPS)(HDFS-10285)上找到详细的设计文档。

  • 注意:当用户在目录上调用令人满意的StoragePolicy() API时,SPS将扫描所有子目录并考虑所有文件来满足策略。

  • HdfsAdmin API:公共无效的满意度StoragePolicy(最终路径路径)引发IOException

  • 参数:

路径 需要块存储移动的路径。

配置:

  • dfs.storage.policy.satisfier.mode-用于启用NN外部的外部服务或禁用SPS。支持以下字符串值-external。配置外部值表示启用了SPS,没有一个禁用。默认值为none

  • dfs.storage.policy.satisfier.recheck.timeout.millis-从Datanodes重新检查已处理块存储移动命令的超时。

  • dfs.storage.policy.satisfier.self.retry.timeout.millis-如果在此配置的超时中未从Datanode报告任何块移动结果,则重试超时。

Mover-一种新的数据迁移工具

添加了新的数据迁移工具,用于归档数据。该工具类似于Balancer。它会定期扫描HDFS中的文件,以检查块放置是否满足存储策略。对于违反存储策略的块,它将副本移动到其他存储类型,以满足存储策略要求。请注意,只要有可能,它总是尝试在同一节点内移动块副本。如果这不可能(例如,当一个节点没有目标存储类型时),它将通过网络将块副本复制到另一个节点。

  • 命令:

    hdfs移动器[-p <文件/目录> | -f <本地文件名>]
    
  • 参数:

-p <文件/目录> 指定以空格分隔的要迁移的HDFS文件/目录列表。
-f <本地文件> 指定一个本地文件,其中包含要迁移的HDFS文件/目录的列表。

请注意,当同时省略-p和-f选项时,默认路径为根目录。

管理员注意事项:

StoragePolicySatisfierMover工具无法同时运行。如果Mover实例已经触发并正在运行,则启动时将禁用SPS。在这种情况下,管理员应确保Mover执行完成,然后再次启用外部SPS服务。同样,如果已经启用SPS,则无法运行Mover。如果管理员希望明确运行Mover工具,则他/她应确保先禁用SPS,然后再运行Mover。请查看命令部分以了解如何在NN外部启用外部服务或动态禁用SPS。

存储策略命令

列出存储策略

列出所有存储策略。

  • 命令:

    hdfs storagepolicies -listPolicies
    
  • 参数:无。

设置存储策略

将存储策略设置为文件或目录。

  • 命令:

    hdfs storagepolicies -setStoragePolicy -path <路径> -policy <策略>
    
  • 参数:

-path <路径> 指向目录或文件的路径。
-policy <策略> 存储策略的名称。

未设定的储存政策

将存储策略取消设置为文件或目录。使用unset命令后,将应用最近的祖先的存储策略,并且如果没有关于任何祖先的策略,则将应用默认存储策略。

  • 命令:

    hdfs storagepolicies -unsetStoragePolicy -path <路径>
    
  • 参数:

-path <路径> 指向目录或文件的路径。

获取存储策略

获取文件或目录的存储策略。

  • 命令:

    hdfs storagepolicies -getStoragePolicy -path <路径>
    
  • 参数:

-path <路径> 指向目录或文件的路径。

满意的存储策略

根据文件/目录的当前存储策略调度块移动。

  • 命令:

    hdfs storagepolicies -satisfyStoragePolicy -path <路径>
    
  • 参数:

-path <路径> 指向目录或文件的路径。

在NN外部启用外部服务或在不重新启动Namenode的情况下禁用SPS

如果管理员想在Namenode运行时切换SPS功能的模式,则他/她首先需要为配置文件(hdfs-site)中的配置项dfs.storage.policy.satisfier.mode更新所需的值(外部或无)。 xml),然后运行以下Namenode reconfig命令

启动外部SPS服务。

如果管理员要启动外部sps,则首先需要在配置文件(hdfs-site.xml)中使用外部值配置属性dfs.storage.policy.satisfier.mode,然后运行Namenode reconfig命令。请确保配置文件中的网络拓扑配置与namenode相同,此群集将用于匹配目标节点。之后,使用以下命令启动外部sps服务

  • 命令:

    hdfs –daemon启动sps