什么是Apache Beam?

我正在浏览Apache的post,发现了一个叫做Beam的新术语。 任何人都可以解释一下Apache Beam究竟是什么? 我试图谷歌,但无法得到明确的答案。

Apache Beam是一个开源的统一模型,用于定义和执行批处理和stream式数据并行处理stream水线,以及一组用于构buildpipe道和特定于运行时特定运行程序的语言特定SDK。

历史:梁背后的模式是从Google的一些内部数据处理项目演变而来,包括MapReduce , FlumeJava和Millwheel 。 这个模型最初被称为“ 数据stream模型 ”,最初是作为Google Cloud Dataflow实现的,其中包括GitHub上的Java SDK,用于编写pipe道和完全托pipe的服务,以便在Google云端平台上执行它们。 社区中的其他人开始编写扩展,包括Spark Runner , Flink Runner和Scala SDK 。 在2016年1月,Google和一些合作伙伴以Apache Beam(统一批+ strEAM处理)的名义提交了数据stream编程模型和SDK部分作为Apache孵化器build议 。 Apache Beam于2016年12月从孵化gradle 。

学习梁模型的额外资源:

  • Apache Beam网站
  • 2015年VLDB论文 (使用原来的命名数据stream模型
  • Streaming 101和Streaming 102在O'Reilly的雷达网站上发布
  • 软件工程收音机上的一个波束播客

Apache Beam (Batch + strEAM)是用于执行批处理和stream数据处理的模型和API集合。 谷歌(通过Cloudera和PayPal)于2016年通过Apache孵化器项目开源。

页面Dataflow / Beam&Spark:编程模型比较 – Cloud Dataflow将Beam API与Apache Spark进行了对比, Apache Spark已经成功地为批处理和stream式传输提供了一个现代的,灵活的API和一套优化技术,超越。

Beam试图通过一个模型来更进一步,这个模型可以很容易地描述乱序处理的各个方面,而这个方法在组合批处理和stream处理时往往是一个问题,正如编程模型比较中所描述的那样。

特别是,从比较中引用数据stream模型的目的是为了更好地解决问题,并且以更模块化,更健壮和更易于维护的方式进行处理:

所有数据处理从业人员在构buildpipe道时必须尝试回答的四个关键问题:

  • 什么结果被计算? 总和,连接,直方图,机器学习模型?
  • 事件发生的时间是在哪里计算的? 每个事件最初发生的时间是否影响结果? 结果汇总在固定的窗口,会话还是单个全局窗口中?
  • 在处理时间结果物化? 在系统内观察每个事件的时间是否会影响结果? 结果何时发出? 据推测,随着数据的发展? 当数据迟到,结果必须修改? 这些的一些组合?
  • 结果的细化如何相关? 如果额外的数据到达并且结果发生变化,它们是独立的还是独立的,它们是互相build立在一起的吗?

Beam中描述的stream水线可以运行在Spark,Flink,Google的Dataflow产品以及其他“运行时”(包括“直接”本地机器选项)上。

体系结构支持各种语言。 Java SDK现在可用。 一个数据streamPython SDK即将发布,其他人可以设想为Scala等。

在Apache Beam的镜像中查看源代码