Apache Beam -- 简介

https://blog.csdn.net/qq_34777600/article/details/87165765

概述
在大数据的浪潮之下,技术的更新迭代十分频繁。受技术开源的影响,大数据开发者提供了十分丰富的工具。但也因为如此,增加了开发者选择合适工具的难度。在大数据处理一些问题的时候,往往使用的技术是多样化的。这完全取决于业务需求,比如进行批处理的MapReduce,实时流处理的Flink,以及SQL交互的Spark SQL等等。而把这些开源框架,工具,类库,平台整合到一起,所需要的工作量以及复杂度,可想而知。这也是大数据开发者比较头疼的问题。而今天要分享的就是整合这些资源的一个解决方案,它就是 Apache Beam。

Beam是一个统一的编程框架,支持批处理和流处理,并可以将用Beam编程模型构造出来的程序,在多个计算引擎(Apache Apex, Apache Flink, Apache Spark, Google Cloud Dataflow等)上运行。

Apache Beam 是什么?
Apache Beam是大数据的编程模型,定义了数据处理的编程范式和接口,它并不涉及具体的执行引擎的实现,但是,基于Beam开发的数据处理程序可以执行在任意的分布式计算引擎上,目前Dataflow、Spark、Flink、Apex提供了对批处理和流处理的支持,GearPump提供了流处理的支持,Storm的支持也在开发中。

综上所述,Apache Beam的目标是:

提供统一批处理和流处理的编程范式
能运行在任何可执行的引擎之上
为无限、乱序、互联网级别的数据集处理提供简单灵活、功能丰富以及表达能力十分强大的SDK。

那 Apache Beam到底能解决哪些问题,它的应用场景是什么,下面我们可以通过一张图来说明,如下图所示:

通过上图,我们可以很清晰的看到整个技术的发展流向;一部分是谷歌派系,另一部分则是Apache派系。在开发大数据应用时,我们有时候使用谷歌的框架,API,类库,平台等,而有时候我们则使用Apache的,比如:HBase,Flink,Spark等。而我们要整合这些资源则是一个比较头疼的问题,Apache Beam 的问世,整合这些资源提供了很方便的解决方案。

Beam构成
下面,我们通过一张流程图来看Beam的运行流程,如下图所示:

通过上图,我们可以清楚的知道,执行一个流程分以下步骤:

End Users:选择一种你熟悉的编程语言提交应用
SDK Writers:该编程语言必须是 Beam 模型支持的
Library Writers:转换成Beam模型的格式
Runner Writers:在分布式环境下处理并支持Beam的数据处理管道
IO Providers:在Beam的数据处理管道上运行所有的应用
DSL Writers:创建一个高阶的数据处理管道
Beam编程模型
Beam的编程模型是Google的工程师从MapReduce, FlumeJava, 和Millwheel等多个大数据处理项目中抽象出来的,如果想详细了解可以参考相关的报考和论文,Streaming 101,Streaming 102 和VLDB 2015 paper.。这个编程模型主要包括如下几个核心概念:

PCollection:数据集,代表了将要被处理的数据集合,可以是有限的数据集,也可以是无限的数据流。
PTransform:计算过程,代表了将输入数据集处理成输出数据集中间的计算过程,
Pipeline:管道,代表了处理数据的执行任务,可视作一个有向无环图(DAG),PCollections是节点,Transforms是边。
PipelineRunner:执行器,指定了Pipeline将要在哪里,怎样的运行。
其中PTransform还包括很多操作,如:

ParDo:通用的并行处理的PTranform, 相当于Map/Shuffle/Reduce-style 中的Map,可用于过滤 、类型转换 、抽取部分数据 、 对数据中的每一个元素做计算等
GroupByKey:用来聚合key/value对,相当于Map/Shuffle/Reduce-style中的Shuffle, 聚合那些拥有同一个key的value
CoGroupByKey:用来聚合多个集合,功能和GroupByKey类似
Combine:处理集合里的数据,如sum, min, and max(sdk预定义),也可以自建新类
Flatten:用来把多个数据集合并成一个数据集
Partition:用来把一个数据集分割成多个小数据集
此外还有一些核心概念,如:

Windowing:把PCollections数据集中元素通过时间戳分成多个子集
Watermark:标记了多久时间后的延迟数据直接抛弃
Triggers:用来决定什么时候发送每个window的聚合结果
Beam的编程模型可简单概括为

[Output PCollection] = [Input PCollection].apply([Transform])

数据输入+数据集+数据处理+数据输出=数据处理流程。

核心问题
Apache Beam的核心围绕着4个问题:

What 计算的结果是什么? 
      Pipeline中的转换来决定结果。例如计算总和,构建直方图,训练机器学习模型等等。它也是经典批处理回答的问题。对应的抽象概念为PTransform。

Where 在事件时间中的哪个位置计算结果? 
      这个问题是通过在Pipeline中使用事件时间窗口来回答的。这包括从Streaming 101(固定,滑动和会话)窗口的常见示例,似乎没有窗口概念的用例(例如,Streaming 101中描述的时间不可知处理;经典批处理也通常属于此类别)和其他更复杂的窗口类型,如时间有限的拍卖。还要注意,它可以包括处理时间窗口,如果在记录到达系统时将入口时间指定为记录的事件时间。对应的抽象概念为Window。

