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 运行管道。
相关推荐
测开小菜鸟17 分钟前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity1 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天1 小时前
java的threadlocal为何内存泄漏
java
caridle1 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^2 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋32 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
秋の花2 小时前
【JAVA基础】Java集合基础
java·开发语言·windows
小松学前端2 小时前
第六章 7.0 LinkList
java·开发语言·网络
Wx-bishekaifayuan2 小时前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava
customer082 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源