1.文档说明
在之前的文档《如何通过Hive跨集群迁移Kudu表》,通过Hive 进行跨集群迁移Kudu 表是一种效率较低但是非常通用的方式,本文主要讲述如何通过Kudu 自带的Kudu Command Line Tools 进行Kudu 表迁移。
- 测试环境
1.CDH5.16.1、未启用Kerberos、Kudu 1.7.0
2.CDP7.1.6 、启用Kerberos、Kudu 1.12.0
2.操作步骤
2.1 操作步骤
1、首先在源集群也就是CDH5.16.1,Kudu表所在的集群中,CM>Kudu>配置>搜索gflagfile>gflagfile的Kudu 服务高级配置代码段(安全阀)中配置添加子网信任配置,并滚动重启kudu生效
-trusted_subnets=0.0.0.0/0
2、 配置源集群的IP和主机名信息到目标集群中/etc/hosts
3、在CDP7.1.6集群中执行如下命令执行拷贝复制
kudu table copy 55.xxx.1.137:7051,xxx.14.1.138:7051,55.xxx.1.139:7051
impala::xxx_QUANT.DWD_INGESTION xxx-cdh01:7051
完成后检查
查看源集群表数据条数
目标集群中创建impala 关联表,然后查询验证,结果一致
[xx-cdh04:21000] xxx_quant> create database xxx_quant;
[xx-cdh04:21000] xxx_quant>
create EXTERNAL TABLE CMB_QUANT.DWD_INGESTION STORED AS KUDU TBLPROPERTIES ('kudu.master_addresses'=xx-cdh01', 'kudu.table_name'='impala::xxx_QUANT.DWD_INGESTION');
2.2用法和参数说明
用法:
kudu table copy <master_addresses> <table_name> <dest_master_addresses> [-nocreate_table] [-dst_table=<table>] [-num_threads=<threads>] [-predicates=<predicates>] [-tablets=<tablets>] [-write_type=<type>]
参数解释如下:
名称 | 描述 | 类型 | 默认 |
master_addresses | 以逗号分隔的源 Kudu 主机地址列表,其中每个地址的形式是"hostname:port",也可以使用集群名 | string | none |
table_name | 源表名称 | string | none |
dest_master_addresses | 以逗号分隔的目标 Kudu 主机地址列表,其中每个地址的形式是"hostname:port",也可以使用集群名 | string | none |
create_table (optional) | 如果目标表不存在,是否创建目标表。 | bool | TRUE |
dst_table (optional) | 将数据复制到的目标表的名称。如果为空字符串,则使用与源表相同的名称。 | string | none |
num_threads (optional) | 要运行的线程数。每个线程运行自己的KuduSession。 | int32 | 2 |
predicates (optional) | 支持三种类型的谓词,包括"Comparison", “InList” and “IsNull”。 | string | none |
tablets (optional) | 如果没有指定要检查的 Tablets (以逗号分隔的id列表),则检查所有的 Tablets。 | string | none |
write_type (optional) | 如何将数据复制到目标表。“insert”、"upsert"或空字符串。如果字符串为空,则不会复制数据(create_table为true时很有用)。 | string | inser |
2.3 常见问题
1、执行kudu table copy 出现Scanning failed Network error: Failed to resolve address for TS 62bdb42ae7554761acb8d6aea005cefa: unable to resolve address for xxx 异常
解决办法:该问题由于无法解析源集群的hostsname 导致,配置源集群的hosts 到目标集群/etc/hosts 中即可
2、执行kudu table copy 出现End of file: Unable to send message: other end of pipe was closed 问题
解决办法:使用sudo -u kudu kudu table copy xxx:7051 tablename xxx:7051
3.参考文档