Hive表/分区数据导入导出
操作场景
在大数据应用场景中,往往存在将Hive中的数据表迁移到另一个集群上,使用Hive的导入导出命令可以实现表级别数据迁移,即可使用Export命令将源集群的Hive表导出到目标集群的HDFS中,再在目标集群使用Import命令将导出的数据导入到相应的Hive表中。
Hive表导入导出功能目前不支持对加密表、HBase外部表、Hudi表、视图表、物化视图表进行导入导出操作。
前提条件
- 如果是跨集群对Hive表或分区数据进行导入导出,且目标集群和源集群都开启了Kerberos认证,需配置跨集群互信。
- 若使用Import/Export命令导入导出其他用户创建的表或分区,需要授予用户对应表的权限:
- 集群未启用Ranger鉴权,需登录FusionInsight Manager授予该用户所属角色对应表的“Select授权”权限,详细操作请参考配置Hive表、列或数据库的权限章节。
- 集群启用了Ranger鉴权,需参考添加Hive的Ranger访问权限策略章节授予用户对应表的Import/Export操作权限。
- 还需在源端集群和目标集群启用集群间拷贝功能。
- 需配置源端集群访问目标集群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服务。
操作步骤
- 以Hive客户端安装用户登录源端集群安装客户端的节点。
- 执行以下命令,切换到客户端安装目录,例如安装目录为“/opt/client”,请用户根据实际情况修改。
cd /opt/client
- 执行以下命令配置环境变量。
source bigdata_env
- 若集群开启了Kerberos认证,执行以下命令认证用户,否则跳过此步骤。
kinit Hive业务用户
- 执行以下命令登录源端集群的Hive客户端。
beeline
- 执行以下命令创建表“export_test”。
create table export_test(id int) ;
- 执行以下命令向表“export_test”中插入数据。
insert into export_test values(123);
- 在目标集群重复执行1-4,并执行以下命令创建存放表“export_test”导出后的HDFS路径。
dfs -mkdir /tmp/export
- 执行以下命令登录目标集群的Hive客户端。
beeline
- 导入导出表“export_test”。
使用Hive Import/Export对表数据迁移时,支持以下几种场景,可以根据实际情况选择合适的导入导出方式。
- 场景一:简单导出导入
- 场景二 :在导入时重命名表
- 场景三:导出分区数据并导入
- 场景四:导出表数据并且将该数据导入到分区中
- 场景五:导入表数据时指定表的Location
- 场景六:导入表数据为外部表
导出表/分区数据时,存放表/分区数据的HDFS路径需提前创建,且该目录为空,否则导出失败。
导出分区时,导出的表必须为分区表,且不支持导出同一个分区字段的多个分区值的数据;导入到表中分区时导入的表必须是分区表。
导入数据时需注意:- 使用import from '/tmp/export';命令导入表是没有指定表名的场景,该场景导入的数据会保存到与源表名相同的表路径下,需注意以下两点:
- 如果目标集群上不存在与源集群上同名的表,在导入表的过程中会创建该表。
- 如果目标集群上已存在与源集群上同名的表,该表对应的HDFS目录下必须为空,否则导入失败。
- 使用import external table import_test from '/tmp/export';命令导入表会将导出的表导入到指定的表中,需注意以下两点:
- 如果目标集群上不存在与指定的表名相同的表,在导入表的过程中会创建该表。
- 如果目标集群上已存在与指定的表名相同的表,该表对应的HDFS目录下必须为空,否则导入失败。
“haclusterX”为新增的自定义参数“dfs.namenode.rpc-address.haclusterX”中的“haclusterX”