本期导读 :【阿里云 CDP 公开课】第八讲
主题:Hive 迁移 到 CDP
讲师:王雪峰,Cloudera 生态资深解决方案工程师
内容框架:
- Hive 迁移工具介绍
- 使用 Replication Manager 迁移 Hive 数据
- 使用 DistCP+HMS Mirror 迁移 Hive 数据
直播回放链接:(第8讲)
https://developer.aliyun.com/live/248869
一、Hive 迁移工具介绍
Hive 迁移到 CDP,主要有以下两种方案:
① 使用 DistCP+HMS Mirro迁移 Hive 数据。
② 使用 Replication Manager (企业级工具)迁移 Hive 数据。
方案①是基于命令行的方式,分步操作,每部分单独执行,其中 DistCP 负责 HDFS 数据的迁移, HMS Mirror 负责 Hive Metastore 数据的迁移。方案②是通过企业级的界面配置进行简单操作,将 Hive 数据一次性迁移到 CDP 平台,同时提供了完整的监控报告和调度。
安全支持方面,两种方式都支持非 Kerberos 集群之间、非 Kerberos 到 Kerberos 以及 Kerberos 到 Kerberos 的 Hive 数据迁移。
监控方面,两种方式都是单独执行,监控和运行是独立的,需要分别进行监控。方案②通过 UI 和 CM 界面集成,提供了完整的监控和运行报告以及调度支持。
增量和全量方面,两种方案都能支持增量和全量复制。
周期性运行方面,两种方案都基于原生命令行一次性执行,可以利用调度器实现周期性调度来完成整个复制。 Replication Manager 方案可以在 UI 里配置对应调度策略来一次性执行或立即执行,也可以按照不同的时间做调度,以及按照不同的频率梯度来执行。同时它保存了完整的执行日志和执行过程,便于后续分析以及错误预警。
适用性方面,两种方案都适用于所有 Hadoop 集群进行 Hive 迁移,支持从 Hive 1到Hive 3 、Hive 2 到 Hive 3 等,也支持从 CDH/HDP、Apache Hadoop 迁移到 CDP。Replication Manager 主要支持 CDH 到 CDH/CDP、 CDP 到 CDP 的 Hive 迁移。此外,由于 Replication Manager 是企业级工具,因此使用它需要通过 Cloudera 许可证以正常运行。
二、使用 Replication Manager 迁移 Hive 数据
Replication Manager 主要用于整个 CDH/CDP 平台的数据备份和灾难恢复,它提供了完整的数据备份和灾难恢复功能。在其界面上可以选择源和目标的配置,然后选择需要备份和恢复的文件、表、库等。可以配置用户、资源池、带宽、监控、日常预警等信息。配置完成后,可以根据调度策略来进行数据同步,同步过程中可以进行监控以观察实时运行情况,并采取措施。
Repliation Manager 也支持快照和数据复制。快照部分主要支持 HDFS 和 Hbase ,数据复制主要支持 HDFS 和 Hive。在 Hive 数据复制里,除了支持 HDFS 数据复制之外,还支持了元数据的复制以及 Sentry 到 Ranger 权限的同步。今年的版本会新增支持 Hive 数据迁移的复制。
进行 Hive 数据同步时,如果是 CDH 到 CDP 的迁移,建议在 CDP 的 Hive 里将 Hive 外表目录设置成 CDH 的受管表目录,数据会自动迁移到该目录下,代码无须修改目录即可直接运行。
受管表从 CDH 迁移到 CDP 后会变成 CDP 的外表,同时增加 purge属性,能够在做表清理的同时将数据文件进行 drop,从而保证其与 CDH 内表是相同的使用体验。而 CDP内表目前还不支持 Repliation Manager,今年的版本会增加对应的支持。
同时, Repliation Manager 支持 Sentry 权限迁移到 Ranger,用户可以根据自己的需求迁移权限。
Repliation Manager 对 CM 的版本要求较高,在 CDH 上需要将 CM 升级到版本 6.3 以上, CDH 要求在版本 5.10 以上。如果 CDH 版本较老,则只能通过 Distcp + HMS Mirror 的方式来同步 Hive 元数据。目标集群要求 CDP 7.0 以上,能够支持 HDFS Sentry 到 Ranger 权限迁移,支持 Hive 到 Hive 外部表迁移等。 CDP 要求 CM 和 CDH 的版本在7.1.1以上,支持高密度的文件系统以及外部表的数据迁移。
Demo演示
本次演示的环境版本如上图所示。
在 CDH 集群中有四张 Hive 内置表,其中三张 test 表分别对应普通文本、ORC 和 Parquet 格式,本次演示需要将三张 test 表从 CDH5 迁移到 CDP ,并进行一些操作。
首先,进行备份复制,迁移 CDH5 的数据。如果集群中没有配置同行,则需要点击备份-同行-添加同行,配置同行后才能继续后续操作。
同行的端口是 Cloudera Manager 的登录路径。如果启用了 TLS,则对应的端口为 7183,否则为 7180。使用默认的账户和密码填入同行管理用户名和密码。配置完成后会做测试连接,连接认证之后,即可在后续备份复制时在不同集群中进行数据迁移。
同行的操作菜单包括测试连接性、编辑和删除。
点击菜单栏中备份-复制计划-创建计划-Hive复制。
填写以上常规信息。
目标路径是指 HDFS 存储 Hive 数据和元数据的可选项,是创建表的根目录。比如 HDFS 的目标目录路径为 /mypath ,而源路径为user/hive/warehouse/bdr.db/tab1,那么复制完成后的路径即/mypath/user/hive/warehouse/bdr.db/tab1
填写以上资源相关信息。其中,复制策略为“动态”指将小集合中的文件复制任务分配给 mapper, 执行完后再去处理下一个未分配的任务集,而“静态”指根据文件大小实现统一分配。
完成高级部分的配置。
选择“立即运行”。
点击“命令详细信息”即可查看具体的执行相关信息。
从上图执行信息中可以看到, Hive 数据复制分为6个步骤。
第一步:导出远程 Hive Metastore;
第二步:传输元数据文件;
第三步:Hive 表数据复制,即 HDFS 数据复制,主要包含做检查、文件监听、列举文件、将列举清单传输到同行中,并在目标端触发 HDFS 的复制任务。
第四步: Hive Metastore导入。
第五步:通过引发 Impala shell 执行 Invalidate 相关命令
第六步:在目标端重命名 Snapshots,使其变为可用。
点击“显示历史记录”,即可查看执行结果。图中显示了本次执行耗费时间为2分钟,复制了3张表,预期文件3个,无失败文件。
复制完成后,查看文件是否已经存在。
此时目标目录的路径已经变为 /data/user/hive/warehouse,下面有3张表,意味着复制成功。
default 库下也已经存在三张表。此处发生了几个变化:
第一,表的性质变为“EXTERNAL”外部表;第二,路径变为/data/user/hive/warehouse;第三,增加了external.table.purge属性,做数据清理的时候会将底层文件一起删除。
通过 Replication Manager 迁移 Hive 有以下几个注意点:
① 需要企业的许可证。
② 数据迁移 Hive 到 CDP 后,会变为外表同时带有 purge 属性。
③ 做增量数据同步时会自动创建快照,需要在 Hive 主目录上启动快照。通过比较快照的方式找到对应增量来同步增量数据,以减少数据同步的带宽。
三、使用 DistCP+HMS Mirror 迁移数据
DistCP 主要负责迁移 HDFS 部分的数据,它支持增量和全量的迁移方式,支持非 Kerberos 到 Kerberos 以及非 Kerberos 到 Kerberos 的数据迁移。
HMS Mirror 是一个实用程序,上图下方为其项目文档地址。它主要用于弥补两个集群之间的差异并迁移 Hive 元数据,数据移动不是该工具的主要功能,需要 DistCP 来完成。
HMS Mirror 在两个集群之间迁移 Hive Metastore,可以使用 SQL 和EXPORT_IMPORT 等数据策略。也可以做一些数据移动,但它适用于较小的数据集,在较大数据集场景下效率不高。此外,元数据迁移里也有不同的策略,比如 Schema、Read-only。
上图为 HMS-Mirror 迁移步骤,此种方式对来源没有限制,Hive 可以是 EMR、HDP、CDH、Apache Hadoop、CDP 等,目标一般为 CDP 。
过程中通过 YARN 来调度 HDFS ,将数据导出再导入,此处更倾向于通过 DistCP 在 YARN 上调度来执行 HDFS 数据的迁移。然后将 Hive Metastore 数据进行复制,并通过 YARN 写入到 Hive Metastore 数据库,终端用户即可直接通过目标集群来访问。
Demo演示
本次 demo 使用的环境如下:CDH 5.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 参考文件。根目录下创建了隐藏文件夹 HMS Mirror 用于存放对应的目录结构,将 hive-jdbc 的 standalone.jar 文件放至该目录下,再将 cdh 的 standalone.jar 文件放至该目录下并创建对应的配置文件。
查看配置信息,其中 transfer 提供了一些参数,左右集群分别配置了 HDFSNameSpace 、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。
⭐点击回放链接,观看第8讲视频回放,获取讲师实例讲解:
https://developer.aliyun.com/live/248869
更多信息
产品试用
目前,CDP产品支持三个场景试用体验:
第一,CDP沙箱环境。主要测试常用场景:如构建数仓、ETL等常见的大数据分析场景,以及测试安全、数据血缘和治理等组件。
第二,Edge2AI场景。在此Edge2Al的实操实验中,将为IoT预测性维护用例构建完整的OT到IT的工作流。
第三,CDP Base+Data Service。测试存算分离,新一代容器化计集群,用户体验良好的APP等。
立即开通:https://cloudera.console.aliyun.com/?
试用申请:https://survey.aliyun.com/apps/zhiliao/owtTaIQU3
技术交流
钉钉扫描下方二维码加入产品交流群一起参与讨论吧!