使用IntelliJ IDEA+Maven开发Flink项目

本文介绍了如何在IntelliJ IDEA中创建基于Maven的Flink项目,从选择archetype、配置项目信息到编写批处理代码并测试执行。通过详细步骤展示了创建Flink Scala和Java项目的过程,以及遇到ClassNotFoundException异常时的解决方法。最后,讲解了如何打包项目并提交到Flink集群执行。

对于熟悉Maven操作的读者来说,可以象上一节讲的那样,先在命令行用Maven命令快速生成Flink基本程序框架,然后导入到IDE中进一步开发。如果读者更熟悉IDE(例如,IntelliJ IDEA)的话,那么可以直接在IntelliJ IDEA中开发Maven程序。通过结合使用IntelliJ IDEA集成开发工具和Maven项目构建工具,我们可以方便快速地开发Flink项目。

一、在IntelliJ IDEA中创建Flink项目

第一步:启动IntelliJ IDEA,创建一个新的项目,如下图所示:

第二步:选择Maven项目,并选择"Create from archetype":

第三步:因为默认没有Flink的archetype,所以需要自己添加。

添加flink-quickstart-java的archetype如下图:

添加flink-quickstart-scala的archetype如下图:

第四步:选择对应的archetype,比如,这里我选择flink-quickstart-scala,如下所示:

第五步:指定项目的groupId、artifactId名称。这里我分别取以下名称:

  • groupId:com.xueai8
  • artifactId:FlinkScalaDemo

第六步:接下来,指定项目的Maven配置,默认就好。

第七步:指定项目的名称和项目文件所在位置。这里保持默认即可。单击【Finish】按钮,开始创建项目:

第八步:Maven会自动构建项目,最后的项目结构如下所示:

可以看出,flink-quickstart-scala快速地构建了一个基本的Flink项目框架,并生成创建了两个模板程序文件:用于流处理的StreamingJob和用于批处理的BatchJob。

注:同样的步骤,选择flink-quickstart-java,创建一个基于Java API的Flink项目框架。请自行尝试。

二、编写批处理代码并测试执行

以上一节所创建项目中的BatchJob源文件为模板,进一步编写一个简单的批处理代码并执行。这里的目的是为了掌握使用IntelliJ IDEA创建Flink Maven项目,所以不必理解代码,在后续的章节中会详细讲解。

1、在IntelliJ IDEA中打开BatchJob源文件,编辑代码如下:

public static void main(String[] args) throws Exception {
   // set up the batch execution environment
   final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
   DataSource<String> stringDataSource = env.fromElements("ssssss yi ss", "ss jiu sss");
   DataSet<Tuple2<String, Integer>> counts =
         // 把每一行文本切割成二元组,每个二元组为: (word,1)
         stringDataSource.flatMap(new Tokenizer())
               // 根据二元组的第“0”位分组,然后对第“1”位求和
               .groupBy(0)
               .sum(1);

   counts.print();

}
// 自定义函数
public static class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {

   @Override
   public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
      // 统一大小写并把每一行切割为单词
      String[] tokens = value.toLowerCase().split("\\W+");

      // 消费二元组
      for (String token : tokens) {
         if (token.length() > 0) {
            out.collect(new Tuple2<String, Integer>(token, 1));
         }
      }
   }
}

2、在文件内任何空白处,单击右键,在弹出菜单中选择"run BatchJob",执行该程序,在下方的运行窗口可以看到如下输出结果:

(up,1)
(day,2)
(good,2)
(study,1)

注:在执行此程序时,有可能会遇到如下异常:

......
Caused by: java.lang.ClassNotFoundException: org.apache.flink.api.scala.typeutils.CaseClassTypeInfo
 at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
 ... 13 more

异常的原因是maven引入依赖问题。打开项目中的pom.xml文件,将其中依赖部分的"<scope>provided</scope>"注释(或删除)掉。如下所示:

 <dependency>
   <groupId>org.apache.flink</groupId>
   <artifactId>flink-scala_${scala.binary.version}</artifactId>
   <version>${flink.version}</version>
   <!--<scope>provided</scope>-->
 </dependency>
 <dependency>
   <groupId>org.apache.flink</groupId>
   <artifactId>flink-streaming-scala_${scala.binary.version}</artifactId>
   <version>${flink.version}</version>
   <!--<scope>provided</scope>-->
 </dependency>