When 在处理时间中的哪个时刻触发计算结果? 
      通过使用Watermark和触发器来回答的这个问题。这个主题有无穷的变化,但最常见的模式是在给定窗口的输入完成时使用Watermak来描绘,触发器允许提前计算结果(对于在窗口完成之前发出的推测性的、部分的结果)和延迟计算结果(Watermark只是预估窗口的数据全部到达,并不是100%确定,在Watermark声明给定窗口的全部到达之后,也有可能会有隶属于该窗口的数据到达)。对应的抽象概念为Watermarks和Triggers。

How 如何修正结果? 
      这个问题由所使用的累积类型回答:丢弃(其中结果是相互独立和不同的),累加(后来的结果建立在先前的结果上),累加和撤销(当前的累加值和上次触发的值撤销一起发送)。对应的抽象概念为Accumulation。

总结
Apache Beam 主要针对理想并行的数据处理任务,并通过把数据集拆分多个子数据集,让每个子数据集能够被单独处理,从而实现整体数据集的并行化处理。当然,也可以用 Beam 来处理抽取,转换和加载任务和数据集成任务(一个ETL过程)。进一步将数据从不同的存储介质中或者数据源中读取,转换数据格式,最后加载到新的系统中。
————————————————
版权声明:本文为CSDN博主「一只IT小小鸟」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34777600/article/details/87165765

原文地址:https://www.cnblogs.com/dhcn/p/12203256.html

时间: 2024-10-12 12:25:21

Apache Beam -- 简介的相关文章

Apache使用简介

Apache使用简介 1.全局配置配置信 1) 配置持久连接 KeepAlive <On|Off>             #是否开启持久连接功能 MaxKeepAliveRequest 100     #一次持久连接最大的请求个数 KeepAliveTimeout 15            #持久连接的超时时间 2) 配置监听IP和端口 Listen [IP:]Port                  #设置监听的IP地址以及端口,本选项可以指定多个,以支持监听多个IP及端口 3) 模块

Apache Beam WordCount编程实战及源码解读

概述:Apache Beam WordCount编程实战及源码解读,并通过intellij IDEA和terminal两种方式调试运行WordCount程序,Apache Beam对大数据的批处理和流处理,提供一套先进的统一的编程模型,并可以运行大数据处理引擎上.完整项目Github源码 负责公司大数据处理相关架构,但是具有多样性,极大的增加了开发成本,急需统一编程处理,Apache Beam,一处编程,处处运行,故将折腾成果分享出来. 1.Apache Beam编程实战–前言,Apache B

Apache Ant 简介和配置

Apache Ant 简介 Apache Ant是目前事实上的Java应用的标准build脚本工具.使它大受欢迎的一个主要愿意是它的和灵活,允许程序员创建自己的Task来对Ant进行扩展. 本文主要内容有: 对Ant的简介 介绍常用的Ant脚本 Ant的安装 Apache Ant是Apache基金会下的一个项目, 官网:http://ant.apache.org/ 下载地址:http://ant.apache.org/bindownload.cgi 根据不同的平台下载不同的压缩包,直接解压到安装

Apache Shiro 简介(转)

使用 Apache Shiro 为 web 应用程序进行用户身份验证 Shiro 是一个 Apache Incubator 项目,旨在简化身份验证和授权.在本文中,了解 Apache Shiro 并通过示例来在一个 Groovy web 应用程序中尝试使用 Shiro 进行身份验证和授权. Apache Shiro 是一个框架,可用于身份验证和授权.本文提供了几个示例用来展示如何在 Java™ 应用程序中使用 Shiro 并给出了如何在一个 Grails web 应用程序中使用它的概述.为了从本

Why Apache Beam? A data Artisans perspective

https://cloud.google.com/dataflow/blog/dataflow-beam-and-spark-comparison https://github.com/apache/incubator-beam https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-101 https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-102 h

Apache Beam 剖析

1.概述 在大数据的浪潮之下,技术的更新迭代十分频繁.受技术开源的影响,大数据开发者提供了十分丰富的工具.但也因为如此,增加了开发者选择合适工具的难度.在大数据处理一些问题的时候,往往使用的技术是多样化的.这完全取决于业务需求,比如进行批处理的MapReduce,实时流处理的Flink,以及SQL交互的Spark SQL等等.而把这些开源框架,工具,类库,平台整合到一起,所需要的工作量以及复杂度,可想而知.这也是大数据开发者比较头疼的问题.而今天要分享的就是整合这些资源的一个解决方案,它就是 A

Apache Flink简介

Apache Flink简介 Apache Flink是一个可伸缩的开源批处理和流处理平台.其核心模块是一个数据流引擎,该引擎在分布式的流数据处理的基础上提供数据分发.交流.以及容错的功能,其架构图如下: 该引擎包含如下APIs: 1. DataSet API for static data embedded in Java, Scala, and Python 2. DataStream API for unbounded streams embedded in Java and Scala,

Apache服务简介及编译安装详解

Apache服务简介及编译安装详解 一.Apache简介 Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,是目前世界上使用最广泛的一种web server,它以跨平台,高效和稳定而闻名,可以运行在几乎所有广泛使用的计算机平台上.Apache的特点是简单.速度快.性能稳定,并可做代理服务器来使用. Apache是用C语言开发的基于模块化设计的web应用,总体上看起来代码的可读性高于php代码,它的核心代码并不多,大多数的功能都被分割到各种

初探Apache Beam

文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/9010748.html  转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点,如有不当,欢迎指正. --- 一 引言 2016年2月Google宣布将Beam(原名Google DataFlow)贡献给Apache基金会孵化,成为Apache的一个顶级开源项目. Beam是一个统一的编程框架,支持批处理和流处理,并可以将用Beam编程模型构造出来的程序,在多个计算引擎(Apa