更新时间:2024-07-24 GMT+08:00

配置HDFS冷热数据迁移

配置场景

冷热数据迁移工具根据配置的策略移动HDFS文件。配置策略是条件或非条件规则的集合。如果规则匹配文件集,则该工具将对该文件执行一组行为操作。

冷热数据迁移工具支持以下规则和行为。

  • 迁移规则:
    • 根据文件的最后访问时间迁移数据
    • 根据年龄时间迁移数据(修改时间)
    • 无条件迁移数据
    表1 规则条件标签

    条件标签

    描述

    <age operator="lt">

    定义年龄/修改时间的条件。

    <atime operator="gt">

    定义访问时间的条件。

    对于手动迁移规则,不需要条件。

  • 行为列表:
    • 将存储策略设置为给定的数据层名称
    • 迁移到其他文件夹
    • 为文件设置新的副本数
    • 删除文件
    • 设置节点标签(NodeLabel)
    表2 行为类型

    行为类型

    描述

    所需参数

    MARK

    为确定数据的冷热度并设置相应的数据存储策略。

    <param>

    <name>targettier</name>

    <value>STORAGE_POLICY</value>

    <param>

    MOVE

    为设置数据存储策略或NodeLabel并调用HDFS Mover工具。

    <param>

    <name>targettier</name>

    <value>STORAGE_POLICY</value>

    <param>

    <param>

    <name>targetnodelabels</name>

    <value>SOME_EXPRESSION</value>

    <param>

    说明:

    用户可以配置其中任一参数或两者都配置。

    SET_REPL

    为文件设置新的副本数。

    <param>

    <name>replcount</name>

    <value>INTEGER</value>

    <param>

    MOVE_TO_FOLDER

    将文件移动到目标文件夹。如果“overwrite”参数为“true”,则目标路径将被覆盖。

    <param>

    <name>target</name>

    <value>PATH</value>

    <param>

    <param>

    <name>overwrite</name>

    <value>true/false</value>

    <param>

    说明:

    “overwrite”是可选参数,如果未配置,则默认值为“false”

    DELETE

    删除文件。

    NA

配置描述

必须定期调用迁移工具,并需要在客户端的“hdfs-site.xml”文件中进行以下配置。

表3 参数描述

参数

描述

默认值

dfs.auto-data-movement.policy.class

用于指定默认的数据迁移策略。

说明:

当前只支持DefaultDataMovementPolicy。

com.xxx.hadoop.hdfs.datamovement.policy.DefaultDataMovementPolicy

dfs.auto.data.mover.id

冷热数据迁移输出(行为状态)文件的名称。

当前系统时间(毫秒)

dfs.auto.data.mover.output.dir

冷热数据迁移输出在HDFS中的目录名称。迁移工具将在此处写入行为状态文件。

/system/datamovement

DefaultDataMovementPolicy拥有配置文件“default-datamovement-policy.xml”。用户需要定义所有基于age/accessTime的规则和在此文件中采取的行为操作,此文件必须存储在客户端的classpath中。

如下为“default-datamovement-policy.xml”配置文件的示例:

<policies>
  <policy>
    <fileset>
      <file>
        <name>/opt/data/1.txt</name>
      </file>
      <file>
        <name>/opt/data/*/subpath/</name>
        <excludes>
          <name>/opt/data/some/subpath/sub1</name>
        </excludes>
      </file>
    </fileset>
    <rules>
      <rule>
        <age>2w</age>
        <action>
          <type>MOVE</type>
          <params>
            <param>
              <name>targettier</name>
              <value>HOT</value>
            </param>
          </params>
        </action>
      </rule>
    </rules>
  </policy>
</policies>

在策略,规则和行为操作中使用的标签中,可以添加其他属性,例如“name”可用于管理用户界面(例如:Hue UI)和工具输入xml之间的映射。

示例: <policy name="Manage_File1">

标签(Tag)说明如下:

表4 配置标签(Tag)描述

标签(Tag)名称

描述

是否可重复使用

<policy>

定义单一策略。

  • idempotent属性:指定当策略中有多个规则时,如果满足当前规则,是否检查下一个规则。

    示例:<policy name ="policy2" idempotent ="true">。

    其默认值为“true”,表示其中的规则和行为操作是幂等的,可以继续检查下一个规则。如果值为“false”,则将在当前规则处停止评估。

  • hours_allowed属性:配置是否根据系统时间执行策略评估。 hours_allowed的值是以逗号分隔的数字,范围从0到23,表示系统时间。

    示例:<policy name ="policy1" hours_allowed ="2-6,13-14">

    如果当前系统时间在配置的范围内,则继续评估。否则,将跳过评估。

    说明:

    在输入XML中,每个文件仅支持一个策略。因此,文件中的所有规则必须由一个策略标签覆盖。

Yes

<fileset>

为每个策略定义一组文件/文件夹。

No (在policy标签内)

<file>

定义文件和/或文件夹在<file>标签内被配置一个或者多个<name>标签。文件/文件夹名支持POSIX globs配置。

Yes (在fileset标签内)

<excludes>

在<file>标签内定义该标签,该标签下可以包含多个<name>标签,在<file>标签中配置的文件或文件夹范围下,<name>标签所包含的文件或文件夹将会被排除。文件或文件夹名支持POSIX globs配置。

No (在fileset标签内)

<rules>

针对策略定义多个规则。

No (在policy标签内)

<rule>

定义单一规则。

Yes (在rules标签内)

<age>or<atime>

定义在<fileset>中定义的文件的age/accesstime。策略将匹配该age。age可以用[num]y[num]m[num]w[num]d[num]h的格式表示。其中num表示数字。

其中字母的意思如下:

* y--年(一年是365天)。

* m--月(一个月是30天)。

* w--周(一周是7天)。

* d--天。

* h--小时。

可以单独使用年,月,周,天或小时,也可以将时间组合。比如,1y2d表示1年零2天或者367天。

如果没有单位(即数字后面没有任何上述字母),默认单位为天。

说明:

用户可以在<age>和<atime>标签中配置“gt”(greater)和“lt”(less),默认运算符为“gt”。

示例:<age operator="lt">

No (在rule标签内)

<action>

如果规则匹配,这个标签定义了要执行的action。

No (在rule标签内)

<type>

定义了action类型。当前支持的action类型是MOVE和MARK。

No (在action标签内)

<params>

定义与每个action相关的参数。

No (在action标签内)

<param>

定义单个使用<name>和<value>标签的name-value格式参数。

对于MARK和MOVE,只支持参数名“targettier”。该参数表示如果满足age规则,则指定数据存储策略。

如果多个param中具有相同name的参数,则采用第一个参数值。

对于MARK,支持的“targettier”参数值为“ALL_SSD”“ONE_SSD”“HOT”“WARM”“COLD”

对于MOVE,支持的“targettier”参数值为“ALL_SSD”“ONE_SSD”“HOT”“WARM”“COLD”

Yes (在params标签内).

对于在<file>标签下的文件/文件夹使用FileSystem#globStatus API,对于其他的使用GlobPattern类(被GlobFilter使用)。参照支持的API的细节。例如,对于globStatus,“/opt/hadoop/*”将匹配“/opt/hadoop”文件夹下的一切。“/opt/*/hadoop”将匹配/“opt”目录的子目录下的所有hadoop文件夹。