三、项目打包并提交Flink集群执行

项目如果想要部署到生产环境运行,那么就要先打成jar包再进行部署。我们使用Maven的"mvn clean package"命令可以很方便地进行打包。具体操作步骤如下:

1、打开项目中的pom.xml文件,找到以下内容并修改mainClass(可Ctrl + F,查找查找'mainClass')为当前类的全限定名称:

<transformers>
    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
       <mainClass>com.xueai8.BatchJob</mainClass>
    </transformer>
</transformers>

2、在IntelliJ IDEA界面最下方左侧,点击Terminal选项卡,打开Terminal窗口。在打开Terminal窗口窗口中执行命令"mvn clean package"命令打包项目:

3、会编译打包过程中会输出一系列信息,如下所示:

4、在项目下会生成一个target目录,打好的JAR包就在这里,如下图所示:

5、在Linux终端中,执行以下命令,启动Flink集群:

$ cd ~/bigdata/flink-1.10.0/
$ ./bin/start-cluster.sh

过程如下图所示:

6、将该JAR拷贝到Linux的指定目录下,例如,"~/flinkdemos/"目录下。其后提交到Flink集群上运行Job作业:

$ cd ~/bigdata/flink-1.10.0/
$ ./bin/flink run --class com.xueai8.BatchJob ~/flinkdemos/FlinkScalaDemo-1.0-SNAPSHOT.jar

执行结果如下所示:

对自定义的Maven Archetype管理,找到C:\Users\95844\.IntelliJIdea2019.2\system\Maven\Indices\UserArchetypes.xml进行编辑删除即可。

(day,2)
(good,2)
(study,1)
(up,1)
### IntelliJ IDEA使用 Maven 配置项目的教程 #### 创建 Maven 项目IntelliJ IDEA 中创建一个新的 Maven 项目是一个简单的过程。启动 IntelliJ IDEA 并选择 **New Project**,随后在弹出的窗口中选择 **Maven** 作为项目类型[^1]。此时可以指定 JDK 版本以及是否需要原型模板(Archetype)。如果不需要特定的模板,则可以选择默认选项。 #### 导入现有的 Maven 项目 对于已经存在的 Maven 项目,可以通过菜单栏中的 **File -> New -> Project from Existing Sources...** 来导入该项目。选择对应的 `pom.xml` 文件后,IDEA 将自动解析并加载所有的依赖项和插件配置。 #### 配置本地 Maven 设置 由于 Maven 的中央仓库位于国外,国内用户可能会遇到下载速度慢或者连接不稳定的情况。为了提高效率,建议手动安装 Apache Maven 并调整其设置路径。具体操作如下: 1. 下载最新版本的 Apache Maven 安装包,并解压到自定义目录; 2. 打开 IntelliJ IDEA 的全局/项目级别设置 (**Settings**) ,导航至 **Build, Execution, Deployment -> Build Tools -> Maven**; 3. 修改 **Maven home directory** 字段指向刚才解压好的 Maven 路径;同时更新 **User settings file** 到包含镜像地址的个性化配置文件位置[^2]。 #### 添加测试结构 按照标准约定,在 main 目录之外还需要构建专门用于单元测试的部分。这通常意味着增加名为 test 的子目录树,其中分别设立 java 子文件夹存放测试类代码,resources 子文件夹保存关联资源数据[^3]。这些都可以借助 IDE 提供的功能快速完成——只需右击目标父节点然后选取相应命令即可实现自动化布局安排。 ```xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- 基础信息 --> <groupId>com.example</groupId> <artifactId>maven-demo-project</artifactId> <version>1.0-SNAPSHOT</version> <!-- 依赖管理 --> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> </dependencies> </project> ``` 上述 XML 展示了一个典型的 POM 文件片段,其中包括了 JUnit 测试框架作为一个例子来展示如何声明外部库的支持需求。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值