使用云工作流和函数计算轻松构建ETL离线数据处理系统

您可以使用云工作流和函数计算轻松构建ETL离线数据处理系统,实现更灵活、成本更低的数据处理解决方案。您无需管理底层服务器资源,从而更加聚焦于业务逻辑本身。

背景信息

随着云计算、人工智能、物联网等新技术的应用普及,人类产生的数据呈现出了爆发式增长的趋势,对数据处理的需求能力也提出了越来越高的要求。数据成了重要资产,收集、处理数据的能力成为了核心竞争力,例如,应用服务的运行监控、运营数据的分析以及深度学习的数据过滤、预处理等,这些对已有数据的处理能力将直接影响服务的运营效率。我们可以使用现成的ETL系统完成上述目的,但是在很多情况下您可能希望自建服务。例如:

  • 您的数据处理业务不定时运行,希望在无任务时,不消耗任何资源。

  • 您的数据处理需求只有简单的几个步骤,使用自建服务更迅速。

  • 您的数据处理业务流程有较多的自定义步骤,但现成系统灵活性不足,自建才能满足业务需求。

  • 您不希望消耗过多精力搭建和维护系统中使用的各类开源数据处理模块,但希望在大并发数据处理请求的场景下能够有良好的性能表现。

如果您有上述需求,或者希望实现一个高度灵活高度可靠低成本高性能的离线数据处理系统,那么本文提供的Serverless技术方案将是您的最佳选择。

使用场景

假设我们有一批待处理数据,数据的值为data_1data_2。我们的数据处理目的是统计各类数据的出现次数,并将统计结果存储到数据仓库中。当数据量级达到一定程度,或数据源异构的情况下,我们很难一次性通过一个进程在短时间内快速处理完成,在这种场景下,云工作流 +函数计算的组合提供了高效的解决方案。

为方便展示数据处理方面的核心能力,在数据仓库的存储方面,我们使用阿里云对象存储OSS来代表各种类型的数据库等作为基础存储设施。

下述方案将展示如何使用云工作流+函数计算实现一个低成本高弹性的数据处理系统。在这个系统中,函数计算将根据数据量大小动态提供底层计算资源用于数据的处理、统计等工作,云工作流将协助实现复杂业务上下游的逻辑编排。

实现原理

在一般的数据处理业务中,主要关注点如下:

数据源:需要处理的数据源。一般情况下,我们的数据往往来源于各类数据库、文本文件(日志文件)等。在本示例中,我们使用函数生成少量数据用作功能性的展示。在实际场景中,您可以使用各类自定义的数据源作为系统数据输入来源。

处理框架/模式:MapReduce,本示例中使用云工作流实现。

目的端:数据仓库。在本示例中,我们使用 OSS 作为数据仓库,即最终处理后数据的目的端。

数据处理流程

我们首先将原始数据随机分成3~5个shards,每个shard中包含两种类型的数据。对每个shard先分别进行类型统计,并将中间结果存储(Map)。最后,我们统一处理各shard的统计结果,对结果求和并存储最终结果(Reduce)。业务流程如下:

  1. 从数据源获取数据;

  2. 对数据按照某种规则或随机划分 shard;

  3. 使用MapReduce提高数据并行处理能力,对数据进行处理;

  4. 存储至最终目的源。

结合我们所使用的阿里云服务,系统的模块及交互关系如下图。

image

前提条件

操作步骤

  1. 函数计算应用中心一键部署云工作流与函数。

    1. 访问ETLDataProcessing模板

    2. 单击一键部署跳转到函数计算的应用中心,开始快速部署应用。image

    3. 创建应用页面,配置以下参数,然后单击创建并部署默认环境

      重点参数配置如下,其余参数保持默认值即可。

      参数名称

      参数说明

      基础信息

      部署类型

      选择直接部署

      角色名称

      • 如果您使用的是阿里云账号,第一次在应用中心创建应用,则需要单击前往授权,跳转至角色快捷创建页面,创建AliyunFCServerlessDevsRole角色,然后单击同意授权

        image.png

      • 如果您使用的是RAM用户,请根据页面提示,将复制的授权链接给到阿里云账号进行授权。授权完成后,单击已完成授权

        image.png

        说明

        如果页面提示无法获取角色,请联系对应的阿里云账号给当前RAM用户赋予AliRAMReadOnlyAccessAliyunFCFullAccess权限。具体操作,请参见通过阿里云账号给RAM用户授权

      高级配置

      地域

      选择应用部署的地域。

      工作流名执行角色

      工作流执行使用的服务角色。请提前创建角色,并为其授予AliyunFCInvocationAccess权限策略。

      函数服务角色

      函数计算访问其他云服务时使用的服务角色,如果没有特殊要求,建议使用函数计算提供的默认服务角色AliyunFCDefaultRole。

      对象存储存储桶名

      填写与工作流和函数相同地域下的Bucket名称。

      等待1~2分钟后,应用部署成功,系统将自动创建3个函数以及对应的1个工作流etl-data-processing-2q1i,您可以分别登录函数计算控制台云工作流控制台查看创建结果。

      • shards-spliter: 用于读取数据源,并依据某种规则对源数据划分shard,将shard返回给工作流。

      • mapper: MapReduce框架中的Map函数。在该函数中针对传入的shard数据进行过滤、清洗、计算。往往一次数据处理流程中将会根据shard数并行生成多个函数实例以提高数据处理速度。每个map函数处理结束后,结果将会被存储到OSS的特定目录下。

      • reducer: MapReduce框架中的Reduce函数。在该函数中针对map的处理结果进行集成、合并,并推送最终结果至OSS。

      您可从函数计算控制台对应应用获取本示例的全部代码。

  2. 验证结果。

    1. 登录云工作流控制台,然后在顶部菜单栏,选择地域。

    2. 在工作流列表,单击目标工作流etl-data-processing-2q1i,在工作流详情页面,选择执行记录页签,单击启动执行执行工作流。

      执行完成后,查看工作流的输入和输出。

      image

    3. 登录对象存储OSS控制台,查看分片内容与合并处理内容。

      image