用途
本技能用于指导 Apache Beam 项目中的 Java SDK 开发工作,包括构建、测试、运行示例以及理解项目结构。适合在 Apache Beam 代码库中编写或调试 Java 代码、运行测试、构建容器和 Worker 包时使用。
项目结构
关键目录包括:
sdks/java/core:核心 Java SDK(PCollection、PTransform、Pipeline)sdks/java/harness:SDK harness(容器入口点)sdks/java/io/:I/O 连接器(51+ 连接器,包括 BigQuery、Kafka、JDBC 等)sdks/java/extensions/:扩展(SQL、ML、protobuf 等)runners/:Runner 实现,包括runners/direct-java(Direct Runner,本地执行)、runners/flink/(Flink Runner)、runners/spark/(Spark Runner)、runners/google-cloud-dataflow-java/(Dataflow Runner)examples/java/:Java 示例,包括 WordCount
构建系统
Apache Beam 使用 Gradle 和自定义的 BeamModulePlugin。每个 Java 项目的 build.gradle 开头为:
apply plugin: 'org.apache.beam.module'
applyJavaNature( ... )
常用命令
构建命令:
# 编译指定项目
./gradlew -p sdks/java/core compileJava
# 构建项目(编译 + 测试)
./gradlew :sdks:java:harness:build
# 运行 WordCount 示例
./gradlew :examples:java:wordCount
运行单元测试:
# 运行项目全部测试
./gradlew :sdks:java:harness:test
# 运行指定测试类
./gradlew :sdks:java:harness:test --tests org.apache.beam.fn.harness.CachesTest
# 按模式匹配运行测试
./gradlew :sdks:java:harness:test --tests *CachesTest
# 运行指定测试方法
./gradlew :sdks:java:harness:test --tests *CachesTest.testClearableCache
运行集成测试(文件名以 IT.java 结尾,使用 TestPipeline):
# 在 Direct Runner 上运行 I/O 集成测试
./gradlew :sdks:java:io:google-cloud-platform:integrationTest
# 使用自定义 GCP project 运行
./gradlew :sdks:java:io:google-cloud-platform:integrationTest \
-PgcpProject=<project> -PgcpTempRoot=gs://<bucket>/path
# 在 Dataflow Runner 上运行
./gradlew :runners:google-cloud-dataflow-java:examplesJavaRunnerV2IntegrationTest \
-PdisableSpotlessCheck=true -PdisableCheckStyle=true -PskipCheckerFramework \
-PgcpProject=<project> -PgcpRegion=us-central1 -PgcsTempRoot=gs://<bucket>/tmp
代码格式化:
./gradlew spotlessApply
编写集成测试
@Rule public TestPipeline pipeline = TestPipeline.create();
@Test
public void testSomething() {
pipeline.apply(...);
pipeline.run().waitUntilFinish();
}
通过 -DbeamTestPipelineOptions='[...]' 设置 pipeline options:
-DbeamTestPipelineOptions='["--runner=TestDataflowRunner","--project=myproject","--region=us-central1","--stagingLocation=gs://bucket/path"]'
使用修改后的 Beam 代码
发布到 Maven Local:
# 发布指定模块
./gradlew -Ppublishing -p sdks/java/io/kafka publishToMavenLocal
# 发布全部模块
./gradlew -Ppublishing publishToMavenLocal
构建 SDK 容器(用于 Runner v2):
./gradlew :sdks:java:container:java11:docker
# 打标签并推送
docker tag apache/beam_java11_sdk:2.XX.0.dev \
"us-docker.pkg.dev/your-project/beam/beam_java11_sdk:custom"
docker push "us-docker.pkg.dev/your-project/beam/beam_java11_sdk:custom"
构建 Dataflow Worker Jar:
./gradlew :runners:google-cloud-dataflow-java:worker:shadowJar
测试命名约定与报告
- 单元测试:
*Test.java - 集成测试:
*IT.java - 运行测试后,HTML 报告位于:
<project>/build/reports/tests/test/index.html
IDE 设置(IntelliJ)
- 打开
/beam(仓库根目录,而不是sdks/java) - 等待索引完成
- 找到
examples/java/build.gradle,点击 wordCount 任务旁边的 Run 以验证设置
限制
资料未说明该技能的收费、价格、平台支持范围等其它信息,相关内容暂未提供。