开发者学堂课程【SaaS 模式云数据仓库实战:Hadoop 数据如何同步至MaxCompute
】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/761/detail/13345
Hadoop 数据如何同步至 MaxCompute
3.MMA Agent 操作说明 Hive Metadata 自动采集
1.使用meta-carrier采集Hive Metadata
解压工具包:odps-data-carrier.zip,工具目录结构如下:
odps-data-carrier/
|— bin
| |— meta-carrier 用于获取Hive metadata的工具
| |— meta-processor 用于生成0DPS DDL及Hive UDTF SQL的工具
| |— odps_ddl_runner_py 用于运行0DPS DDL的工具
| |— hive_udtf_sql_runner_py用于运行Hive UDTF SQL的工具
| |— network-measurement-tool 用于检查用户网络环境。选挥合适的endpoint的工具
| |— sql-checker 用于检查用户Hive SQL是否能直接在0DPS上运行的工具
|— odps_config.ini 用户ODPS配置
|— extra_settings.ini 数据迁移时需要增加的额外Hadoop/Hive配置
获取Hive metadata
Usage:
meta-carrier -u -o [-h] [-d ] [-t ]
-h ,--help 打印help信息
-o,—-output-dir 必填,指定一个输出的目录
-u,—-uri 必填,指定hive metastore service的thrift地址
-d,—-database 可选,指定一个database
-t,--table
可选,插定一个table
Example:
导出全部metadata:
sh meta-carrier -a thrift://127.0.0.1:9083 -o meta
导出某个database的metadata:
sh meta-carrier -u thrift://127.0.0.1:9083 -o meta -d test_db
导出某张表的metadata:
sh meta-carrier -u thrift://127.0.0.1:9883 -o meta -d test_db -t test_tbl
结果hive metadata输出的目录结构
output:
输出一个目录,结构如下:
[output directory]
|————global.json
|————[database name]
|————[database name] . json
|————table_meta
| |————[table name].json
|————partition_meta
|————[table name].json
[说明] :
①global.json是一个全局的配置文件, 包含了整
个迁移过程中的一些配置
②每一个database会有-个独立的目录
③每-个表有一个以表名命名的json文件
④如果是分区表,还会有一个以表名为命名的partition的json文件。
提前下载客户端的zip包,在本地进行解压,解压完成后是这个目录,查看目录结构
有一个bin目录,bin目录底下有几个文件,有几个核心角色,network-measurement-tool网络测量工具,用于测量hive集群网络条件是什么,通过网络测速,了解有多少数据量,网络传输的时间,sql-checker,用于检查hive SQL语法是否能够作用语法点上,判断sql能否在mysql运行
Libs目录
底下是工具依赖的jar包
odps_config.ini
res目录底下有一个console,有一个bins目录,目录底下有odpscmd、odpscmd.bat,是客户端是一个工具
配置文件直接配置odps_config.ini
查看本地hive的结构
有三个库,将dma_demo库下面的自动批量同步
查看表
有五个表将五个表进行同步
在dataworks控制台中创建
演示用另一个控制窗口,用console在本地运行的客户端工具连接创建的project
没有表
在安装的机器上运行
进入工具的目录中,在bin下查看meta-carrier工具
查看参数说明
-d可以指定一个数据库,指定把某一个数据库的meta拉出,也可以不指定,将整个hive下面所有库的meta拉出,-o是输出目录,-t指定表,-u是uri地址,是hive meta的地址
测试,指定地址,是thrift地址,用thrift协议连接
Hive meta在本地用127.0.0.1,默认端口9083
运行
查看生成的meta目录
Tree一下meta目录查看结构
Meta目录底下创建一个跟数据的不同名目录,不同名目录目录底下有一个json文件,描述数据库meta信息的文件,partition meta有两个分区表,其他表为非分区表,非分区表不在partition meta底下,table meta将所有表集的meta信息写在下面
查看例子
json结构,databaseName,在hive上的database名字
odpsProjectName,两个名字不一致,可以在本处修改
dropTableIfExists,表存在是否需要先照顾表,默认没有打开,都是可以设置的
查看表的catalog_sales.json
包含各种字段信息,每个字段名字,字段在opds表中字段的名字,前面有各种表名,需要自定义,在odps上表名跟hive不一致,加入前缀,都可以通过修改json文件实现
将hive meta转化成my SQL 的DDL
查看参数,-i input目录,-o输出目录
-i 是第一个命令输出的结果,meta目录放入的拉出的hive meta数据meta-processor的命令写入output中
Tree查看结构
Output目录底下以project名字命名的目录,目录下有hive_udtf-sql目录和odps-ddl目录,odps-ddl创建表,hive_udtf-sql用于批量做数据迁移是写的sql
查看
是DDL,首先set,把新数据类型打开,后面创建表的DDL语句
查看hive_udtf_sql
里面写了一个sql,sql实际上是在hive运行的sql,将整个表的输出读出
有批量多表的导出,核心的逻辑在odps中实现
为客户端工具先做一个数据化配置
配置好参数后可以批量创建表
执行python
查看参数,cmd不需要指定,默认寻找目录
直接指定input目录,基于output目录,作为创建表的输入
存在五个表
查看之前的分区
另一边
左右两边分区一致
两边表结构是一致的,数据类型一一对应
迁移数据
用hive_udtf_sql_runner命令,读output目录下hive_udtf_sql下的语句
查看参数,input_all,选用此参数,将output所有的生成的数据执行,做数据迁移,做单表或单分区的迁移用input_single_file参数,在hive目录下找到要执行的sql
parallelism PARALLELISE 参数指的是并行度,默认就可以
做批量全表的操作,将所有的sql执行,只需要加参数
过程需要将数据从Hive meta读出,写道表格中,等待时间较长。
查看表格
数据相同,是完整的
介绍report工具
在output下,创建完成DDL后,除DDL于SQL外,生成report文件,下载到本地
Hive表的数据结构与MaxCompute表的数据结构映射关系是否有风险,以及风险等级,明细,介入类型以及报错等有明显的描述,预警提示
每个表都有预警,其他建设性问题预警都有提示
单表迁移或单分区迁移
测试单分区,做单分区迁移
重新创建表
指定output目录,报错因为其他表已经存在
五个分区已建好
指定其中一个分区
查看分区single位置
在output下,以数据库名字命名的hive_udtf_aql,hive_udtf_aql有两级目录,一是mutil_partition,,二是single_partition,整张表的同步数据sql在mutil_partition下,单分区的同步在single_partition目录下,single_partition的编号根据分区顺序对应,只迁移0926分区,对应inventory_1。
使用single_file参数
用input_single_file做单分区single的指定,将single所在文件的目录指定,执行,有数据写入,对比Hive与MaxCompute数据是否一致
数据是一致的
Network-measurement-tool网络测试工具,查看参数
指定一个模式find,找最快的做排序,连接所有节点
前方最快51毫秒,后面最慢3393毫秒
sql_checker,查看参数,目录是meta carrier产生的目录,meta目录作为input
测试
表中写了一条sql,能够返回,兼容性可以,sql语句可以在MaxCompute运行的
sql_checker工具用于检查平时做hive sql兼容性检查
网路连通性检测