一、前言
- 在大数据环境中,跨集群的数据迁移和同步是非常重要的操作。本文将详细介绍如何在 CDH6 集群中使用 Kudu 进行跨集群的数据迁移和同步。
二、操作步骤
1、下载Apache Kudu新版本
- 正如你所看到的,CDH6.0 kudu命令并不支持copy…所以我们必须下载安装新的kudu二进制文件,解决copy问题,新的kudu分享见下方。(CDH 6.3才被支持)
链接:https://pan.baidu.com/s/1lFx1uZEii4zQ4x7Xyz2tUQ
提取码:C3hp
2、修改配置文件
- 配置 Kudu 的 GFlag 配置文件,以表示信任所有子网。这样可以确保源集群和目标集群之间的通信顺畅。并滚动重启 Kudu 服务以使配置生效。
3、绑定主机名信息
- 更新目标集群的主机名信息,编辑目标集群中的 /etc/hosts 文件,添加源集群的 IP 和主机名信息
4、解压新版本kudu
- 下载解压新版本kudu二进制文件,+x执行权限。
tar -xf kudu.tar -C /app
chmod +x /app/kudu
5、创建相同表结构
CREATE TABLE mid.test_table (
id STRING,
order_unit_no STRING,
brand_no STRING,
store_no STRING,
item_no STRING,
size_no STRING,
balance_qty INT,
transit_in_qty INT,
in_diff_qty INT,
guest_bad_qty INT,
original_bad_qty INT,
bad_transit_qty INT,
bad_diff_qty INT,
PRIMARY KEY (id) )
STORED AS KUDU;
6、 执行数据复制
kudu table copy kudu_master:7051,kudu_master:7051,kudu_master:7051 impala::xxx.xxx kudu_master:7051,kudu_master:7051,kudu_master:7051 -nocreate_table -dst_table=impala::xxx.xxx -num_threads=35 -write_type=upsert
-nocreate_table:表示目标集群中已经存在目标表,不需要创建新表。
-num_threads=35:指定并发线程数为 35。
-write_type=upsert:使用 UPSERT 操作类型。
- 用法和参数说明
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>]
7、 检查数据是否一致![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/efae9ba140f84b92a91bdb48f25839e9.png)
三、编写脚本进行同步
#!/bin/bash
#格式: 生产kudu表:测试kudu表
prd_kudu_tb="""
mid.prd_table_t1:mid.sit_table_t1
"""
arr=($prd_kudu_tb)
length=${#arr[@]}
current=1
echo "总共有${length}张表需要同步."
for i in $prd_kudu_tb; do
prd_tb=$(echo $i | awk -F':' '{print $1}')
sit_tb=$(echo $i | awk -F':' '{print $2}')
echo -e "---进度:${current}/${length},时间:$(date "+%Y-%m-%d %H:%M:%S")---$prd_tb---"
#echo "delete kudu 测试表."
#impala-shell -i 192.168.31.30:21000 -l -u hive --ldap_password_cmd='echo -n xHeGyZkpZciolTbz' --auth_creds_ok_in_clear -q "delete from ${sit_tb}"
/app/bin-release/kudu table copy xxx:7051,xxx:7051,xxx:7051 impala::$prd_tb xxx:7051,xxx:7051,xxx:7051 -nocreate_table -dst_table=impala::$sit_tb -num_threads=35 -write_type=upsert >> /dev/null
echo -e "\n"
echo "INVALIDATE METADATA."
impala-shell -i 192.168.31.30:21000 -l -u hive --ldap_password_cmd='echo -n xHeGyZkpZciolTbz' --auth_creds_ok_in_clear -q "INVALIDATE METADATA ${sit_tb}"
echo -e "\n"
let current=current+1
done
四、常见问题
- 执行kudu table copy 出现Scanning failed Network error: Failed to resolve address for TS 62bdb42ae7554761acb8d6aea005cefa: unable to resolve address for xxx 异常
解决办法:该问题由于无法解析源集群的hostsname 导致,配置源集群的hosts 到目标集群/etc/hosts 中即可