JindoTable SDK模式提供archiveTable和unarchiveTable命令,可以在不依赖Jindo Namespace Service的情况下进行归档和解冻等操作。本文为您介绍archiveTable和unarchiveTable命令的使用方法。

前提条件

  • 本地安装了Java JDK 8。
  • 已创建集群,详情请参见创建集群
  • 待归档的数据必须是表数据(可以是分区表或非分区表),且已经位于阿里云对象存储OSS。

背景信息

JindoTable原有archive和unarchive命令可以对OSS上的表或分区进行归档或解冻等操作,但archive和unarchive命令依赖SmartData组件Jindo Namespace Service。现在新增的archiveTable和unarchiveTable命令,可以在不依赖Jindo Namespace Service的情况下进行归档和解冻等操作。

新增的archiveTable和unarchiveTable命令与原有archive和unarchive命令的主要区别为:
  • 可以在未部署SmartData服务的集群上执行。例如,非EMR的用户自建集群。
  • 可以通过传入过滤参数,一次应用于大量分区,多线程执行。如果本地多线程仍不能满足需求,还可以启动MapReduce任务在整个集群上执行。

原有archive和unarchive命令的详细信息,请参见JindoTable使用说明

使用限制

EMR-3.36.0及后续版本或EMR-5.2.0及后续版本的集群,支持新增的archiveTable和unarchiveTable命令。

archiveTable命令

archiveTable命令可以对OSS上的表或分区进行归档。

  1. 通过SSH方式登录集群,详情请参见登录集群
  2. 执行以下命令,获取帮助信息。
    jindo table -help archiveTable
    返回如下信息。
      <dbName.tableName>      The table to archive.
      -a/-i                   storage policy, -a for Archive and -i for IA
                              (Infrequent Access).
      <condition>/-fullTable  A filter condition to determine which partitions should
                              be archived, supporting common operators (like '>'),
                              while -fullTable means that all partitions (or a whole
                              un-partitioned table) should be archived. One but only
                              one option must be specified among -c "<condition>" and
                              -fullTable.
      <before days>           Optional, saying that table/partitions should be
                              archived only when they are created (not updated or
                              modified) more than some days before from now.
      <parallelism>           The maximum concurrency when archiving partitions, 1 by
                              default.
      -mr/-mapReduce          Archive table/partitions using cluster-level MapReduce
                              job instead of local-level multi-thread.
      -e/-explain             If present, the command would not really archive data,
                              but only prints the table/partitions that would be
                              archived for given conditions.
            <working directory>: A directory to locate map-reduce temp files. Must not be a
      local file system directory. 'hdfs:///tmp/<current user>/jindotable-policy/' by
      default.
    
      <log directory>  A directory to locate log files, '/tmp/<current user>/' by
                       default.
                                
    archiveTable命令语句格式如下所示。
    -archiveTable -t <dbName.tableName> \
    -a/-i \
    [-c "<condition>" | -fullTable] \
    [-b/-before <before days>] \
    [-p/-parallel <parallelism>] \
    [-mr/-mapReduce] \
    [-e/-explain] \
    [-w/-workingDir <working directory>] \
    [-l/-logDir <log directory>]
    参数 描述 是否必选参数
    -t <dbName.tableName> 待归档的表名称,格式为数据库名.表名

    数据库和表名之间以半角句号(.)分隔。表可以是分区表或非分区表。

    -a/-i 目标存储方式。支持如下方式:
    • -a:归档(Archive)存储。
    • -i:低频 (Infrequent Access,IA)存储。

    如果使用-i即表示低频存储,会跳过已经处于归档存储的文件。

    -c "<condition>" | -fullTable -fullTable-c "<condition>"只需提供一个,即要么指定-c "<condition>",要么指定-fullTable
    • 指定-fullTable时,则为移动整表,既可以是非分区表也可以是分区表。
    • 指定-c "<condition>"时,则提供了一个过滤条件,用来选择希望移动的分区,支持常见运算符,例如大于号(>)。

      例如,数据类型为String的分区ds,希望分区名大于 'd',则代码为-c " ds > 'd' "

    -b/before <before days> 只有创建时间距离现在超过一定天数的表或分区才会被归档。
    -p/-parallel <parallelism> 归档操作的并行度。
    -mr/-mapReduce 使用Hadoop MapReduce而非本地多线程来归档数据。
    -e/-explain 如果出现该选项,则为解释(explain)模式,只会显示待移动的分区列表,而不会真正移动数据。
    -w/-workingDir 只在MapReduce作业时使用,为MapReduce作业的工作目录。必须有读写权限,工作目录可以非空(作业执行过程中会创建临时文件,执行完毕会清理临时文件)。
    -l/-logDir <log directory> 指定Log文件的目录。

unarchiveTable命令

unarchiveTable命令与archiveTable命令格式基本一致,但效果相反。unarchiveTable命令可以对OSS上的表或分区进行解冻。

  1. 通过SSH方式登录集群,详情请参见登录集群
  2. 执行以下命令,获取帮助信息。
    jindo table -help unarchiveTable
    返回如下信息。
      <dbName.tableName>      The table to unarchive.
      -i                      unarchive to IA (Infrequent Access).
      -o                      restore to make archived data accessible temporarily.
      <condition>/-fullTable  A filter condition to determine which partitions should
                              be unarchived, supporting common operators (like '>'),
                              while -fullTable means that all partitions (or a whole
                              un-partitioned table) should be unarchived. One but
                              only one option must be specified among -c
                              "<condition>" and -fullTable.
      <before days>           Optional, saying that table/partitions should be
                              unarchived only when they are created (not updated or
                              modified) more than some days before from now.
      <parallelism>           The maximum concurrency when unarchiving partitions, 1
                              by default.
      -mr/-mapReduce          Unarchive table/partitions using cluster-level
                              MapReduce job instead of local-level multi-thread.
      -e/-explain             If present, the command would not really unarchive
                              data, but only prints the table/partitions that would
                              be unarchived for given conditions.
            <working directory>: A directory to locate map-reduce temp files. Must not be a
      local file system directory. 'hdfs:///tmp/<current user>/jindotable-policy/' by
      default.
    
      <log directory>  A directory to locate log files, '/tmp/<current user>/' by
                       default.
    unarchiveTable命令语句格式如下所示。
    -unarchiveTable -t <dbName.tableName> \
    [-i/-o] \
    [-c "<condition>" | -fullTable] \
    [-b/-before <before days>] \
    [-p/-parallel <parallelism>] \
    [-mr/-mapReduce] \
    [-e/-explain] \
    [-w/-workingDir <working directory>] \
    [-l/-logDir <log directory>]

unarchiveTable命令与archiveTable命令参数只有一处区别,即没有必选参数-a/-i,而被可选参数-i/-o替代。

可选参数 -i/-o描述如下:
  • 如果不指定-i/-o参数,则转换存储格式为标准(Standard)存储。
  • 如果指定-i参数,则转换存储格式为低频(Infrequent Access,IA)存储,原本为标准存储的文件被跳过。
  • 如果指定-o参数,则仅做解冻(Restore)操作。原本为标准存储或低频存储的文件均被跳过。已经处于解冻状态的文件也会被跳过,即不会重复解冻。