Apache Beam Java SDK 快速入门

此快速入门向您展示如何运行使用 Apache Beam Java SDK 编写的 示例管道,使用 Direct Runner。Direct Runner 在您的机器上本地执行管道。

如果您有兴趣为 Apache Beam Java 代码库做出贡献,请查看 贡献指南

在本页

设置开发环境

使用 sdkman 安装 Java 开发工具包 (JDK)。

# Install sdkman
curl -s "https://get.sdkman.io" | bash

# Install Java 17
sdk install java 17.0.5-tem

您可以使用 GradleApache Maven 来运行此快速入门。

# Install Gradle
sdk install gradle

# Install Maven
sdk install maven

克隆 GitHub 存储库

克隆或下载 apache/beam-starter-java GitHub 存储库,并进入 beam-starter-java 目录。

git clone https://github.com/apache/beam-starter-java.git
cd beam-starter-java

运行快速入门

Gradle:要使用 Gradle 运行快速入门,请运行以下命令

gradle run --args='--inputText=Greetings'

Maven:要使用 Maven 运行快速入门,请运行以下命令

mvn compile exec:java -Dexec.args=--inputText='Greetings'

输出类似于以下内容

Hello
World!
Greetings

这些行可能会以不同的顺序出现。

探索代码

此快速入门的主要代码文件是 App.java (GitHub)。代码执行以下步骤

  1. 创建一个 Beam 管道。
  2. 创建一个初始 PCollection
  3. 将转换应用于 PCollection
  4. 运行管道,使用 Direct Runner。

创建管道

代码首先创建一个 Pipeline 对象。Pipeline 对象构建要执行的转换图。

var options = PipelineOptionsFactory.fromArgs(args).withValidation().as(Options.class);
var pipeline = Pipeline.create(options);

PipelineOptions 对象允许您为管道设置各种选项。本示例中显示的 fromArgs 方法解析命令行参数,这使您能够通过命令行设置管道选项。

创建初始 PCollection

PCollection 抽象表示一个可能分布式的、多元素数据集。Beam 管道需要一个数据源来填充初始 PCollection。数据源可以是有界的(具有已知的固定大小)或无界的(具有无限大小)。

本示例使用 Create.of 方法从字符串的内存中数组创建一个 PCollection。生成的 PCollection 包含字符串“Hello”、“World!”以及用户提供的输入字符串。

return pipeline
  .apply("Create elements", Create.of(Arrays.asList("Hello", "World!", inputText)))

将转换应用于 PCollection

转换可以更改、过滤、分组、分析或以其他方式处理 PCollection 中的元素。本示例使用 MapElements 转换,它将集合的元素映射到一个新集合

.apply("Print elements",
    MapElements.into(TypeDescriptors.strings()).via(x -> {
      System.out.println(x);
      return x;
    }));

其中

在本示例中,映射函数是一个 lambda 表达式,它只返回原始值。它还将值打印到 System.out 作为副作用。

运行管道

前面几节中显示的代码定义了一个管道,但尚未处理任何数据。要处理数据,请运行管道

pipeline.run().waitUntilFinish();

Beam 运行器 在特定平台上运行 Beam 管道。本示例使用 Direct Runner,它是在您没有指定运行器的情况下默认运行器。Direct Runner 在您的机器上本地运行管道。它旨在用于测试和开发,而不是针对效率进行优化。有关更多信息,请参阅 使用 Direct Runner

对于生产工作负载,您通常使用分布式运行器,它在 Apache Flink、Apache Spark 或 Google Cloud Dataflow 等大数据处理系统上运行管道。这些系统支持大规模并行处理。

后续步骤

如果您遇到任何问题,请随时 联系我们