如何将数据从MYSQL导入到MapReduce服务Hive分区表
MapReduce服务(MapReduce Service,简称MRS)是华为云提供的企业级大数据集群云服务,里面包含HDFS、Hive、Spark等组件,非常实用于企业海量数据分析。Hive是建立在Hadoop之上的提供类SQL查询语言,帮助用户对大规模的数据进行提取、转换和加载,即通常所称的ETL(Extraction,Transformation,and Loading)操作。对庞大的数据集查询需要耗费大量的时间去处理。在许多场景下,可以通过建立Hive分区方法减少每一次扫描总数据量,这种做法可以显著地改善性能。
Hive的分区使用HDFS的子目录功能实现。每一个子目录包含了分区对应的列名和每一列的值。当分区很多时,会有很多HDFS子目录,如果不依赖工具将外部数据加载到Hive表各分区不是一件容易的事情。云数据迁移服务可以请轻松将外部数据源(关系数据库、对象存储服务、文件系统服务等)加载Hive分区表。
云数据迁移服务提供界面向导式数据迁移服务,帮助客户将数据从云下迁移到云上,从阿里云、腾讯云等第三方迁移到华为、以及华为云服务间数据迁移。支持以下数据源类型:
支持FTP、SFTP、OBS、HDFS、NAS(CIFS/SMB)文件类数据源
支持MySQL、Oracle、Db2、SQLServer、PostgreSQL数据库,自建或第三方云服务
支持MRS(Hive/HDFS/HBase)、DWS、RDS、CloudTable、DIS、Elasticsearch云服务
支持NoSQL数据库:Redis、MongoDB以及DCS、DDS云服务
下面一步步介绍如何将数据从MYSQL导入MapReduce服务。
数据准备
MYSQL上有一张表trip_data,保存了自行车骑行记录,里面有起始、结束时间,起始、结束站点、骑手ID等信息。
MYSQL trip_data表字段定义如下:
附件city_trip.zip是trip_data的原始数据,可以使用云数据迁移服务导入到MYSQL,参考《如何使用数据迁移服务从OBS加载数据到云搜索服务》
在Hive上使用下面SQL创建一张同名Hive分区表,创建SQL语句如下:
Hive表trip_data有三个分区字段:骑行起始时间的年、骑行起始时间的年月、骑行起始时间的年月日,例如一条骑行记录的起始时间为2018/5/11 9:40,那么这条记录会保存在分区trip_data/2018/201805/20180511下面。对trip_data进行按时间维度统计汇总时,只需要对局部数据扫描,大大提升性能。
接下来使用云数据迁移服务进行数据迁移,首先需要创建一个云数据迁移服务集群,进入作业管理,这些基本操作,请参考云数据迁移服务入门,创建一个MYSQL连接,输入连接参数如下:
注意:如果保存时出错,往往是因为MSQL服务的安全组设置问题,需要设置允许云数据迁移集群所在主机的IP访问MYSQL服务。
类似创建MRS Hive连接,输入参数如下:
创建从MYSQL导入Hive作业。
先选择源连接、模式和表,然后选择目的连接、数据库名称、表名。”导入前清空数据“选”是“,这样每次导入前,会将之前已经导入到Hive表的数据清空。
映射MYSQL表和Hive表字段,Hive表比MYSQL表多三个字段y、ym、ymd,即是Hive的分区字段。由于没有源表字段直接对应,需要配置表达式从源表的StartDate字段抽取。
点击y、ym、ymd字段左栏操作列的图标,然后按动图步骤操作,y、ym、ymd表达式分别配置如下
DateUtils.format(DateUtils.parseDate(row[2],"yyyy-MM-dd HH:mm:ss.SSS"),"yyyy")
DateUtils.format(DateUtils.parseDate(row[2],"yyyy-MM-dd HH:mm:ss.SSS"),"yyyyMM")
DateUtils.format(DateUtils.parseDate(row[2],"yyyy-MM-dd HH:mm:ss.SSS"),"yyyyMMdd")云数据迁移表达式已经预置常用字符串、日期、数值操作方法,详情请参考《云数据迁移服务字段转换》
在向导界面的最后一步,不修改参数默认值,点击”保存并运行“。
作业运行成功后,可以从作业列表查看作业运行状态和导入数据统计。
注:云数据迁移服务在1.1.0及以上版本支持导入Hive分区表。
- 点赞
- 收藏
- 关注作者
评论(0)