全部产品
Search
文档中心

检索分析服务Elasticsearch版:通过DataWorks将MySQL数据同步到阿里云ES

更新时间:Jan 02, 2024

如果您需要对MySQL中的数据进行全文检索、多维查询、统计分析等操作,可借助阿里云Elasticsearch实现。本文介绍通过DataWorks的数据集成服务,实现最快分钟级,将MySQL数据离线同步到阿里云ES中。

背景信息

DataWorks是一个基于大数据引擎,集成数据开发、任务调度、数据管理等功能的全链路大数据开发治理平台,其数据集成服务可以实现最快5分钟一次的离线数据采集。您可以通过DataWorks的离线同步任务,快速的将各种数据源中的数据离线同步到阿里云ES。

  • 支持同步的数据源包括:

    • 阿里云云数据库(MySQL、PostgreSQL、SQL Server、MongoDB、HBase)

    • 阿里云PolarDB-X(原DRDS升级版)

    • 阿里云MaxCompute

    • 阿里云OSS

    • 阿里云Tablestore

    • 自建HDFS、Oracle、FTP、DB2及以上数据库类型的自建版本

  • 适用场景:

    • 大数据离线同步到阿里云ES的场景。

    • 将某个表的全部数据同步到阿里云ES的场景。

前提条件

说明
  • 仅支持将数据同步到阿里云ES,不支持自建Elasticsearch。

  • RDS MySQL实例、ES实例和DataWorks工作空间所在地域需保持一致。

  • RDS MySQL实例、ES实例和DataWorks工作空间需要在同一时区下,否则同步与时间相关的数据时,同步前后的数据可能存在时区差。

费用说明

操作步骤

步骤一:准备源数据

在RDS MySQL实例中创建数据库和表。

  • 您可以选择使用阿里云的RDS数据库,也可以在本地服务器上的自建数据库。本文以RDS MySQL数据库为例,创建RDS MySQL数据库及表。具体操作,请参见快速入门

  • 本文使用的建表语句及数据如下。

    -- create table
    CREATE TABLE `es_test` (
        `id` bigint(32) NOT NULL,
        `name` varchar(32) NULL,
        `age` bigint(32) NULL,
        `hobby` varchar(32) NULL,
        PRIMARY KEY (`id`)
    ) ENGINE=InnoDB
    DEFAULT CHARACTER SET=utf8;
    
    -- insert data
    INSERT INTO `es_test` (`id`,`name`,`age`,`hobby`) VALUES (1,'user1',22,'music');
    INSERT INTO `es_test` (`id`,`name`,`age`,`hobby`) VALUES (2,'user2',23,'sport');
    INSERT INTO `es_test` (`id`,`name`,`age`,`hobby`) VALUES (3,'user3',43,'game');
    INSERT INTO `es_test` (`id`,`name`,`age`,`hobby`) VALUES (4,'user4',24,'run');
    INSERT INTO `es_test` (`id`,`name`,`age`,`hobby`) VALUES (5,'user5',42,'basketball');

步骤二:购买并配置独享资源组

购买一个数据集成独享资源组,并为该资源组绑定专有网络和工作空间。独享资源组可以保障数据快速、稳定地传输。

  1. 登录DataWorks控制台

  2. 在顶部菜单栏选择相应地域后,在左侧导航栏单击资源组列表

  3. 独享资源组页签下,单击创建集成资源组

  4. DataWorks独享资源购买页面,独享资源类型选择独享数据集成资源,输入资源组名称,单击立即购买,购买独享资源组。

    更多配置信息,请参见购买资源组

  5. 在已创建的独享资源组的操作列,单击网络设置,为该独享资源组绑定专有网络。具体操作,请参见绑定专有网络

    说明

    本文以独享数据集成资源组通过VPC内网同步数据为例。更多信息,请参见使用独享数据集成资源组执行任务需要在数据库添加的IP白名单

    独享资源需要与RDS MySQL实例和ES实例的专有网络连通才能同步数据,因此需要分别绑定RDS MySQL实例和ES实例所在的专有网络可用区交换机。查看实例所在专有网络信息,请参见切换RDS MySQL专有网络VPC和虚拟交换机查看Elasticsearch实例的基本信息

    重要

    绑定专有网络后,您需要将对应专有网络的交换机网段加入到RDS MySQL、ES实例的私网白名单中。具体操作,请参见设置RDS MySQL实例IP白名单配置Elastic search实例公网或私网访问白名单

  6. 在页面左上角,单击返回图标,返回资源组列表页面,

  7. 在已创建的独享资源组的操作列,单击修改归属工作空间,为该独享资源组绑定目标工作空间。

    具体操作,请参见绑定归属工作空间