对于globStatus,分别匹配每个路径组件的glob模式,而对于其他的,直接匹配glob模式。

MRS 3.2.0之前版本:https://hadoop.apache.org/docs/r3.1.1/api/org/apache/hadoop/fs/FileSystem.html#globStatus(org.apache.hadoop.fs.Path)

MRS 3.2.0及之后版本:https://hadoop.apache.org/docs/r3.3.1/api/org/apache/hadoop/fs/FileSystem.html#globStatus(org.apache.hadoop.fs.Path)

行为操作示例

  • MARK
    <action>
      <type>MARK</type>
      <params>
        <param>
          <name>targettier</name>
          <value>HOT</value>
        </param>
      </params>
    </action>
  • MOVE
    <action>
      <type>MOVE</type>
      <params>
        <param>
          <name>targettier</name>
          <value>HOT</value>
        </param>
        <param>
          <name>targetnodelabels</name>
          <value>SOME_EXPRESSION</value>
        </param>
      </params>
    </action>
  • SET_REPL
    <action>
      <type>SET_REPL</type>
      <params>
        <param>
          <name>replcount</name>
          <value>5</value>
        </param>
      </params>
    </action>
  • MOVE_TO_FOLDER
    <action>
      <type>MOVE_TO_FOLDER</type>
      <params>
        <param>
          <name>target</name>
          <value>path</value>
        </param>
        <param>
          <name>overwrite</name>
          <value>true</value>
        </param>
    
      </params>
    </action>

    MOVE_TO_FOLDER操作只是将文件路径更改为目标文件夹,不会更改块位置。如果想要移动块,则需要配置一个独立的move策略。

  • DELETE
    <action>
      <type>DELETE</type>
    </action>
  • 在编写xml文件时,用户应该注意行为操作的配置和顺序。冷热数据迁移工具按照输入xml中给定的顺序执行规则。
  • 如果只希望运行基于atime/age的一个规则,则按照时间逆序排列,且将idempotent属性设置为false。
  • 如果为文件集配置删除操作,则在删除操作后不能再配置其他规则。
  • 支持使用"-fs"选项,用于指定客户端默认的文件系统地址。

审计日志

冷热数据迁移工具支持以下操作的审计日志。

  • 工具启动状态
  • 行为类型及参数详细信息和状态
  • 工具完成状态

对于启用审计日志工具,在“<HADOOP_CONF_DIR>/log4j.property”文件中添加以下属性。

autodatatool.logger=INFO, ADMTRFA
autodatatool.log.file=HDFSAutoDataMovementTool.audit
log4j.logger.com.xxx.hadoop.hdfs.datamovement.HDFSAutoDataMovementTool.audit=${autodatatool.logger}
log4j.additivity.com.xxx.hadoop.hdfs.datamovement.HDFSAutoDataMovementTool-audit=false
log4j.appender.ADMTRFA=org.apache.log4j.RollingFileAppender
log4j.appender.ADMTRFA.File=${hadoop.log.dir}/${autodatatool.log.file}
log4j.appender.ADMTRFA.layout=org.apache.log4j.PatternLayout
log4j.appender.ADMTRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
log4j.appender.ADMTRFA.MaxBackupIndex=10
log4j.appender.ADMTRFA.MaxFileSize=64MB

具体请参考“<HADOOP_CONF_DIR>/log4j_autodata_movment_template.properties”文件。