更新时间:2024-11-29 GMT+08:00

Hive数据库导入导出

操作场景

在大数据应用场景中,往往存在将Hive中的数据库及数据库下的所有表迁移到另一个集群上,使用Hive的导出导入数据库命令可以实现完整数据库的迁移。

Hive数据库导入导出功能目前不支持对加密表、HBase外部表、Hudi表、视图表及物化视图表进行导入导出操作。

前提条件

  • 如果是跨集群对Hive数据库进行导入导出,且目标集群和源集群都开启了Kerberos认证,需配置跨集群互信。
  • 若使用Dump/Load命令导入导出其他用户创建的数据库,需要授予用户对应数据库的权限:
    • 集群未启用Ranger鉴权,需登录FusionInsight Manager授予该用户所属角色管理员权限,详细操作请参考创建Hive角色章节。
    • 集群启用了Ranger鉴权,需参考添加Hive的Ranger访问权限策略章节授予用户对应数据库的Repl Dump/Load操作权限。
  • 还需在源端集群和目标集群启用集群间拷贝功能。
  • 需配置源端集群访问目标集群HDFS服务地址参数。

    登录源端集群的FusionInsight Manager,选择“集群 > 服务 > Hive > 配置”,搜索“hdfs.site.customized.configs”,新增自定义参数“dfs.namenode.rpc-address.haclusterX”,值为“目标集群的NameNode实例主节点业务IP:RPC端口”;新增自定义参数“dfs.namenode.rpc-address.haclusterX1”,值为“目标集群的NameNode实例备节点的业务IP:RPC端口”,NameNode RPC端口默认为“25000”。保存配置后需滚动重启Hive服务。

操作步骤

  1. 以Hive客户端安装用户登录源端集群安装客户端的节点。
  2. 执行以下命令,切换到客户端安装目录,例如安装目录为“/opt/client”,请用户根据实际情况修改。

    cd /opt/client

  3. 执行以下命令配置环境变量。

    source bigdata_env

  4. 若集群开启了Kerberos认证,执行以下命令认证用户,否则跳过此步骤。

    kinit Hive业务用户

  5. 执行以下命令登录Hive客户端。

    beeline

  6. 执行以下命令创建数据库“dump_db”。

    create database dump_db;

  7. 执行以下命令切换到“dump_db”数据库。

    use dump_db;

  8. 执行以下命令在“dump_db”中创建表“test”。

    create table test(id int);

  9. 执行以下命令向表“test”中插入数据。

    insert into test values(123);

  10. 执行以下命令将数据库“dump_db”设置为复制策略的源。

    alter database dump_db set dbproperties ('repl.source.for'='replpolicy1');

    • 执行alter命令修改数据库属性时,用户需要对该数据库拥有对应权限。权限设置方式如下:
      • 集群未启用Ranger鉴权,需登录FusionInsight Manager授予该用户所属角色管理员权限,详细操作请参考创建Hive角色章节。
      • 集群启用了Ranger鉴权,需参考添加Hive的Ranger访问权限策略章节授予用户对应数据库的Repl Dump/Load操作权限。
    • 删除设置了复制策略源的数据库时,需要先将该数据库的复制策略源设置为空,再对数据库执行删除操作,否则无法删除。将数据库复制策略源设置为空的命令如下:

      alter database dump_db set dbproperties ('repl.source.for'='');

  11. 执行以下命令将“dump_db”导出到目标集群的“/user/hive/test”目录下。

    repl dump dump_db with ('hive.repl.rootdir'='hdfs://haclusterX/user/hive/test');

    例如,执行结果为:

    • haclusterX”为新增的自定义参数“dfs.namenode.rpc-address.haclusterX”中的“haclusterX”。
    • 指定导出目录时需要确保当前用户对该目录拥有读写权限。

  12. 以Hive客户端安装用户登录目标集群安装客户端的节点,并执行2-5
  13. 执行以下命令将“/user/hive/test”目录下的“dump_db”数据库的数据导入到“load_db”数据库中。

    repl load load_db from 'hdfs://haclusterX/user/hive/test/XXX';

    • hdfs://haclusterX/user/hive/test/XXX”需替换为11执行结果中“dump_dir”列的具体路径。
    • 通过repl load导入数据库,指定数据库库名称时需要注意以下情况:
      • 指定的数据库不存在,在导入的过程中会创建对应的数据库;
      • 指定的数据库已存在,且该数据库的“hive.repl.ckpt.key”属性值与导入的路径一致,则跳过导入操作。
      • 指定的数据库已存在,但是该数据库下不存在任何表和functions,导入的过程中只将源数据库下的表导入到当前数据库中;如果该数据库下存在表或functions会导入失败。