Apache Flink Training Exercises
文档中培训内容附带的练习。
目录
设置开发环境
您需要设置环境,以便开发、调试和执行培训练习和示例的解决方案。
软件需求
Flink支持Linux、OS X和Windows作为Flink程序和本地执行的开发环境。Flink development安装需要以下软件,应安装在您的系统上:
- Git
- Java 8或Java 11的JDK(JRE是不够的;目前不支持其他版本的Java)
- 支持Gradle的Java(和/或Scala)开发IDE
- 我们推荐IntelliJ, 但是 Eclipse或者 Visual Studio Code(带有Java扩展包)也可以使用,只要你坚持使用Java。
- 对于Scala,你需要使用IntelliJ(及其Scala插件)。
**:适用于 Windows 用户的注意事项: :information_source: 训练说明中提供的 shell 命令示例适用于 UNIX 系统。
您可能会发现设置cygwin或WSL是值得的。对于开发 Flink 作业,Windows 运行得相当不错:您可以在一台计算机上运行 Flink 集群、提交作业、运行 webUI 以及在 IDE 中执行作业。
克隆并构建 flink 培训项目
flink-training
仓库包含编程练习的练习、测试和参考解决方案。
ℹ️ 仓库布局: 这个仓库设置了几个分支,指向不同的Apache Flink版本,类似于apache/flink 仓库:
- Apache Flink 的每个次要版本的发布分支,例如
release-1.10
master
分支指向当前 Flink 版本的分支 (而非flink:master
!)如果要处理当前 Flink 版本以外的版本,请确保查看相应的分支。
从 GitHub 克隆flink-training
项目,并导航到项目路径,然后构建它:
git clone https://github.com/apache/flink-training.git
cd flink-training
./gradlew test shadowJar
如果这是您第一次构建它,您最终将下载此 Flink 训练项目的所有依赖项。这通常需要几分钟,具体取决于您的互联网连接速度。
如果所有测试都通过并且构建成功,那么您就有了一个良好的开端。
:cn: 中国用户:单击此处获取有关使用本地 Maven 镜像的说明。如果您在中国,我们建议您将 Maven 存储库配置为使用镜像。您可以通过在我们的build.gradle
文件中取消注释此部分来执行此操作:
repositories {
// for access from China, you may need to uncomment this line
maven { url 'https://maven.aliyun.com/repository/public/' }
mavenCentral()
maven {
url "https://repository.apache.org/content/repositories/snapshots/"
mavenContent {
snapshotsOnly()
}
}
}
启用 Scala(可选)
此项目中的练习在 Scala 中也可用,但由于非 Scala 用户报告的几个问题,我们决定默认禁用这些练习。您可以重新启用所有 Scala 练习和解决方案,以适应gradle.properties
文件,如下所示:
#...
# Scala exercises can be enabled by setting this to true
org.gradle.project.enable_scala = true
如果需要,您还可以有选择地在单个子项目中应用此插件。
将 flink 培训项目导入到 IDE 中
需要将项目作为 gradle 项目导入到 IDE 中。
然后,您应该能够打开RideCleansingTest
并运行此测试。
ℹ️ Scala用户注意事项:: 您需要将 IntelliJ 与 JetBrains Scala 插件配合使用,并且需要将 Scala 2.12 SDK 添加到"项目结构"的"全局库"部分以及您正在处理的模块中。当您打开Scala文件时,IntelliJ会要求您提供后者。请注意,Scala 2.12.8 及更高版本不受支持 (详见
Flink Scala版本
)!
使用出租车数据流
这些练习使用生成模拟事件流的数据生成器。这些数据的灵感来自纽约市出租车和豪华轿车委员会关于纽约市出租车乘坐的公共数据集。
出租车乘车事件架构(Schema of taxi ride events)
我们的出租车数据集包含有关纽约市个人出租车乘坐的信息。
每个行程由两个事件表示:行程开始和行程结束。
每个事件由 11 个字段组成:
rideId : Long // a unique id for each ride
taxiId : Long // a unique id for each taxi
driverId : Long // a unique id for each driver
isStart : Boolean // TRUE for ride start events, FALSE for ride end events
eventTime : Instant // the timestamp for this event
startLon : Float // the longitude of the ride start location
startLat : Float // the latitude of the ride start location
endLon : Float // the longitude of the ride end location
endLat : Float // the latitude of the ride end location
passengerCnt : Short // number of passengers on the ride
出租车费用事件示意图(Schema of taxi fare events)
还有一个相关的数据集,其中包含有关这些相同行程的票价数据,其中包含以下字段:
rideId : Long // a unique id for each ride
taxiId : Long // a unique id for each taxi
driverId : Long // a unique id for each driver
startTime : Instant // the start time for this ride
paymentType : String // CASH or CARD
tip : Float // tip for this ride
tolls : Float // tolls for this ride
totalFare : Float // total fare collected
如何进行实验练习
在实践课程中,您将使用各种 Flink API 实现 Flink 程序。
以下步骤将指导您完成使用提供的数据流、实现第一个 Flink 流式处理程序以及在 IDE 中执行程序的过程。
我们假设您已经根据我们的设置指南设置了开发环境。
了解数据
最初的练习集都基于有关出租车和出租车费用的事件数据流。这些流由从输入文件中读取数据的源函数生成。阅读说明以了解如何使用它们。
在 IDE 中运行和调试 Flink 程序
Flink 程序可以从 IDE 中执行和调试。这大大简化了开发过程,并提供了类似于在任何其他Java(或Scala)应用程序上工作的体验。
要在 IDE 中启动 Flink 程序,请运行main()
方法。在后台,执行环境将在同一进程中启动本地 Flink 实例。因此,也可以在代码中放置断点并对其进行调试。
如果您的 IDE 导入了flink-training
项目,则可以通过以下方式运行(或调试)流式处理作业:
- 在 IDE 中打开类
org.apache.flink.training.examples.ridecount.RideCountExample
- 使用 IDE 运行(或调试)
RideCountExample
类的main()
方法
练习、测试和解决方案
这些练习中的每一个都包括:
...Exercise
:一个包含大部分所需的样板代码便于开始实验的类,这里可以自行编写实验程序...Test
:一个 JUnit 测试类,其中包含一些用于实现的测试...Solution
:具有完整解决方案的类,这里是官方提供的验证程序编写是否正确的地方
所有练习、测试和解决方案类都有 Java 和 Scala 版本。它们都可以从IntelliJ运行。
ℹ️ 注意: 只要你的
...Exercise
类抛出一个MissingSolutionException
异常,提供的 JUnit 测试类就会忽略该失败,而是验证解决方案实现的正确性。throw new MissingSolutionException(); 的地方,我猜大概是用于自己实现解决方案的。
您可以使用gradlew
命令运行练习、解决方案和测试。
运行测试:
./gradlew test
./gradlew :<subproject>:test
对于 Java/Scala 练习和解决方案,我们提供的特殊任务可以与以下内容一起列出:
./gradlew printRunTasks
👇 现在,您已准备好开始练习。 👇
实验室练习
- 过滤流(Ride Cleansing)
- 有状态扩充 (Rides and Fares)
- 窗口化分析 (Hourly Tips)
ProcessFunction
and Timers (Long Ride Alerts)
贡献
如果您想为此仓库做出贡献或添加新练习,请阅读贡献指南。
许可证
此存储库中的代码根据 Apache Software License 2 进行许可.
项目地址:https://gitee.com/hoas/flink-training/blob/release-1.13/README_zh.md