网站都有什么类型的,宁波 手机网站建设,全球十大网站排名,小程序代理项目我有1个30TB的分区表#xff0c;客户给的带宽只有600MB#xff0c;按照150%的耗时来算#xff0c;大概要迁移17小时。 使用hive自带的修复分区命令#xff08;一般修复分区比迁移时间长一点#xff09;#xff0c;可能要花24小时。于是打算用前面黄大佬的牛B方案。 Hive增…我有1个30TB的分区表客户给的带宽只有600MB按照150%的耗时来算大概要迁移17小时。 使用hive自带的修复分区命令一般修复分区比迁移时间长一点可能要花24小时。于是打算用前面黄大佬的牛B方案。 Hive增量迁移创建表结构数据迁移(distcp)修复分区
1创建表结构 读取cdh的建表语句在tbds上创建表
2数据迁移 同distcp
3分区数据 msck repair table XXalter table XX recover partitions 修复太慢改用查询元数据库对比两边分区数据差异项然后拼接成add partition语句来执行。
例如之前修复一个1000个分区的表需要8h
hive:
一级分区alter table XX add partition (etl_date20240101);
alter table XX add partition (etl_date20240101);
二级分区alter table XX add partition (etl_yn2024,etl_mn01);
alter table XX add partition (etl_yn2024,etl_mn01);
改用add partition后1000个分区的表10min内 上面是他的方案我实战测试下 实战测试 1、先查询指定库的分区有几个源端查
beeline -u xxxx进入hive
show create table 表名
查看他的分区字段 这里我们能看到他就1个分区而且字段是dt接下来我们来查下dt有多少个 select distinct(dt) from xxx 查询这个表30T的表大概花了110秒
我们能看到他是以日进行分区的。 并且有542行。我们先把这个复制出来然后拼凑成sql。
alter table XX add partition (dt20240101);
2、然后打开notepad用ctrl f 正则处理一下
大概就处理成这样 测试
在目标端因为我们没有修复分区所以这里迁移完数据和元数据后他们是查不出来数据的。 beeline -u xxx
select * from xxx limit 1;
没有数据 3、接下来我们将500多条语句丢进Hive执行一下手动分区修复。 然后我们在执行一下查询
select * from xxx limit 1;
有数据了手动修复成功比hive MSCK REPAIR TABLE table_name分区命令快n倍。