《CDP企业数据云平台从入门到实践》——Hive 迁移到 CDP(3) https://developer.aliyun.com/article/1227681?groupCode=ClouderaCDP
三、使用DistCP+HMS Mirror迁移数据
DistCP主要负责迁移HDFS部分的数据,它支持增量和全量的迁移方式,支持非Kerberos到Kerberos以及非Kerberos到Kerberos的数据迁移。
HMS Mirror主要用于弥补两个集群之间的差异并迁移Hive元数据,数据移动不是该工具的主要功能,需要DistCP来完成。
HMSMirror在两个集群之间迁移HiveMetastore,可以使用SQL和EXPORT_IMPORT等数据策略。也可以做一些数据移动,但它适用于较小的数据集,在较大数据集场景下效率不高。此外,元数据迁移里也有不同的策略,比如Schema、Read-only。
上图为HMS-Mirror迁移步骤,此种方式对来源没有限制,Hive可以是EMR、HDP、CDH、Apache Hadoop、CDP等,目标一般为CDP。
过程中通过YARN来调度HDFS,将数据导出再导入,此处更倾向于通过DistCP在YARN上调度来执行HDFS数据的迁移。然后将Hive Metastore数据进行复制,并通过YARN写入到HiveMetastore数据库,终端用户即可直接通过目标集群来访问。
1.使用DistCP和HMS Mirror迁移Hive演示
本次demo使用的环境如下:CDH5.1.6,禁用Kerberos,使用的Hive版本为1.1;CDP 7.1.7,启用Kerberos,使用的Hive版本为3.1.3。
在CDH 5.1.6里的test_db库下有四张表,本次演示将完成这四张表的数据同步。
首先在CDH集群对DB目录创建Snapshot,创建完成后,查看其对应的快照。
接着到目标集群对数据同步赋权,创建针对user/hdfs目录的权限,该权限赋予
etl_user用户,并通过此用户来操作数据。
在CDP集群里使用etl_user用户做数据同步,利用DistCP进行数据迁移。关于
DistCP的使用方式和参数请参考对应手册。
数据同步完成后,查看目录里的数据,可以看到四张表已经同步成功。
github上提供了非常完整的HMS Mirror文档,依照文档里的步骤进行下载安装即可。安装完成后可以看到user/local目录下创建了新的目录结构,包含bin和lib参考文件。根目录下创建了隐藏文件夹HMSMirror用于存放对应的目录结构,将hive-jdbc的standalone.jar文件放至该目录下,再将cdh的standalone.jar文件放至该目录下并创建对应的配置文件。
查看配置信息,其中transfer提供了一些参数,左右集群分别配置了HDFS
NameSpace、uri以及jar文件的目录路径。
配置完成后,执行HMS Mirror的命令来同步元数据。
执行完成后,可以看到同步了一个数据库和四张表,对应的同步数据库是test_db,temp目录下生成了若干文件。
查看temp目录下的文件结构。其中比较重要的是右侧目标集群的执行文件。
查看此文件,可以看到已经将对应的表结构抽取出来,CDH是内表,在CDP中转成了外表。此处location路径对应的根目录有误,应将其替换,保存文件。
在环境中创建test_db目录。
启用Hive用户,执行beeline生成DDL语句。
回到Hive,可以看到已经存在四张表,查询parquet表内数据总条数为20004条。
对表做更新,插入2条数据,再做增量的同步。
插入完成后查询parquet表内数据更新为20006条。
前面为使用命令方式迁移数据,接下来演示使用UI工具。
首先找到text_db所在目录,拍摄快照。创建完成后即可在页面上看到快照。
切换到etl用户,做DistCP的增量数据同步。
同步完成后,切换到CDP集群,将工具切换为Hive,查看数据总条数,结果为20006。