MapReduce服务(MapReduce Service,简称MRS)提供企业级大数据集群云服务,
里面包含HDFS、Hive、Spark等组件,适用于企业海量数据分析。
其中Hive提供类SQL查询语言,帮助用户对大规模的数据进行提取、转换和加载,即 通常所称的ETL(Extraction,Transformation,and Loading)操作。对庞大的数据集 查询需要耗费大量的时间去处理,在许多场景下,可以通过建立Hive分区方法减少每 一次扫描的总数据量,这种做法可以显著地改善性能。
Hive的分区使用HDFS的子目录功能实现,每一个子目录包含了分区对应的列名和每一 列的值。当分区很多时,会有很多HDFS子目录,如果不依赖工具,将外部数据加载到 Hive表各分区不是一件容易的事情。云数据迁移服务(CDM)可以请轻松将外部数据 源(关系数据库、对象存储服务、文件系统服务等)加载到Hive分区表。
下面使用CDM将MySQL数据导入到MRS Hive分区表为例进行介绍。
操作场景
假设MySQL上有一张表trip_data,保存了自行车骑行记录,里面有起始时间、结束时 间,起始站点、结束站点、骑手ID等信息,trip_data表字段定义如图7-6所示。
图7-6 MySQL 表字段
使用CDM将MySQL中的表trip_data导入到MRS Hive分区表,流程如下:
1. 在MRS Hive上创建Hive分区表
2. 创建CDM集群并绑定EIP
3. 创建MySQL连接
4. 创建Hive连接
5. 创建迁移作业
前提条件
● 已经购买MRS。
● 已获取连接MySQL数据库的IP地址、端口、数据库名称、用户名、密码,且该用 户拥有MySQL数据库的读写权限。
● 已参考管理驱动,上传了MySQL数据库驱动。
在 MRS Hive 上创建 Hive 分区表
在MRS的Hive上使用下面SQL语句创建一张Hive分区表,表名与MySQL上的表 trip_data一致,且Hive表比MySQL表多建三个字段y、ym、ymd,作为Hive的分区字 段。SQL语句如下:
create table trip_data(TripID int,Duration int,StartDate timestamp,StartStation varchar(64),StartTerminal int,EndDate timestamp,EndStation varchar(64),EndTerminal int,Bike int,SubscriberType
varchar(32),ZipCodev varchar(10))partitioned by (y int,ym int,ymd int);
说明
Hive表trip_data有三个分区字段:骑行起始时间的年、骑行起始时间的年月、骑行起始时间的 年月日,例如一条骑行记录的起始时间为2018/5/11 9:40,那么这条记录会保存在分区 trip_data/2018/201805/20180511下面。对trip_data进行按时间维度统计汇总时,只需要对局 部数据扫描,大大提升性能。
创建 CDM 集群并绑定 EIP
步骤1 如果是独立CDM服务,参考创建集群创建CDM集群;如果是作为DGC服务CDM组件 使用,参考创建集群创建CDM集群。
关键配置如下:
● CDM集群的规格,按待迁移的数据量选择,一般选择cdm.medium即可,满足大 部分迁移场景。
● CDM集群所在VPC、子网、安全组,选择与MRS集群所在的网络一致。
步骤2 CDM集群创建完成后,选择集群操作列的“绑定弹性IP”,CDM通过EIP访问 MySQL。
图7-7 集群列表
说明
如果用户对本地数据源的访问通道做了SSL加密,则CDM无法通过弹性IP连接数据源。
----结束
创建 MySQL 连接
步骤1 在集群管理界面,单击集群后的“作业管理”,选择“连接管理 > 新建连接”,进入 连接器类型的选择界面,如图7-8所示。
图7-8 选择连接器类型
步骤2 选择“MySQL”后单击“下一步”,配置MySQL连接的参数。
图7-9 创建 MySQL 连接
单击“显示高级属性”可查看更多可选参数,具体请参见配置关系数据库连接。这里 保持默认,必填参数如表7-3所示。
表7-3 MySQL 连接参数
参数名 说明 取值样例
名称 输入便于记忆和区分的连接名称。 mysqllink 数据库服务器 MySQL数据库的IP地址或域名。 192.168.1.110
端口 MySQL数据库的端口。 3306
数据库名称 MySQL数据库的名称。 sqoop
参数名 说明 取值样例 用户名 拥有MySQL数据库的读、写和删除权
限的用户。 admin
密码 用户的密码。
-使用Agent 是否选择通过Agent从源端提取数 据。
是
Agent 单击“选择”,选择连接Agent中已
创建的Agent。
-步骤3 单击“保存”回到连接管理界面。
说明
如果保存时出错,一般是由于MySQL数据库的安全设置问题,需要设置允许CDM集群的EIP访问 MySQL数据库。
----结束
创建 Hive 连接
步骤1 在连接管理界面,单击“新建连接”,连接器类型选择“MRS Hive”。
步骤2 单击“下一步”配置Hive连接参数,如图7-10所示。
图7-10 创建 Hive 连接
各参数说明如表7-4所示,需要您根据实际情况配置。
表7-4 MRS Hive 连接参数
参数名 说明 取值样例
名称 连接的名称,根据连接的数据源类型,用户可自定 义便于记忆、区分的连接名。
hivelink
Manager IP MRS Manager的浮动IP地址,可以单击输入框后的
“选择”来选定已创建的MRS集群,CDM会自动填 充下面的鉴权参数。
127.0.0.1
参数名 说明 取值样例 认证类型 访问MRS的认证类型:
● SIMPLE:非安全模式选择Simple鉴权。
● KERBEROS:安全模式选择Kerberos鉴权。
SIMPLE
Hive版本 Hive的版本。根据服务端Hive版本设置。 HIVE_3_X 用户名 选择KERBEROS鉴权时,需要配置MRS Manager的
用户名和密码。从HDFS导出目录时,如果需要创 建快照,这里配置的用户需要HDFS系统的管理员 权限。
如果要创建MRS安全集群的数据连接,不能使用 admin用户。因为admin用户是默认的管理页面用 户,这个用户无法作为安全集群的认证用户来使 用。您可以创建一个新的MRS用户,然后在创建 MRS数据连接时,“用户名”和“密码”填写为新 建的MRS用户及其密码。
说明
● 如果CDM集群为2.9.0版本及之后版本,且MRS集群为 3.1.0及之后版本,则所创建的用户至少需具备 Manager_viewer的角色权限才能在CDM创建连接;
如果需要对应组件的进行库、表、数据的操作,还需 要添加对应组件的用户组权限。
● 如果CDM集群为2.9.0之前的版本,或MRS集群为3.1.0 之前的版本,则所创建的用户需要具备
Manager_administrator或System_administrator权 限,才能在CDM创建连接。
● 仅具备Manager_tenant或Manager_auditor权限,无 法创建连接。
cdm
密码 访问MRS Manager的用户密码。 -OBS支持 需服务端支持OBS存储。在创建Hive表时,您可以
指定将表存储在OBS中。 否
运行模式 “HIVE_3_X”版本支持该参数。支持以下模式:
● EMBEDDED:连接实例与CDM运行在一起,该 模式性能较好。
● STANDALONE:连接实例运行在独立进程。如 果CDM需要对接多个Hadoop数据源(MRS、
Hadoop或CloudTable),并且既有KERBEROS 认证模式又有SIMPLE认证模式,只能使用 STANDALONE模式或者配置不同的Agent。
说明:STANDALONE模式主要是用来解决版本 冲突问题的运行模式。当同一种数据连接的源端 或者目的端连接器的版本不一致时,存在jar包 冲突的情况,这时需要将源端或目的端放在 STANDALONE进程里,防止冲突导致迁移失 败。
EMBEDDED
是否使用集
群配置 您可以通过使用集群配置,简化Hadoop连接参数 配置。
否
参数名 说明 取值样例 集群配置名 仅当“是否使用集群配置”为“是”时,此参数有
效。此参数用于选择用户已经创建好的集群配置。
集群配置的创建方法请参见管理集群配置。
hive_01
步骤3 单击“保存”回到连接管理界面。
----结束
创建迁移作业
步骤1 选择“表/文件迁移 > 新建作业”,开始创建数据迁移任务,如图7-11所示。
图7-11 创建 MySQL 到 Hive 的迁移任务
说明
“导入前清空数据”选“是”,这样每次导入前,会将之前已经导入到Hive表的数据清空。
步骤2 作业参数配置完成后,单击“下一步”,进入字段映射界面,如图7-12所示。
映射MySQL表和Hive表字段,Hive表比MySQL表多三个字段y、ym、ymd,即是Hive 的分区字段。由于没有源表字段直接对应,需要配置表达式从源表的StartDate字段抽 取。
图7-12 Hive 字段映射
步骤3 单击 进入转换器列表界面,再选择“新建转换器 > 表达式转换”,如图7-13所 示。
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")
图7-13 配置表达式
说明
CDM的表达式已经预置常用字符串、日期、数值等类型的字段内容转换,详细请参见字段转 换。
步骤4 单击“下一步”配置任务参数,一般情况下全部保持默认即可。
该步骤用户可以配置如下可选功能:
● 作业失败重试:如果作业执行失败,可选择是否自动重试,这里保持默认值“不 重试”。
● 作业分组:选择作业所属的分组,默认分组为“DEFAULT”。在CDM“作业管 理”界面,支持作业分组显示、按组批量启动作业、按分组导出作业等操作。
● 是否定时执行:如果需要配置作业定时自动执行,请参见配置定时任务。这里保 持默认值“否”。
● 抽取并发数:设置同时执行的抽取任务数。这里保持默认值“1”。
● 是否写入脏数据:如果需要将作业执行过程中处理失败的数据、或者被清洗过滤 掉的数据写入OBS中,以便后面查看,可通过该参数配置,写入脏数据前需要先 配置好OBS连接。这里保持默认值“否”即可,不记录脏数据。
● 作业运行完是否删除:这里保持默认值“不删除”。
步骤5 单击“保存并运行”,回到作业管理界面,在作业管理界面可查看作业执行进度和结 果。
步骤6 作业执行成功后,单击作业操作列的“历史记录”,可查看该作业的历史执行记录、
读取和写入的统计数据。
在历史记录界面单击“日志”,可查看作业的日志信息。
----结束