0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2

Fayson的github: https://github.com/fayson/cdhproject

推荐关注微信公众号:“Hadoop实操”,ID:gh_c4c535955d0f

1 文档编写目的

这里我们假定一个场景,你需要迁移CDH5.12到CDH6.2,CDH5.12和CDH6.2分别是两个不同的集群,我们的工作主要是HDFS数据和各种元数据从CDH5.12迁移到CDH6.2,本文不讨论HDFS数据的迁移也不讨论其他元数据的迁移比如CM或Sentry,而只关注Hive元数据的迁移。这里的问题主要是CDH5.12的Hive为1.1,而CDH6.2中Hive已经是2.1.1,Hive的大版本更新导致保存在MySQL的schema结构都完全发生了变化,所以我们在将CDH5.12的MySQL数据导入到CDH6.2的MySQL后,需要更新Hive元数据的schema。首先Fayson会搭建2个集群包括CDH5.12和CDH6.2,为了真实,我们在接下来的模拟过程中,创建的Hive表包含分区,视图和UDF,好方便验证是否迁移到CDH6.2都能正常运行。具体如何迁移Fayson会在接下来的文章进行详细描述。

测试环境
1.Redhat7.2
2.MySQL的管理员账号
3.CM/CDH6.2.0

2 迁移准备

1.准备两个集群,一个是CDH5.12.0,一个是CDH6.2.0。

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第1张图片

2.在两个集群准备同样的测试数据

在这里插入图片描述

3.在CDH5.12.0集群中创建好测试使用的Hive表

创建两个数据库

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第2张图片
创建两个表load准备好的测试数据0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第3张图片
0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第4张图片

load数据到两个表

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第5张图片
创建一个测试用的分区表并load数据

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第6张图片

创建两个测试使用的view

表web_returns的第一行数据形成的view

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第7张图片

分区表的分组统计信息形成的view0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第8张图片
添加一个UDF用作测试
0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第9张图片
4.导出CDH5.12.0集群的Hive的元数据

在这里插入图片描述

3 迁移步骤

1.将上一步中的元数据导入到CDH6.2.0的MySQL中

在这里插入图片描述

2.在CDH6.2.0集群中执行Hive元数据升级

查看 CDH5.12.0对应的Hive版本升级到CDH6.2.0对应的Hive版本所需的步骤

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第10张图片

按顺序执行上述的五个SQL

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第11张图片

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第12张图片

Hive元数据升级完成

3.执行Hive元数据更新

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第13张图片
4.更新后Hive服务报错,在TBLS表中找不到OWNER_TYPE字段0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第14张图片
进入MySQL的Hive元数据库中,执行下面语句后重启Hive服务,服务正常运行

alter table TBLS add column OWNER_TYPE varchar(10) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL after OWNER;
update TBLS set OWNER_TYPE = 'USER';

5.模拟Hive表在HDFS上的数据的迁移

创建两个数据库的目录

在这里插入图片描述

创建测试表的目录

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第15张图片

将表的数据全部上传到对应的HDFS目录下0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第16张图片

6.在C5和C6中进行同样的查询,查看结果是否一致

查看表web_returns和web_sales表:

select count(*) from web_returns;

CDH5.12.0

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第17张图片
CDH6.2.0

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第18张图片

select count(*) from web_sales;

CDH5.12.0

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第19张图片

CDH6.2.0

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第20张图片

select * from web_sales limit 1;
select * from web_returns limit 1;

CDH5.12.0

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第21张图片

CDH6.2.0

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第22张图片
查看分区表test_partition

select count(*) from test_partition where year = 2019;

CDH5.12.0

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第23张图片

CDH6.2.0

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第24张图片

查看view

select * from group_by_year_vw;

CDH5.12.0

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第25张图片

CDH6.2.0
0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第26张图片

select * from records;

CDH5.12.0

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第27张图片

CDH6.2.0

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第28张图片

查看UDF

select parse_date(dates,'yyyy-MM-dd HH:mm:ss') from test_udf;

CDH5.12.0

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第29张图片

CDH6.2.0

0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2_第30张图片
上述操作中,同样的操作在两个集群中得到的结果一致。

文档参考:

https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_ig_hive_schema_tool.html

4 总结

1.用命令schematool -dbType mysql -upgradeSchemaFrom -dryRun -passWord -userName ,在upgradeSchemaFrom参数后跟上要升级到的版本,此处填写的不是CDH版本,而是Hive的版本,如CDH6.2.0对应的Hive版本2.1.1,此命令可以列出升级到目标版本需要执行的sql语句,能够手动的去一个个执行,能够看到整个升级过程。

2.在升级和更新完Hive元数据后,Hive服务出现了错误,在文档中贴出的日志中可以看到是TBLS表中缺少了一个字段,这可能是由于升级过程中该表的结构未成功升级导致的,在TBLS表中添加上缺少的OWN_TYPE即可。

3.在将Hive元数据成功迁移到CDH6.2以后,我们知道Hive元数据中保存的表的比如location信息其实对应的还是CDH5.12中的HDFS路径,这样会导致你虽然迁移成功了Hive元数据,但是在CDH6.2中依旧无法访问Hive表中的HDFS数据,所以需要按照本文前面描述的步骤通过Cloudera Manager升级Hive元数据,这个步骤跟我们在同一个CDH集群启用HDFS HA或者禁用HA,更新Hive元数据道理一样。

4.本文档中只迁移了Hive的元数据,模拟迁移HDFS数据到同样的目录,这样的迁移方式,迁移之后表的数据以及数据目录都与之前一样,在验证后也可以看到,表的数据也没有发生缺失。

你可能感兴趣的:(Hadoop实操,cdh,hive)