Java ETL - Apache Beam 简介

基本介绍

Apache Beam是一个用于大数据处理的开源统一编程模型。它允许用户编写一次代码,然后在多个批处理和流处理引擎上运行,如Apache Flink、Apache Spark和Google Cloud Dataflow等。Apache Beam提供了一种简单且高效的方式来实现数据处理管道,支持复杂的数据流转换和并行处理。通过Apache Beam,用户可以编写可移植且具有弹性的数据处理应用程序,从而更轻松地处理大规模数据集并实现高性能的数据处理。

Apache Beam最初是由Google开发的。Google在内部使用类似的编程模型来处理大规模数据,并且在2016年将这个模型开源,成为Apache软件基金会的顶级项目,即Apache Beam。虽然Google是Apache Beam的最初贡献者之一,但现在这个项目已经得到了全球范围内的开发者和组织的贡献和支持,成为一个广泛采用的大数据处理框架。

SDK 和 Runner

其实Apache beam 只是1个SDK, 它支持在多个Runner 上部署和运行

也就是一次编写, 多个平台运行

Driver Program

在 Apache Beam 中,driver program(驱动程序)是指我们编写的控制整个数据处理流程的主要程序。它负责定义数据处理流水线(pipeline),包括指定输入数据源、数据转换操作以及输出目的地,同时还设置了执行选项,如 Pipeline Runner。

简单来讲就是我们所以写的定义流水线的代码了。

Apache Beam 支持 GO, Java 和 Python, 这个系列主要focus on Java.

一些抽象概念

Beam SDK提供了许多抽象概念,简化了大规模分布式数据处理的机制。相同的Beam抽象概念适用于批处理和流处理数据源。在创建Beam流水线时,您可以根据这些抽象概念来思考您的数据处理任务。这些抽象概念包括:

管道(Pipeline)

管道封装了您的整个数据处理任务,从头到尾。这包括读取输入数据,转换数据以及写入输出数据。所有的 Beam 驱动程序都必须创建一个管道。创建管道时,您还必须指定执行选项,告诉管道在何处以及如何运行。

例如runner 选项就是告诉它在哪里执行, 包括Direct runner 和 dataflow runner

PCollection

PCollection 代表您的 Beam 管道操作的分布式数据集。数据集可以是有界的,意味着它来自于固定源(如文件),也可以是无界的,意味着它来自于不断更新的源(通过MQ或其他机制)。通常,您的管道通过从外部数据源读取数据来创建初始的 PCollection,但您也可以利用驱动程序内存中的数据来创建 PCollection。

PCollection 是管道中每个步骤的输入和输出。

简单来讲, PCollection 就是 Beam 框架中数据的集合, 相当于Pandas 的dataframe

PTransform

PTransform 表示管道中的数据处理操作或步骤。每个 PTransform 接受一个或多个 PCollection 对象作为输入,对该 PCollection 的元素执行您提供的处理函数,并生成零个或多个输出 PCollection 对象。

PTransform 就是步骤, 它是1个抽象借口

常见的Pardo-doFn 和 IO 都是PTransform的具体实现!

一个常见的Beam 流水线是如何定义的

一个典型的 Beam 驱动程序工作方式如下:

  1. 创建一个 Pipeline 对象并设置管道执行选项,包括 Pipeline Runner(也可在运行时指定)。
  2. 创建用于管道数据的初始 PCollection,可以使用 IOs 从外部存储系统读取数据,也可以使用 Create 转换从内存数据构建 PCollection。
  3. 对每个 PCollection 应用 PTransforms。转换可以改变、过滤、分组、分析或以其他方式处理 PCollection 中的元素。一个转换会创建一个新的输出 PCollection,而不会修改输入集合。一个典型的管道会依次将后续转换应用于每个新的输出 PCollection,直到处理完成。
  4. 但是,请注意,管道不必是一系列按顺序应用的转换的单一直线:将 PCollections 视为变量,将 PTransforms 视为应用于这些变量的函数:管道的形状可以是任意复杂的处理图。
  5. 使用 IOs 将最终转换后的 PCollections 写入外部源。
  6. 使用指定的 Pipeline Runner 运行管道。
相关推荐
架构文摘JGWZ40 分钟前
Java 23 的12 个新特性!!
java·开发语言·学习
拾光师2 小时前
spring获取当前request
java·后端·spring
aPurpleBerry2 小时前
neo4j安装启动教程+对应的jdk配置
java·neo4j
我是苏苏2 小时前
Web开发:ABP框架2——入门级别的增删改查Demo
java·开发语言
xujinwei_gingko2 小时前
Spring IOC容器Bean对象管理-Java Config方式
java·spring
2301_789985942 小时前
Java语言程序设计基础篇_编程练习题*18.29(某个目录下的文件数目)
java·开发语言·学习
IT学长编程2 小时前
计算机毕业设计 教师科研信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·毕业设计·springboot·毕业论文·计算机毕业设计选题·计算机毕业设计开题报告·教师科研管理系统
m0_571957582 小时前
Java | Leetcode Java题解之第406题根据身高重建队列
java·leetcode·题解
程序猿小D2 小时前
第二百三十五节 JPA教程 - JPA Lob列示例
java·数据库·windows·oracle·jdk·jpa
Zd083 小时前
14.其他流(下篇)
java·前端·数据库