文档首页/ 云数据迁移 CDM/ 最佳实践/ 使用教程/ MySQL数据迁移到MRS Hive分区表
更新时间:2024-08-30 GMT+08:00

MySQL数据迁移到MRS Hive分区表

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表字段定义如图1所示。

图1 MySQL表字段

使用CDM将MySQL中的表trip_data导入到MRS Hive分区表,流程如下:

  1. 在MRS Hive上创建Hive分区表
  2. 创建CDM集群并绑定EIP
  3. 创建MySQL连接
  4. 创建Hive连接
  5. 创建迁移作业

前提条件

  • 已经购买MRS。
  • 已获取连接MySQL数据库的IP地址、端口、数据库名称、用户名、密码,且该用户拥有MySQL数据库的读写权限。
  • 已在CDM集群的作业管理 > 连接管理 > 驱动管理页面,上传了MySQL数据库驱动。

在MRS Hive上创建Hive分区表

在MRS的Hive上使用下面SQL语句创建一张Hive分区表,表名与MySQL上的表trip_data一致,且Hive表比MySQL表多建三个字段y、ym、ymd,作为Hive的分区字段。SQL语句如下:
1
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集群;如果是作为DataArts Studio服务CDM组件使用,参考创建集群创建CDM集群。

    关键配置如下:

    • CDM集群的规格,按待迁移的数据量选择,一般选择cdm.medium即可,满足大部分迁移场景。
    • CDM集群所在VPC、子网、安全组,选择与MRS集群所在的网络一致。

  2. CDM集群创建完成后,选择集群操作列的“绑定弹性IP”,CDM通过EIP访问MySQL。

    图2 集群列表

    如果用户对本地数据源的访问通道做了SSL加密,则CDM无法通过弹性IP连接数据源。

创建MySQL连接

  1. 在CDM集群管理界面,单击集群后的“作业管理”,选择连接管理 > 新建连接,进入连接器类型的选择界面,如图3所示。

    图3 选择连接器类型

  2. 选择“云数据库 MySQL”后单击“下一步”,配置云数据库 MySQL连接的参数。

    单击“显示高级属性”可查看更多可选参数,具体请参见配置云数据库MySQL/MySQL数据库连接。这里保持默认,必填参数如表1所示。

    表1 MySQL连接参数

    参数名

    说明

    取值样例

    名称

    输入便于记忆和区分的连接名称。

    mysqllink

    数据库服务器

    MySQL数据库的IP地址或域名。

    -

    端口

    MySQL数据库的端口。

    3306

    数据库名称

    MySQL数据库的名称。

    sqoop

    用户名

    拥有MySQL数据库的读、写和删除权限的用户。

    admin

    密码

    用户的密码。

    -

    使用本地API

    使用数据库本地API加速(系统会尝试启用MySQL数据库的local_infile系统变量)。

    使用Agent

    Agent功能待下线,无需配置。

    -

    local_infile字符集

    MySQL通过local_infile导入数据时,可配置编码格式。

    utf8

    驱动版本

    CDM连接关系数据库前,需要先上传所需关系数据库的JDK8版本.jar格式驱动。MySQL的驱动请从https://downloads.mysql.com/archives/c-j/选择5.1.48版本下载,从中获取mysql-connector-java-5.1.48.jar,然后进行上传。

    -

  3. 单击“保存”回到连接管理界面。

    如果保存时出错,一般是由于MySQL数据库的安全设置问题,需要设置允许CDM集群的EIP访问MySQL数据库。

