将 Hive 工作负荷迁移到 Azure 存储中的新帐户

了解如何使用脚本操作在 HDInsight 中跨存储帐户复制 Hive 表。 这适用于迁移到 Azure Data Lake Storage Gen2

若要在 HDInsight 4.0 上手动复制单个 Hive 表,请参阅 Hive 导出/导入

先决条件

  • 具有以下配置的 HDInsight 群集:

  • 可访问原始群集和新群集的存储帐户。 请参阅将其他存储帐户添加到 HDInsight,了解允许的辅助存储类型。

    以下是一些选项:

    • 将目标存储帐户添加到原始群集。
    • 将原始存储帐户添加到新群集。
    • 将中间存储帐户添加到原始群集和新群集。

工作原理

通过运行脚本操作将 Hive 表从原始群集导出到指定的 HDFS 目录。 请参阅将脚本操作应用到正在运行的群集

然后,在新群集上运行另一个脚本操作,以从 HDFS 目录导入 Hive 表。

该脚本将在新集群的默认文件系统中重新创建表。 本机表还将复制存储中的数据。 非本机表将仅按定义进行复制。 有关非本机表的详细信息,请参阅 Hive 存储处理程序

将保留 Hive 仓库目录之外的外部表路径。 会将其他表复制到目标群集的默认 Hive 路径。 请参阅 Hive 属性 hive.metastore.warehouse.external.dirhive.metastore.warehouse.dir

脚本不会保留目标群集中的自定义文件权限。

注意

本指南支持复制与 Hive 数据库、表和分区相关的元数据对象。 其他元数据对象必须手动重新创建。

  • 对于 Views,自 Hive 2.2.0 起,Hive 支持在 HDInsight 4.0 上运行 SHOW VIEWS 命令。 使用 SHOW CREATE TABLE 来定义视图。 对于 Hive 的早期版本,可以查询元存储 SQL DB 来显示视图。
  • 对于 Materialized Views,使用命令 SHOW MATERIALIZED VIEWSDESCRIBE FORMATTEDCREATE MATERIALIZED VIEW。 有关详细信息,请参阅具体化视图
  • 对于 Constraints,自 Hive 2.1.0 起,支持在 HDInsight 4.0 上使用 DESCRIBE EXTENDED 列出表的约束,使用 ALTER TABLE 添加约束。 有关详细信息,请参阅更改表约束

复制 Hive 表

  1. 将包含以下字段的“导出”脚本操作应用于原始群集。

    此操作将生成并执行中间 Hive 脚本。 脚本将保存到指定 <hdfs-export-path>

    此外,也可以使用 --run-script=false 自定义脚本,之后再手动执行它们。

    属性 Value
    Bash 脚本 URI https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/export-hive-data-v01.sh
    节点类型
    parameters <hdfs-export-path> --run-script
    usage: generate Hive export and import scripts and export Hive data to specified HDFS path
           [--run-script={true,false}]
           hdfs-export-path
    
    positional arguments:
    
        hdfs-export-path      remote HDFS directory to write export data to
    
    optional arguments:
        --run-script={true,false}
                            whether to execute the generated Hive export script
                            (default: true)
    
  2. 导出成功后,将包含以下字段的“导入”脚本操作应用于新群集。

    属性 Value
    Bash 脚本 URI https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/import-hive-data-v01.sh
    节点类型
    parameters <hdfs-export-path>
    usage: download Hive import script from specified HDFS path and execute it
           hdfs-export-path
    
    positional arguments:
    
      hdfs-export-path      remote HDFS directory to download Hive import script from
    
    

验证

下载脚本并在每个群集的主节点上以根用户身份 hive_contents.sh 运行它,然后比较输出文件 /tmp/hive_contents.out 的内容。 请参阅使用 SSH 连接到 HDInsight (Apache Hadoop)

清理其他存储使用量

完成存储迁移并验证后,可以删除指定 HDFS 导出路径中的数据。

可以选择使用 HDFS 命令 hdfs dfs -rm -R

选项:减少额外的存储使用量

由于 Hive,导出脚本操作可能导致存储使用量加倍。 但是,可以通过一次手动迁移一个数据库或表来限制额外的存储使用量。

  1. 指定 --run-script=false 可跳过执行生成的 Hive 脚本。 Hive 导出和导入脚本仍将保存到导出路径中。

  2. 对逐个数据库或表执行 Hive 导出和导入脚本的代码片段,在迁移每个数据库或表之后手动清理导出路径。

后续步骤