Hive数据如何同步到MaxCompute之实践讲解
摘要:本次分享主要介绍 Hive数据如何迁移到MaxCompute。MMA(MaxCompute Migration Assist)是一款MaxCompute数据迁移工具,本文将为大家介绍MMA工具的功能、技术架构和实现原理,再通过实际操作MMA,演示将Hive数据迁移到MaxCompute。
演讲嘉宾简介:阿里云智能产品专家-云花
精彩视频回顾:Hive数据如何同步到MaxCompute
以下内容根据演讲视频以及PPT整理而成。
本次分享主要围绕以下两个方面:
一、MMA功能介绍、技术架构和原理
二、MMA数据迁移操作演示
一、MMA功能介绍、技术架构和原理
1.MMA功能介绍
MMA主要覆盖的场景包括批处理,存储,数据集成,作业编排及调度。MMA提供迁移评估分析功能,自动化生成迁移评估报告。迁移评估报告会报告出从Hive表的数据结构到MaxCompute的数据结构之间是否有数据类型映射兼容性问题,如语法问题。MMA支持自动化数据迁移功能,支持批量建表以及数据自动化批量迁移。另外,MMA还支持作业语法分析,可以检查Hive SQL能否直接运行在MaxCompute里。MMA还支持工作流迁移,对主流数据集成工具Sqoop进行作业的迁移转换,并自动创新DataWorks数据继承作业。
2.MMA迁移服务架构
MMA迁移服务架构如下图。左侧是客户Hadoop集群,右侧的是Aliyun 大数据服务,主要是DataWorks和MaxCompute。MMA工具会跑在客户的Hadoop集群上,客户的服务器需要能够访问Hive Server。在机器上部署MMA客户端工具时会自动化获取Hive Meta里的数据,既将Hive的Meta数据从MySQL中读出来,还可以将Meta信息自动转换成MaxCompute DDL,然后用DDL在MaxCompute中批量创建表,批量拉起数据同步的作业,向Hive Server并发提交Hive SQL作业。基于Hive SQL作业调用一个UDF,UDF里面会集成Tunnel的SDK,基于Tunnel将数据批量写到MaxCompute的表中。作业和工作流的迁移也是基于MMA客户端工具自动发现的Hive Meta数据,做工作流的作业检查,包括把工作流的组件中的工作流的配置批量转换成DataWorks工作流的配置,直接生成DataWorks工作流。以上步骤完成了数据到作业到工作流的迁移。最后一步是迁移完成后需要基于MaxCompute和DataWorks架构对接业务系统。
3.MMA Agent技术构架和原理
通过客户端和服务端,MMA可支持数据和工作流的批量迁移。安装在客户服务器上的MMA客户端工具包含下图中的四个能力。首先可自动获取Hive Metadata,并自动创建生成DDL和UDTF,而且可批量创建表和批量Hive数据迁移。相应的,MMA有四个主要组件。Meta Carrier工具自动将Hive Meta信息提取出来,在本地生成Hive Meta结构。Meta Processor是基于Meta Carrier工具产出的结果,基于Hive Meta数据批量转成MaxCompute的DDL,既批量转成建表语句和数据类型的转换。此外,MMA客户端工具还内置了ODPS Console,基于ODPS Console将Meta Processor产出的ODPS DDL在MaxCompute上批量创建表。最后基于Data Carrier批量创建Hive SQL作业。每个Hive SQL作业相当于多个表或者多个分区并行的数据的同步。
二、MMA数据迁移操作演示
1.环境准备
如下图所示,MMA环境运行要求是jdk1.6版本以上,Python3+。另外,运行MMA的机器,通过Hive Client提交Hive SQL的作业。机器还需要可以访问Hive Server,并连接MaxCompute服务。下图右侧的场景案例是客户在基于MMA做同步数据时发现的问题。例子中客户有自己的IDC,在阿里云有自己的ECS,客户从IDC拉一条专线访问阿里云。在安装MMA之前,客户可以从ECS上直接访问MaxCompute,但IDC里的机器不能访问MaxCompute。此时需要在这条专线上增加VBR路由配置,既在边界路由上增加一个配置。配置之后可以打通从IDC到ECS,甚至到MaxCompute服务的网络访问。
2.下载和编译工具包
下载编译工具包有两种方法。一是下载下图中编译好的工具包。此外,由于用户的Hive版本各不相同,用户可以根据MMA官网上提供的GitHub地址下载源码,拉到本地进行编译。
3.MMA Agent操作说明
使用meta-carrier采集Hive Metadata:机器提前安装好Hadoop环境,本地有Hive Server。提前下载客户端的odps-data-carrier.zip包,并在本地解压。解压完成后会显示下图所示目录。
bin目录下有几个文件,首先是MMA的几个核心角色:meta-carrier、meta-processor、odps_ddl_runner用于批量创建表,hive_udtf_sql_runner用于同步数据。libs目录下是工具依赖的jar包和库。 res目录的console目录下的bin目录包含odpscmd,是MMA客户端的工具,odps_config,ini配置文件。
本地Hive上面有三个库,其中dma_demo库下有五个表,可将五个表自动批量同步到MaxCompute上。首先需要在MaxCompute上创建一个project,既在DataWorks控制台创建一个空Project。打开新的命令窗口,在本地运行的ODPS Command客户端工具,连接新创建的空的project。在已经安装了MMA Hive的机器上运行,解压,进入odps-data-carrier工具的目录。执行 bin/meta-carrier -h查看其参数说明,-d表示用户可以指定数据库,通过指定数据库提取meta数据,若不指定,会将Hive下所有的库的meta都拉取出来。-o指定输出目录,-t参数指定表,-u参数指定uri地址,即Hive Meta的地址。开始测试时首先指定地址,因为是thirft地址,所以用thirft协议连接。此外由于Hive Meta在本地,所以只需要将dma_demo库的meta拉取出来,加-o参数,指定目录。通过tree meta可以查看meta目录结构。meta目录下生成和数据库同名的dma_demo目录。dma_demo目录下的json文件是描述数据库meta信息的文件。partition_meta里面的两个表是分区表,table_meta的表是非分区表,会把所有表集的meta信息写在下面。
使用network-measurement-tool:网络测量工具network-measurement-tool用于网络测速,测量Hive集群到MaxCompute各region的网络连通质量。通过网络测速可以知道网络传输速度和大概的数据量,根据网络传输速度预估数据传输时间。network-measurement-tool工具连接MaxCompute上所有region的节点ENDPOINT地址,由最快到最慢做测速排序。下图中执行结果最快的是HANGZHOU,连接时间为51ms,最慢的是一个海外region KUALA_LUMPUR,连接时间为3393ms。
使用sql-checker检查Hive SQL是否可以直接在MaxCompute上执行:sql-checker可用于检查Hive SQL语法兼容性,判断SQL能否直接在MaxCompute上运行。其参数input要指定meta目录,指定缺省project和sql参数。若执行结果返回其兼容性OK,即此sql语句可以直接在MaxCompute上运行。
使用meta-processor生成ODPS DDL和Hive UDTF SQL:通过第一步已经拉出了Hive Meta库的metadata信息。下一步需要将Hive Meta转换成MaxCompute DDL。使用bin/meta-processor -h查看参数。-i即input,-o是output目录。bin/meta-processor的-i就是第一个命令的输出结果,代表meta的目录,存放的是carrier拉出的Hive Meta数据。指定-i meta -o output。将bin/meta-processor运行结果放入output中。生成output目录。tree output可查看结构。output目录下也会生成一个以MaxCompute的project命名的dma_demo目录。dma_demo目录下面有一个hive_udtf_sql目录,目录下面的.sql用于批量数据迁移。还包含odps_ddl目录,用于后续批量创建表,目录下的.sql是创建表的语句。
使用odps_ddl_runner.py批量创建表和分区:既然DDL已经生成,下一步需要批量创建表。批量创建表依赖MaxCompute的命令行工具(客户端工具)。工具包一级目录下的odps_config包含几个基本参数,其中project_name、access_id、access_key、end_point为必填项。配置完成可以开始批量创建表。批量创建表工具要执行Python命令,python36 bin/odps_ddl_runner.py -h。参数中input参数由meta processer自动生成,odpscmd参数不是必须指定的,它会默认找到所在目录,不需要单独配置参数。创建表过程要拉起odps_command工具,基于客户端工具来向MaxCompute提交建表语句。通过show table查看是否创建了五个表,再查看分区是否也建好。若Hive和MaxCompute上的分区创建完成,两边的表结构也应相同。
使用hive_udtf_sql_runner.py迁移数据:通过命令行python36 bin/hive_udtf_sql_runner.py开始读output目录下的.sql语句。查看python36 bin/hive_udtf_sql_runner.py命令的参数,Input_all会批量迁移output下所有数据。若只想做单表的迁移或者单分区的迁移,需要使用input_single_file参数。parallelism参数表示并行度。数据迁移完成后在MaxCompute中查看表中是否有数据。对比MaxCompute中的数据和Hive中对应表的数据。若其size相同,Hive和MaxCompute中对应表的数据相同,说明已经完整迁移数据。
进阶功能1:仅生成指定的database或table的metadata:在生成meta时可以不生成整个数据库的meta,可以指定一个表,生成一个表的meta。Meta carrier 工具提供了抓取指定数据库可表的能力。
进阶功能2:进灵活的hive到MaxCompute映射:如果用户需要自定义MaxCompute上的表,可以更改命名,加前缀或后缀,修改自定义字段名。如可以修改MaxCompute DDL里的json文件实现表名或字段名的自定义。
进阶功能3:单表或单分区迁移:上面的例子中已经批量迁移五张表,通过drop table inventory,演示单分区迁移。首先若只需同步一个分区的数据,需要重新创建一张表。执行python36 bin/odps_ddl_runner.py创建表,指定其output目录,开始批量创建表。此时inventory表以及其五个分区已经创建完成。但创建的分区中没有数据,可指定其中一个分区,如第二个分区。通过使用input_single_file参数,指定具体分区的sql目录。可指定目录为output/dma_demo/hive_udtf_sql/single_partition/inventory_1.sql。执行完成后查看结果,对比在Hive上第二分区的数据和迁移进MaxCompute的单分区的数据,若两个单分区数据一致,则表示迁移完成。
4.使用DataWorks自动迁移数据和工作流
MMA1.0版本还未将工作流迁移做成服务化功能,目前还是一个线下工具。客户需要根据下图模板生成相应目录。在做工作流迁移时,如果使用开源组件,可以按照模板将配置放到相应目录下。如果不使用开源组件,如自研的工作流调度编排服务,可基于标准化模板,按照模板的目录结构生成用户自己的工作流数据,打成zip包上传到DataWorks。目前MMA1.0还需要客户手动打包文件上传zip包,后台会进行自动解析并加载到DataWorks工作流。上传完成后,DataWorks服务会根据ODPS DDL 批量生成MaxCompute的table。MaxCompute表创建后,DataWorks服务会自动拉起DataX的数据同步任务,完成批量数据迁移。
下图是可配置的项目描述文件project.xml,其中project信息可以自定义。另外一个是工作流描述文件,workflow.xml中是工作流自定义的参数,用户可以通过编辑配置文件进行修改。
5.其他类型作业的迁移方案
UDF、MR迁移:用户直接将jar包上传到MaxCompute上,开启2.0支持,开启对Hive兼容的flag。将Hive兼容的flag设置为true,再在MaxCompute下直接迁移Hive下的UDF和MR。需求注意不支持UDF,MR中直接访问文件系统,网络访问和外部数据源连接。
外表迁移:原则上能结构化的数据尽量迁移到MaxCompute内部表。如果必须通过外表访问外部文件,建议先将数据从HDPS迁移到OSS或OTS,再在MaxCompute中创建外部表,实现对文件的访问。
Spark作业迁移:MMA对开源Spark的语法完全兼容。用户只需要下载Spark On MaxCompute客户端,在编写Spark SQL时仅增加MaxCompute的连接参数,其它部分和Spark SQL的语法相同。
6.查看迁移评估报告
创建MaxCompute DDL完成后,除了生成DDL会SQL以外,还会生成迁移评估报告report.html文件。迁移评估报告是一个兼容性报告,显示Hive表的数据结构和MaxCompute表的数据结构之间的映射关系是否有风险,并标识风险等级。另外会给出明细说明以及预警提示,如数据类型不兼容或语法不兼容等。用户在迁移之前可以查看此报告评估迁移风险。
本文作者:亢海鹏
本文为云栖社区原创内容,未经允许不得转载。
Hive数据如何同步到MaxCompute之实践讲解的更多相关文章
- MySQL/RDS数据如何同步到MaxCompute之实践讲解
摘要:大数据计算服务(MaxCompute,原名ODPS)是阿里云提供的一种快速.完全托管的EB级数据仓库解决方案.本文章中阿里云MaxCompute公有云技术支持人员刘力夺通过一个实验向大家介绍了阿 ...
- Kafka数据如何同步至MaxCompute之实践讲解
摘要:本次分享主要介绍Kafka产品的原理和使用方式,以及同步数据到MaxCompute的参数介绍.独享集成资源组与自定义资源组的使用背景和配置方式.Kafka同步数据到MaxCompute的开发到生 ...
- 日志数据如何同步到MaxCompute
摘要:日常工作中,企业需要将通过ECS.容器.移动端.开源软件.网站服务.JS等接入的实时日志数据进行应用开发.包括对日志实时查询与分析.采集与消费.数据清洗与流计算.数据仓库对接等场景.本次分享主要 ...
- 【转】美团 MySQL 数据实时同步到 Hive 的架构与实践
文章转载自公众号 美团技术团队 , 作者 萌萌 背景 在数据仓库建模中,未经任何加工处理的原始业务层数据,我们称之为ODS(Operational Data Store)数据.在互联网企业中,常见的 ...
- 阿里Canal框架(数据同步中间件)初步实践
最近在工作中需要处理一些大数据量同步的场景,正好运用到了canal这款数据库中间件,因此特意花了点时间来进行该中间件的的学习和总结. 背景介绍 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存 ...
- 2个CDH的hive数据同步
算法和数仓共用一套hive数据: CM: 真实数据: 都存在共享存储: oss, s3,ufile上. CDH配置能访问的权限(key)
- 大数据平台Hive数据迁移至阿里云ODPS平台流程与问题记录
一.背景介绍 最近几天,接到公司的一个将当前大数据平台数据全部迁移到阿里云ODPS平台上的任务.而申请的这个ODPS平台是属于政务内网的,因考虑到安全问题当前的大数据平台与阿里云ODPS的网络是不通的 ...
- Hive数据导入导出的几种方式
一,Hive数据导入的几种方式 首先列出讲述下面几种导入方式的数据和hive表. 导入: 本地文件导入到Hive表: Hive表导入到Hive表; HDFS文件导入到Hive表; 创建表的过程中从其他 ...
- Linux下Rsync+Inotify-tools实现数据实时同步
Linux下Rsync+Inotify-tools实现数据实时同步 注意:下面的三个案例都是rsync 每次都是全量的同步(这就坑爹了),而且 file列表是循环形式触发rsync ,等于有10个文件 ...
随机推荐
- isset、empty 误区
isset() 常用来判定变量是否存在 但是当变量赋值为NUll时候,返回值一样是FALSE 而实际上变量是存在的,与实际情况不符,判定错误. empty() 用来判定变量或者类的属性值是否为等 ...
- day21—AngularJS学习初体验
转行学开发,代码100天——2018-04-06 今天按照学习计划安排,开始AngularJS的学习. 关于AngularJS,在菜鸟教程上这样介绍 好吧,Angular学习起来非常简单,哈哈,现在就 ...
- 16/7/8_PHP-书写规范 PHP Coding Standard
变量命名规范这里感觉 打算采用 匈牙利命名法+驼峰法命名,因为 PHP是弱类型语言,很多时间因为忽略了变量类型而导致犯一些低级错误.所以在前面加上类型名有助于更好的理解代码. 下载是转载 PHP书写规 ...
- 使用rdb文件进行redis数据迁移--python脚本
查找了一些redis迁移的方法,一般做法就是 1. 从源数据库把rdb文件保存,然后传到新的主机上,启动新的redis即可 2. 把新的redis当做源数据库的slave,同步数据 今天开发提了一个测 ...
- 【SD系列】SAP 跨年时更改销售凭证号码段
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SD系列]SAP 跨年时更改销售凭证号码段 ...
- 使用HEXO建站
使用Hexo模板 按以下指导进行本地预览和上传到你的github. 环境安装 安装node.js node.js官方下载地址https://nodejs.org/en/ 设置npm淘宝镜像站(npm默 ...
- mysql 数据库表结构对比语句
判断两个数据库互相不存在的表 select a.TABLE_SCHEMA,a.TABLE_NAME from information_schema.TABLES a where a.TABLE_SCH ...
- CentOS7和Ubuntu18.10下运行Qt Creator出现cannot find -lGL的问题的解决方案
解决方法:缺少相应的opengl的库,需要安装opengl库 一.Ubuntu下解决Qt5.11.1 cannot find -lGL 有两种原因: 一种是没有按照libGL库,那么就安装: sudo ...
- 洛谷P1265 公路修建——prim
给一手链接 https://www.luogu.com.cn/problem/P1265 这道题本质上就是最小生成树,题目描述就是prim的思想 TIP:注意稠密图和稀疏图的区别 #include&l ...
- java Semaphore信号灯
Semaphore实现的功能就类似2个公用电话,假如有10个人要打电话:那么只能2个人占有电话,8个需要等待.当2个人中 的任何一个人让开后,其中等待的另外8个人中又有一个人可以使用了等待的8个人中可 ...