步骤三:添加数据源

将RDS MySQL和ES数据源接入DataWorks的数据集成服务中。

  1. 进入DataWorks的数据集成页面。

    1. 登录DataWorks控制台

    2. 在左侧导航栏,单击工作空间列表

    3. 在目标工作空间的操作列,选择快速进入 数据集成

  2. 在左侧导航栏,单击数据源

  3. 新增RDS MySQL数据源。

    1. 数据源列表页面,单击新增数据源

    2. 新增数据源页面,搜索并选择MySQL数据源。

    3. 新增MySQL数据源对话框,在基础信息区域配置数据源参数。

      配置详情,请参见配置MySQL数据源

    4. 连接配置区域,单击测试连通性,连通状态显示为可连通时,表示连通成功。

    5. 单击完成

  4. 使用同样的方式添加ES数据源。配置详情,请参见配置ES数据源

步骤四:配置并运行数据离线同步任务

数据离线同步任务将独享资源组作为一个可以执行任务的资源,独享资源组将获取数据集成服务中数据源的数据,并将数据写入ES。

说明

有两种方式可以配置离线同步任务,文本以向导模式配置离线同步任务为例。您也可以通过脚本模式配置离线同步任务,详情请参见通过脚本模式配置离线同步任务MySQL ReaderElasticsearch Writer

  1. 进入DataWorks的数据开发页面。

    1. 登录DataWorks控制台

    2. 在左侧导航栏,单击工作空间列表

    3. 在目标工作空间的操作列,选择快速进入 数据开发

  2. 新建一个离线同步任务。

    1. 在左侧导航栏,选择新建 > 新建业务流程,新建一个业务流程。

    2. 右键单击新建的业务流程,选择新建节点 > 离线同步

    3. 新建节点对话框中,输入节点名称,单击确认

  3. 配置网络与资源

    1. 数据来源区域,数据来源选择MySQL,数据源名称选择待同步的数据源名称。

    2. 我的资源组区域,选择独享资源组。

    3. 数据去向区域,数据去向选择Elasticsearch,数据源名称选择待同步的数据源名称。

  4. 单击下一步。

  5. 配置任务。

    1. 数据来源区域,选择待同步的表。

    2. 数据去向区域,配置数据去向的各参数。

    3. 字段映射区域中,设置来源字段目标字段的映射关系。具体配置,请参见通过向导模式配置离线同步任务

    4. 通道控制区域,配置通道参数。

    详细配置信息,请参见通过向导模式配置离线同步任务

  6. 运行任务。

    1. (可选)配置任务调度属性。在页面右侧,单击调度配置,按照需求配置相应的调度参数。各配置的详细说明请参见调度配置

    2. 在节点区域的右上角,单击保存图标,保存任务。

    3. 在节点区域的右上角,单击提交图标,提交任务。

      如果您配置了任务调度属性,任务会定期自动执行。您还可以在节点区域的右上角,单击运行图标,立即运行任务。

      运行日志中出现Shell run successfully!表明任务运行成功。

步骤五:验证数据同步结果

  1. 登录目标阿里云ES实例的Kibana控制台。具体操作,请参见登录Kibana控制台

  2. 单击Kibana页面左上角的图标,选择Dev Tools(开发工具)。

  3. Console(控制台)中,执行如下命令查看同步的数据。

    POST /es_test/_search?pretty
    {
    "query": { "match_all": {}}
    }
    说明

    es_test需要替换为您在数据同步任务中设置的索引名称。

    数据同步成功后,返回如下结果。image..png