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

了解如何使用脚本操作,将存储帐户中的 Hive 表复制到 HDInsight。 当迁移到 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 在 HDInsight 4.0 上从 Hive 2.2.0 开始支持 SHOW VIEWS 命令。 将 SHOW CREATE TABLE 用于视图定义。 对于更早版本的 Hive,请查询元存储 SQL DB 以显示视图。
  • 对于 Materialized Views,请使用命令 SHOW MATERIALIZED VIEWSDESCRIBE FORMATTEDCREATE MATERIALIZED VIEW。 有关详细信息,请参阅具体化视图
  • 对于 Constraints(在 HDInsight 4.0 上从 Hive 2.1.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 导出和导入脚本的片段,手动清理每个迁移的数据库或表后面的导出路径。

后续步骤