创建Hive连接

  1. 单击CDM集群后的“作业管理”,进入作业管理界面,再选择连接管理 > 新建连接,进入选择连接器类型的界面,如图4所示。

    图4 选择连接器类型

  2. 连接器类型选择“MRS Hive”后单击“下一步”配置Hive连接参数。

    各参数说明如表2所示,需要您根据实际情况配置。

    表2 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创建连接;如果需要对MRS组件的库、表、列进行操作,还需要参考MRS文档添加对应组件的库、表、列操作权限。
    • 如果CDM集群为2.9.0之前的版本,或MRS集群为3.1.0之前的版本,则所创建的用户需要具备Manager_administrator或System_administrator权限,才能在CDM创建连接。
    • 仅具备Manager_tenant或Manager_auditor权限,无法创建连接。

    cdm

    密码

    访问MRS Manager的用户密码。

    -

    开启LDAP认证

    通过代理连接的时候,此项可配置。

    当MRS Hive对接外部LDAP开启了LDAP认证时,连接Hive时需要使用LDAP账号与密码进行认证,此时必须开启此参数,否则会连接失败。

    LDAP用户名

    “开启LDAP认证”参数选择为“是”时,此参数是必选项。

    填写为MRS Hive开启LDAP认证时配置的用户名。

    -

    LDAP密码

    “开启LDAP认证”参数选择为“是”时,此参数是必选项。

    填写为MRS Hive开启LDAP认证时配置的密码。

    -

    OBS支持

    需服务端支持OBS存储。在创建Hive表时,您可以指定将表存储在OBS中。

    访问标识(AK)

    “OBS支持”参数选择为“是”时,此参数是必选项。请注意,此处AK/SK对应的账号应具备OBS Buckets Viewer系统权限,否则会无法访问OBS并报“403 AccessDenied”错误。

    您需要先创建当前账号的访问密钥,并获得对应的AK和SK。

    1. 登录控制台,在用户名下拉列表中选择“我的凭证”。
    2. 进入“我的证”页面,选择访问密钥 > 新增访问密钥,如图5所示。
      图5 单击新增访问密钥
    3. 单击“确定”,根据浏览器提示,保存密钥文件。密钥文件会直接保存到浏览器默认的下载文件夹中。打开名称为“credentials.csv”的文件,即可查看访问密钥(Access Key Id和Secret Access Key)。
      说明:
      • 每个用户仅允许新增两个访问密钥。
      • 为保证访问密钥的安全,访问密钥仅在初次生成时自动下载,后续不可再次通过管理控制台界面获取。请在生成后妥善保管。

    -

    密钥(SK)

    -

    运行模式

    “HIVE_3_X”版本支持该参数。支持以下模式:
    • EMBEDDED:连接实例与CDM运行在一起,该模式性能较好。
    • STANDALONE:连接实例运行在独立进程。如果CDM需要对接多个Hadoop数据源(MRS、Hadoop或CloudTable),并且既有KERBEROS认证模式又有SIMPLE认证模式,只能使用STANDALONE模式。
      说明:

      STANDALONE模式主要是用来解决版本冲突问题的运行模式。当同一种数据连接的源端或者目的端连接器的版本不一致时,存在jar包冲突的情况,这时需要将源端或目的端放在STANDALONE进程里,防止冲突导致迁移失败。

    EMBEDDED

    检查Hive JDBC连通性

    是否需要测试Hive JDBC连通。

    是否使用集群配置

    您可以通过使用集群配置,简化Hadoop连接参数配置。

    集群配置名

    仅当“是否使用集群配置”为“是”时,此参数有效。此参数用于选择用户已经创建好的集群配置。

    集群配置的创建方法请参见管理集群配置

    hive_01

  3. 单击“保存”回到连接管理界面。

创建迁移作业

  1. 选择表/文件迁移 > 新建作业,开始创建数据迁移任务,如图6所示。

    图6 创建MySQL到Hive的迁移任务

    “导入前清空数据”“是”,这样每次导入前,会将之前已经导入到Hive表的数据清空。

  2. 作业参数配置完成后,单击“下一步”,进入字段映射界面,如图7所示。

    映射MySQL表和Hive表字段,Hive表比MySQL表多三个字段y、ym、ymd,即是Hive的分区字段。由于没有源表字段直接对应,需要配置表达式从源表的StartDate字段抽取。

    图7 Hive字段映射

  3. 单击进入转换器列表界面,再选择新建转换器 > 表达式转换,如图8所示。

    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")

    图8 配置表达式

    CDM的表达式已经预置常用字符串、日期、数值等类型的字段内容转换,详细请参见字段转换

  4. 单击“下一步”配置任务参数,一般情况下全部保持默认即可。

    该步骤用户可以配置如下可选功能:
    • 作业失败重试:如果作业执行失败,可选择是否自动重试,这里保持默认值“不重试”
    • 作业分组:选择作业所属的分组,默认分组为“DEFAULT”。在CDM“作业管理”界面,支持作业分组显示、按组批量启动作业、按分组导出作业等操作。
    • 是否定时执行:如果需要配置作业定时自动执行可开启。这里保持默认值“否”
    • 抽取并发数:设置同时执行的抽取任务数,适当的抽取并发数可以提升迁移效率,配置原则请参见性能调优。这里保持默认值“1”
    • 是否写入脏数据:如果需要将作业执行过程中处理失败的数据、或者被清洗过滤掉的数据写入OBS中,以便后面查看,可通过该参数配置,写入脏数据前需要在CDM先配置好OBS连接。这里保持默认值“否”即可,不记录脏数据。
    图9 任务配置

  5. 单击“保存并运行”,回到作业管理界面,在作业管理界面可查看作业执行进度和结果。
  6. 作业执行成功后,单击作业操作列的“历史记录”,可查看该作业的历史执行记录、读取和写入的统计数据。

    在历史记录界面单击“日志”,可查看作业的日志信息。