Apache Beam:下一代的数据处理标准.docx
《Apache Beam:下一代的数据处理标准.docx》由会员分享,可在线阅读,更多相关《Apache Beam:下一代的数据处理标准.docx(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Apache Beam:下一代的数据处理标准Apache Beam (原名 Google DataFlow)是 Google在 2016 年 2 月份贡献给 Apache 基金 会的孵化项目,被认为是继MapReduce、GFS和BigQuery等之后,Google在大数据处理 领域对开源社区的又一贡献。Apache Beam的主要目标是统一批处理和流处理的编程范式, 为无限、乱序,Web-Scale的数据集处理提供简单灵活、功能丰富以及表达能力十分强大 的SDK。Apache Beam项目重点在于数据处理的编程范式和接口定义,并不涉及具体执行 引擎的实现。本文主要介绍Apache Beam的
2、编程范式Beam Model,以及通过BeamSDK如何方便灵活地编写分布式数据处理业务逻辑,希望读者能够通过本文对Apache Beam有初步了解,同时对于分布式数据处理系统如何处理乱序无限数据流的能力有初步认 识。Apache Beam基本架构随着分布式数据处理不断发展,业界涌现出越来越多的分布式数据处理框架,从最早的 Hadoop MapReduce,至ij Apache Spark Apache Storm 以及更近的 Apache Flink Apache Apex等。新的分布式处理框架可能带来更高性能,更强大功能,更低延迟等,但用户切换 到新分布式处理框架的代价也非常大:需要学习一
3、个新的数据处理框架,并重写所有业务逻 辑。解决这个问题的思路包括两部分,首先,需要一个编程范式,能够统一规范分布式数据 处理的需求,例如统一批处理和流处理的需求。其次,生成的分布式数据处理任务应该能够 在各个分布式引擎上执行,用户可以自由切换执行引擎与执行环境。Apache Beam正是为 了解决以上问题而提出的。它主要由Beam SDK和Beam Runner组成,Beam SDK定义 了开发分布式数据处理任务业务逻辑的API接口,生成的的分布式数据处理任务Pipeline 交给具体的Beam Runner执行引擎。Apache Beam目前支持的API接口由Java语言实现, Python
4、版本的API正在开发之中。它支持的底层执行引擎包括Apache FlinkApache Spark 以及 Google Cloud Platform,止匕夕卜 Apache Storm、Apache Hadoop Apache Gearpump 等执行引擎的支持也在讨论或开发中。其基本架构如图1。图1 Apache Beam架构图需要注意的是,虽然Apache Beam社区非常希望所有的Beam执行引擎都能够支持Beam SDK定义的功能全集,但在实际实现中可能并不一定。例如,基于MapReduce的Runner 显然很难实现和流处理相关的功能特性。目前Google DataFlow Clou
5、d是对Beam SDK功 能集支持最全面的执行引擎,在开源执行引擎中,支持最全面的则是Apache Flink。Beam ModelBeam Model指Beam的编程范式,即Beam SDK背后的设计思想。在介绍Beam Model 前,先介绍下Beam Model要处理的问题域与基本概念。数据。要处理的数据一般可以分为两类,有限的数据集和无限的数据流。对于前者,比如一个HDFS中的文件,一个HBase表等,特点是数据提前已经存在,一般也己经 持久化,不会突然消失。而无限的数据流,比如Kafka中流过来的系统日志流,或是 从Twitter API拿到的Twitter流等,这类数据的特点是动态
6、流入,无穷无尽,无法全部 持久化。一般来说,批处理框架的设计目标是用来处理有限的数据集,流处理框架的 设计目标是用来处理无限的数据流。有限的数据集可以看做无限数据流的一种特例, 但是从数据处理逻辑角度,这两者并无不同之处。例如,假设微博数据包含时间戳和 转发量,用户希望按照每小时的转发量统计总和,此业务逻辑应该可以同时在有限数 据集和无限数据流上执行,并不应该因为数据源的不同而对业务逻辑的实现产生任何 影响。 时间。Process Time是指数据进入分布式处理框架的时间,而Event-Time则是指 数据产生的时间。这两个时间通常是不同的,例如,对于一个处理微博数据的流计算 任务,一条201
7、6-06-01-12:00:00发表的微博经过网络传输等延迟可能在 2016060112:01:30才进入到流处理系统中。批处理任务通常进行全量的数据计算, 较少关注数据的时间属性,但是对于流处理任务来说,由于数据流是无穷无尽的,无 法进行全量计算,通常是对某个窗口中的数据进行计算。对于大部分的流处理任务来 说,按照时间进行窗口划分,可能是最常见的需求。 乱序。对于流处理框架的数据流来说,其数据的到达顺序可能并不严格按照 Event-Time的时间顺序。如果基于Process Time定义时间窗口,数据到达的顺序就是 数据的顺序,因此不存在乱序问题。但对于基于Event Time定义的时间窗口
8、来说,可 能存在时间靠前的消息在时间靠后的消息后到达的情况,这在分布式的数据源中可能 非常常见。对于这种情况,如何确定迟到数据,以及对于迟到数据如何处理通常是很 棘手的问题。Beam Model处理的目标数据是无限的时间乱序数据流,不考虑时间顺序或是有限的数据集 可看做是无限乱序数据流的一个特例。Beam Model从下面四个维度归纳了用户在进行数据 处理的时候需要考虑的问题: Whato如何对数据进行计算?例如,Sum、Join或是机器学习中训练学习模型等。 在Beam SDK中由Pipeline中的操作符指定。 Where。数据在什么范围中计算?例如,基于Process-Time的时间窗口
9、,基于 Event-Time的时间窗口、滑动窗口等。在BeamSDK中由Pipeline中的窗口指定。 Wheno何时将计算结果输出?例如,在1小时的Event-Time时间窗口中,每隔1 分钟,将当前窗口计算结果输出。在BeamSDK中由Pipeline中的Watermark和触发 器指定。 Howo迟到数据如何处理?例如,将迟到数据计算增量结果输出,或是将迟到数据 计算结果和窗口内数据计算结果合并成全量结果输出。在Beam SDK中由 Accumulation 指定。Beam Model将“WWWH”四个维度抽象出来组成了 Beam SDK,用户在基于它构建数据处 理业务逻辑时,在每一步只
10、需要根据业务需求按照这四个维度调用具体的API即可生成分 布式数据处理Pipeline,并提交到具体执行引擎上。“WWWH”四个维度的抽象仅关注业务逻 辑本身,和分布式任务如何执行没有任何关系。Beam SDK不同于Apache Flink或是Apache Spark, Beam SDK使用同一套API表示数据源、输出目 标以及操作符等。下面介绍4个基于Beam SDK的数据处理任务,通过它们,读者可以了 解Beam Model是如何统一灵活地描述批处理和流处理任务的,这3个任务用来处理手机 游戏领域的统计需求,包括: 用户分数:批处理任务,基于有限数据集统计用户分数。 每小时团队分数:批处理
11、任务,基于有限数据集统计每小时,每个团队的分数。 排行榜:流处理任务,2个统计项,每小时每个团队的分数以及用户实时的历史总得分数。下面基于Beam Model的“WWWH”四个维度,分析业务逻辑,并通过代码展示如何通过 BeamSDK实现“WWWH”四个维度的业务逻辑。用户分数统计每个用户的历史总得分数是一个非常简单的任务,在这里我们简单地通过一个批处理任 务实现,每次需要新的用户分数数据,重新执行一次这个批处理任务即可。对于用户分数任 务,“WWWH”四维度分析结果如下:维度要求What分数累加.按用户分组。Where默认,全局窗口。When默认,窗口内全部数据到齐后。How默认,不会出现迟
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Apache Beam:下一代的数据处理标准 Beam 下一代 数据处理 标准
限制150内