写点什么

Apache Beam 基本架构

  • 2022-11-02
    北京
  • 本文字数:1226 字

    阅读完需:约 4 分钟

Apache Beam基本架构

Apache Beam 主要由 Beam SDK 和 Beam Runner 两部分组成。Beam SDK 定义了开发分布式数据处理程序业务逻辑的 API,它描述的分布式数据处理任务 Pipeline 则交给具体的 Beam Runner(执行引擎)进行计算。

1、Beam SDK

Beam SDK 是一套大数据处理统一编程接口,它通过对“有限数据流”和“无限数据流”进行了统一抽象,规范了批处理和流式处理两种大数据计算范式。Beam SDK 提供了以下 4 种计算抽象帮助用户构建数据管道。

1)Pipeline。Pipeline 封装了整个数据处理逻辑的计算过程,包括数据输入、处理以及输出三部分。每个 Beam 应用程序必须创建一个 Pipeline,并定义其运行相关的配置选项(比如采用的计算引擎以及计算引擎相关的参数等)以便告诉 Pipeline 如何运行。


2)PCollection。PCollection 是分布式数据集的抽象。在 Beam 中,数据集可以是有限的(bounded),即来自固定数据源,比如 HDFS 上的文件;也可以是无限的(unbounded),即来自不断更新的数据源,比如 Kafka 消息队列。Pipeline 通常通过读取外部数据源构建一个初始的 PCollection。Pipeline 中每个阶段的输入和输出均为 PCollection。


3)Transform。Transform 是 Pipline 中的一个数据处理操作或步骤。每个 Transform 以一个或多个 PCollection 对象作为输入,依次遍历其中的每个元素并作用在用户定义的函数上,最终产生一个或多个 PCollection 对象。


4)IO Source 与 Sink。Source 和 Sink 是对数据读取和结果存储逻辑的抽象。Source 封装了从外部数据源(比如 HDFS 或 Kafka)读取数据到 Pipeline 相关的代码逻辑;Sink 封装了将 PCollection 写入外部存储系统相关的代码逻辑。


一个基本的 Beam Pipeline 工作流如图所示:

总体上讲,这些计算引擎在数据格式化、数据序列化及数据转换方面拥有不同的抽象,而 Beam 作为构建在计算引擎之上的高级抽象,充分借鉴了各个计算引擎的优势,尽可能做到更强的通用性。

2、Beam Runner

利用 Beam SDK 编写的计算逻辑代码是独立于具体分布式计算引擎的,用户可根据自己的需要将其运行在指定的计算引擎上。Apache Beam 支持的底层执行引擎包括 Apache Flink、Apache Spark、Apache Apex 以及 Google Cloud Platform 等。Runner 是 Apache Beam 对后端计算引擎的抽象,目前提供了 Direct、Flink、Spark、Apex 以及 Cloud Datafl ow 等计算引擎的 Runner 实现。

  • Direct Runner:Apache Beam 自带的简易 Runner 实现,可将用户逻辑代码运行在本地,通常用于本地调试和测试。

  • Flink Runner:Apache Flink 是一个开源的流式计算引擎,它将批处理转化成流处理问题,进而统一了批处理与流处理两种计算场景。

  • Spark Runner:Apache Spark 是一个开源的 DAG 计算引擎,它将流处理问题转化为批处理问题,进而统一了批处理与流处理两种计算场景。

  • Apex Runner:Apache Apex 是一个构建在 YARN 之上的批处理与流处理统一计算引擎,其设计思想与 Apache Flink 类似。


随着新型计算引擎的不断涌现,Beam Runner 的优势变得愈发明显。它通过一个适配层将任意计算引擎接入 Beam SDK,进而使得应用层逻辑代码无需任何修改便可运行在其他计算引擎上。


发布于: 刚刚阅读数: 5
用户头像

InfoQ签约作者 2018-11-30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
Apache Beam基本架构_11月月更_穿过生命散发芬芳_InfoQ写作社区