2.2 Flink项目模板
Flink为了对用户使用Flink进行应用开发进行简化,提供了相应的项目模板来创建开发项目,用户不需要自己引入相应的依赖库,就能够轻松搭建开发环境,前提是在JDK(1.8及以上)和Maven(3.0.4及以上)的环境已经安装好且能正常执行。在Flink项目模板中,Flink提供了分别基于Java和Scala实现的模板,下面就两套项目模板分别进行介绍和应用。
2.2.1 基于Java实现的项目模板
1.创建项目
创建模板项目的方式有两种,一种方式是通过Maven archetype命令进行创建,另一种方式是通过Flink提供的Quickstart Shell脚本进行创建,具体实例说明如下。
❑通过Maven Archetype进行创建:
$ mvn archetype:generate \ -DarchetypeGroupId=org.apache.flink \ -DarchetypeArtifactId=flink-quickstart-java \ -DarchetypeCatalog=https://repository.apache.org/ \ content/repositories/snapshots/ \ -DarchetypeVersion=1.7.0
通过以上Maven命令进行项目创建的过程中,命令会交互式地提示用户对项目的groupId、artifactId、version、package等信息进行定义,且部分选项具有默认值,用户直接回车即可,如图2-1所示。我们创建了实例项目成功之后,客户端会提示用户项目创建成功,且在当前路径中具有相应创建的Maven项目。
图2-1 Maven创建Java项目
❑通过quickstart脚本创建:
$ curl https://flink.apache.org/q/quickstart-SNAPSHOT.sh | bash -s 1.6.0
通过以上脚本可以比较简单地创建项目,执行后项目会自动生成,但是项目的名称和一些GAV信息都是自动生成的,用户不能进行交互式重新定义,其中的项目名称为quickstart, gourpid为org.myorg.quickstart, version为0.1。这种方式对于Flink入门相对比较适合,其他有一定基础的情况下,则不建议使用这种方式进行项目创建。
注意
在Maven 3.0以上的版本中,DarchetypeCatalog配置已经从命令行中移除,需要用户在Maven Settings中进行配置,或者直接将该选项移除,否则可能造成不能生成Project的错误。
2.检查项目
对于使用quickstart curl命令创建的项目,我们可以看到的项目结构如代码清单2-1所示,如果用户使用Maven Archetype,则可以自己定义对应的artifactId等信息。
代码清单2-1 Java模板项目结构
tree quickstart/ quickstart/ ├—— pom.xml └—— src └—— main ├—— java │ └—— org │ └—— myorg │ └——quickstart │ ├—— BatchJob.java └——StreamingJob.java └—— resources └—— log4j.properties
从上述项目结构可以看出,该项目已经是一个相对比较完善的Maven项目,其中创建出来对应的Java实例代码,分别是BatchJob.java和Streaming.java两个文件,分别对应Flink批量接口DataSet的实例代码和流式接口DataStream的实例代码。在创建好上述项目后,建议用户将项目导入到IDE进行后续开发,Flink官网推荐使用的是Intellij IDEA或者Eclipse进行项目开发,具体的开发环境配置可以参考下一节中的介绍。
3.编译项目
项目经过上述步骤创建后,可以使用Maven Command命令mvn clean package对项目进行编译,编译完成后在项目同级目录会生成target/<artifact-id>-<version>.jar,则该可执行Jar包就可以通过Flink命令或者Web客户端提交到集群上执行。
注意
通过Maven创建Java应用,用户可以在Pom中指定Main Class,这样提交执行过程中就具有默认的入口Main Class,否则需要用户在执行的Flink App的Jar应用中指定Main Class。
4.开发应用
在项目创建和检测完成后,用户可以选择在模板项目中的代码上编写应用,也可以定义Class调用DataSet API或DataStream API进行Flink应用的开发,然后通过编译打包,上传并提交到集群上运行。具体应用的开发读者可以参考后续章节。
2.2.2 基于Scala实现的项目模板
Flink在开发接口中同样提供了Scala的接口,用户可以借助Scala高效简洁的特性进行Flink App的开发。在创建项目的过程中,也可以像上述Java一样创建Scala模板项目,而在Scala项目中唯一的区别就是可以支持使用SBT进行项目的创建和编译,以下实例,将从SBT和Maven两种方式进行介绍。
1.创建项目
(1)创建Maven项目
1)使用Maven archetype进行项目创建
代码清单2-2是通过Maven archetype命令创建Flink Scala版本的模板项目,其中项目相关的参数同创建Java项目一样,需要通过交互式的方式进行输入,用户可以指定对应的项目名称、groupid、artifactid以及version等信息。
代码清单2-2 使用Maven archetype创建Scala项目
mvn archetype:generate \ -DarchetypeGroupId=org.apache.flink \ -DarchetypeArtifactId=flink-quickstart-scala \ -DarchetypeCatalog=https://repository.apache.org/ \ content/repositories/snapshots/ \ -DarchetypeVersion=1.7.0
执行完上述命令之后,会显示如图2-2所示的提示,表示项目创建成功,可以进行后续操作。同时可以在同级目录中看到已经创建好的Scala项目模板,其中包括了两个Scala后缀的文件。
2)使用quickstart curl脚本创建
如上节所述,在创建Scala项目模板的过程中,也可以通过quickstart curl脚本进行创建,这种方式相对比较简单,只要执行以下命令即可:
curl https://flink.apache.org/q/quickstart-scala-SNAPSHOT.sh | bash -s 1.7.0
图2-2 Maven创建Scala项目
执行上述命令后就能在路径中看到相应的quickstart项目生成,其目录结构和通过Maven archetype创建的一致,只是不支持修改项目的GAV信息。
(2)创建SBT项目
在使用Scala接口开发Flink应用中,不仅可以使用Maven进行项目的编译,也可以使用SBT(Simple Build Tools)进行项目的编译和管理,其项目结构和Maven创建的项目结构有一定的区别。可以通过SBT命令或者quickstart脚本进行创建SBT项目,具体实现方式如下:
1)使用SBT命令创建项目
sbt new path/flink-project.g8
执行上述命令后,会在客户端输出创建成功的信息,表示项目创建成功,同时在同级目录中生成创建的项目,其中包含两个Scala的实例代码供用户参考。
2)使用quickstart curl脚本创建项目
可以通过使用以下指令进行项目创建Scala项目:
bash <(curl https://flink.apache.org/q/sbt-quickstart.sh)
注意
如果项目编译方式选择SBT,则需要在环境中提前安装SBT编译器,同时版本需要在0.13.13以上,否则无法通过上述方式进行模板项目的创建,具体的安装教程可以参考SBT官方网站https://www.scala-sbt.org/download.html进行下载和安装。
2.检查项目
对于使用Maven archetype创建的Scala项目模板,其结构和Java类似,在项目中增加了Scala的文件夹,且包含两个Scala实例代码,其中一个是实现DataSet接口的批量应用实例BatchJob,另外一个是实现DataStream接口的流式应用实例StreamingJob,如代码清单2-3所示。
代码清单2-3 Scala模板项目结构
tree quickstart/ quickstart/ ├—— pom.xml └—— src └—— main ├—— resources │ └—— log4j.properties └—— scala └—— org └—— myorg └—— quickstart ├—— BatchJob.scala └—— StreamingJob.scala
3.编译项目
1)使用Maven编译
进入到项目路径中,然后通过执行mvn clean package命令对项目进行编译,编译完成后产生target/<artifact-id>-<version>.jar。
2)使用Sbt编译
进入到项目路径中,然后通过使用sbt clean assembly对项目进行编译,编译完成后再产生target/scala_your-major-scala-version/project-name-assembly-0.1-SNAPSHOT.jar。
4.开发应用
在项目创建和检测完成后,用户可以选择在Scala项目模板的代码上编写应用,也可以定义Class调用DataSet API或DataStream API进行Flink应用的开发,然后通过编译打包,上传并提交到集群上运行。