摘要:本次分享主要介绍 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表的数据结构之间的映射关系是否有风险,并标识风险等级。另外会给出明细说明以及预警提示,如数据类型不兼容或语法不兼容等。用户在迁移之前可以查看此报告评估迁移风险。

查看更多:https://yqh.aliyun.com/detail/6648?utm_content=g_1000106727

上云就看云栖号:更多云资讯,上云案例,最佳实践,产品入门,访问:https://yqh.aliyun.com/

hive建表语句_Hive数据如何同步到MaxCompute之实践讲解相关推荐

  1. Hive数据如何同步到MaxCompute之实践讲解

    摘要:本次分享主要介绍 Hive数据如何迁移到MaxCompute.MMA(MaxCompute Migration Assist)是一款MaxCompute数据迁移工具,本文将为大家介绍MMA工具的 ...

  2. maxcompute mysql_MySQL/RDS数据如何同步到MaxCompute之实践讲解

    实验方案概述 本实验是对RDS同步数据到MaxCompute的一个初步讲解.当企业需要利用MaxCompute进行数据开发时,如果数据不在MaxCompute而在RDS中,首先需要将RDS中的数据同步 ...

  3. 使用java代码编写脚本,把oracle建表语句变成hive建表语句

    使用java代码编写脚本,把oracle建表语句变成hive建表语句 java代码 测试oracle.sql 生成hive创表语句 java代码 import java.io.File; import ...

  4. mysql hive 建表语句_Mysql元数据如何生成Hive建表语句注释脚本详解

    前言 本文主要给大家介绍了关于Mysql元数据生成Hive建表语句注释脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 最近在将数据从Mysql 等其他关系型数据库 抽取 ...

  5. Hive建表以及导入数据

    目录 一:内部表和外部表 1:外部表 2:外部表 3:外部表和内部表区别 二:上传数据方式 一:内部表和外部表 1:外部表 内部表基础建表语句一:(默认指定文件类型为TextFile,HDFS路径为/ ...

  6. Oracle、Hive建表语句

    1.Oracle建表 drop table T_PSSC_TRAN_PORTRAIT_CENTER; create table T_PSSC_TRAN_PORTRAIT_CENTER ( OBJ_ID ...

  7. 小技巧:用python迅速打印Java写 的Flink代码中的hive建表语句

    假设我们想要用Flink对hive进行读写, 并且其中一段代码如下: // 如果hive中已经存在了相应的表,则这段代码省略String hiveSql = "CREATE external ...

  8. 1.python 根据 oracle字段名和类型 生成 hive建表语句

    一.问题 遇到一个场景,要根据oracle表结构创建hive表. 本来想写一个根据oracle信息和表名自动在hive中创建表的脚本.如果在集群运行,python操作oracle的cx_Oracle在 ...

  9. Hive建表及插入数据浅析

    通过已有表创建新表(仅创建表结构) create table new_table like old_table; 通过已有表创建新表,并复制已有表数据 create table new_table a ...

最新文章

  1. 一个基于长数据转化为宽数据的小软件---data_tran.exe
  2. NeurIPS2019 入选论文数据深度剖析!!!
  3. leetcode算法题--二进制求和
  4. CocosEditor 1.0Final-IDEA13.0和1.5-IDEA13.1 发布–2014.03.25
  5. DATA - RANGE OF
  6. 关于“svn: Can't connect to host '*.*.*.*': 由于连接方在一段时间后没有正确答复或连接”的解决方法...
  7. Linux高性能网络:协程系列08-协程实现之调度器
  8. 施密特正交化的几何解释
  9. Lucene 概念,定义应用场景
  10. Community Enterprise Operating System ISO 全镜像下载
  11. Leetcode 颜色分类
  12. html 网页配色,配色就是这么简单!7个在线配色网站推荐
  13. 动态规划_数字的划分
  14. 设置好DNS CAA记录,轻松提高HTTPS站点安全
  15. 浙江大学pta答案python第四章_浙大PTA-Python题库 编程题第一章(1-1~1-3)题解
  16. 分析C语言的声明——《C专家编程》
  17. 做股指期货投资必看的32本书
  18. 纳米二氧化硅修饰中孔ZSM-5沸石微球/含钆介孔二氧化硅海藻酸钠纳米微球
  19. matlab推导二体问题,二体问题二体问题.ppt
  20. python 多进程编程 之 加速kmeans算法

热门文章

  1. 嵌入式基础认识1:存储器(如RAM、ROM和FLASH)
  2. c++远征之继承篇——多重继承,多继承,虚继承,多继承时的重复定义解决方法
  3. Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS
  4. Linux基础提高_系统性能相关命令
  5. 树莓派安装CentOS
  6. 开源微信管家平台——JeeWx 捷微4.0 微服务版本发布,全新架构,全新UI,提供强大的图文编辑器...
  7. CodeForces - 796D Police Stations bfs
  8. 学习微信公众号oauth2.0
  9. 290. Word Pattern
  10. elasticsearch threadpool