1.4 Apache Flink 开发环境搭建

Flink 开发环境部署和配置

Flink 是一个以 Java 及 Scala 作为开发语言的开源大数据项目,代码开源在 github 上,并使用 maven 来编译和构建项目。对于大部分开发或使用 Flink 的同学来说,Java、Maven 和 Git 这三 个工具是必不可少的,因此首先需要把这三个工具进行安装和配置。另外,一个强大的 IDE 有助于我们更快的阅读代码、开发新功能以及修复 bug,因此这里也会简单介绍 IDE 的相关 配置。

1. 下载 flink 代码

Git工具安装配置完成后,我们就可以从 github 上下载 Flink 代码了。github 上 flink 的代码仓库是https://github.com/apache/flink

(可选)对于国内的用户,下载 github 上的代码可能比较慢,可以在/etc/hosts 中增加如下配置, 可以显著提升 github 的下载速度:

151.101.72.133 assets-cdn.github.com 
151.101.73.194 github.global.ssl.fastly.net 
192.30.253.113 github.com 
11.238.159.92 git.node5.mirror.et2sqa

如果使用 Windows 系统,则是配置在“C:\Windows\System32\drivers\etc\hosts”文件中。

如果使用 Win10 Linux 子系统,建议也配置在“C:\Windows\System32\drivers\etc\hosts”文件中, 然后重启 Linux 子系统,因为 Linux 子系统中的/etc/hosts 文件是根据 Window 系统中的“C:\Windows\System32\drivers\etc\hosts”这个文件生成的。

使用 Win10 Linux 子系统还可以通过删除 Linux 子系统的/etc/hosts 文件中的这一行来阻止 Linux 子系统启动的时候覆盖修改过的 hosts 文件:

# This file was automatically generated by WSL. To prevent automatic generation of this file, remove this line.

下载 Flink 代码到本地

git clone https://github.com/apache/flink.git

(可选)代码下载完后,默认是在 master 分支,考虑到代码质量,一般会选择合适的发布分支 使用,比如 release-1.7 或者 release-1.8。

git checkout release-1.7 
git checkout release-1.8

2. 编译 flink 代码

Flink 代码使用 maven 构建项目,编译代码的时候 maven 默认会根据当前用户下的 “~/.m2/settings.xml”文件中的配置信息下载 Flink 的依赖包,也可以在 mvn 命令中增加“-- settings=${your_maven_settings_file}”来指定 maven settings 文件的位置。 如果你之前已有合适的 maven settings 的配置,可以直接使用已有的配置即

如果需要指定 maven 的 local repository 的路径,可以在 settings.xml 文件中配置 “localRepository”这个参数。默认情况下会下载到“~/.m2/repository/”(即当前用户 home 目录下 的“.m2/repository”目录)。

重要的配置片段如下所示。

<mirror>
     <id>nexus-aliyun</id>
     <mirrorOf>*,!jeecg,!jeecg-snapshots,!mapr-releases</mirrorOf>
     <name>Nexus aliyun</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public</url>
 </mirror>
 <mirror>
     <id>mapr-public</id>
     <mirrorOf>mapr-releases</mirrorOf>
     <name>mapr-releases</name>
     <url>https://maven.aliyun.com/repository/mapr-public</url>
 </mirror>

简要说明一下,第一个 mirror 使用的是 aliyun 提供的 maven 镜像仓库,能够为国内用户加速 maven repository 的访问,你也可以配置成国内其他的 maven 镜像仓库或者自己搭建的仓库。最 重要的是下面片段中红色标注的内容。由于 flink 中的 flink-filesystems/flink-mapr-fs 模块依赖 mapr-releases repository 提供的 jar 包,然而由于国内访问 mapr-releases repository 比较慢,而 且所依赖的 maprfs-5.2.1-mapr.jar 这个 jar 包有 48MB,flink 依赖中最大的一个 jar 包,故初次编译 flink 时,往往会由于下载 mapr 相关依赖超时导致编译失败。因此,aliyun 专门有一个镜像仓库代理 mapr-releases repository,以期望能让用户更容易地下载 mapr 相关的 jar 包。 可以通过这个链接查看 aliyun 提供的镜像仓库的 meta 信息:https://maven.aliyun.com/mvn/view

在我们配置好之前的几个工具后,编译 flink 就非常简单了,执行如下命令即可:

# 删除已有的 build,编译 flink binary 
# 接着把 flink binary 安装在 maven 的 local repository(默认是~/.m2/repository)中
mvn clean install -DskipTests 

# 另一种编译命令,相对于上面这个命令,主要的确保是: 
# 不编译 tests、QA plugins 和 JavaDocs,因此编译要更快一些
mvn clean install -DskipTests -Dfast

另外,在一些情况下,我们可能并不想把编译后的 flink binary 安装在 maven 的 local repository 下,我们可以使用下面的命令:

# 删除已有的 build,编译 flink binary 
mvn clean package -DskipTests 

# 另一种编译命令,相对于上面这个命令,主要的确保是: 
# 不编译 tests、QA plugins 和 JavaDocs,因此编译要更快一些 
mvn clean package -DskipTests -Dfast

如果你需要使用指定 hadoop 的版本,可以通过指定“-Dhadoop.version”来设置,编译命令如下:

mvn clean install -DskipTests -Dhadoop.version=2.6.1 
# 或者 mvn 
clean package -DskipTests -Dhadoop.version=2.6.1

当成功编译完成后,上述几种编译方式最终都能在当前 flink 的 code path 下编译出完整的 flink binary,可以在 flink-dist/target/目录中看到:

在编译中可能遇到的问题

  • 问题 1:编译失败“BUILD FAILURE”,失败信息中有 mapr 相关信息

这种错误一般都和 mapr 相关的依赖包的下载失败有关,在实际测试时,即使配置了之前说的 aliyun 代理的 mapr-releases 镜像,还是可能出现下载失败的情况,问题可能还是和 mapr 的 jar 包比较大,容易下载失败有关。 遇到这些问题时,重试即可。在重试之前,要先根据失败信息删除 maven local repository 中对应 的目录,否则需要等待 maven 下载的超时时间才能再次出发下载依赖到本地。

比如下面这个编译失败:

失败信息显示 com.mapr.hadoop:maprfs:jar:5.2.1-mapr 和它依赖的 org.apache.hadoop:hadoopauth:jar:2.7.0-mapr-1703 有问题,就直接把这两个包对应在 maven local repository 中的目录删 掉,然后重新编译即可。

rm -rf ~/.m2/repository/com/mapr/hadoop/maprfs/5.2.1-mapr 
rm -rf ~/.m2/repository/org/apache/hadoop/hadoop-auth/2.7.0-mapr-1703

我还遇到过上面这种情况,直接删除 maprfs 的 jar 包后重试即可。

rm -rf ~/.m2/repository/com/mapr/hadoop/maprfs/5.2.1-mapr

这些问题等到编译成功后,相关的 mapr 的 jar 包就保存在本地的 local repository 目录下了,之后的编译就没问题了。

  • 问题 2:发现在 Win10 的 Linux 子系统中编译 flink 比较耗时

我在 Win10 的 Linux 子系统中编译 flink 发现,编译 flink-runtime-web 过程中执行“ng build --prod --base-href ./”命令非常慢,最后虽然编译过了,但差不多花了一个小时的时间。

单独执行“ng build --prod --base-href ./”这个命令时,会长时间停留在“92% chunk asset optimization”处。不确定是否和 Linux 子系统有关,也可能和我的 Win10 机器的内存比较少有关 (我的 Win10 机器编译之前的剩余内存只有 3GB 左右,执行这个 ng 命令比较耗内存,整机内存 差不多用完了)。这个问题目前没有结论,有兴趣和条件的同学,也可以试一试。

3. 开发环境准备

一个好的 IDE 不仅能有效的提高开发者的开发效率,而且对于不做代码开发但是希望通过代码学 习 Flink 的人来说,也非常有助于其对代码的理解。

推荐使用 IntelliJ IDEA IDE 作为 Flink 的 IDE 工具。官方的说法是,不建议使用 Eclipse IDE,主 要原因是 Eclipse 的 Scala IDE 和 Flink 用 scala 的不兼容。

(1)下载安装 Intellij IDEA,Intellij IDEA IDE 的下载地址:https://www.jetbrains.com/idea/,下载最新版本安装即可。

(2)安装 Scala plugin, Flink 项目使用了 Java 和 Scala 开发,Intellij 自带 Java 的支持,在导入 Flink 代码前,还需要确 保安装 Intellij 的 Scala plugin。安装方法如下:

  • IntelliJ IDEA -> Preferences -> Plugins,点击“Install Jetbrains plugin…”
  • 搜索“scala”,点击“install”
  • 重启 Intellij

(3)检查 Intellij 的 Maven 配置

  • IntelliJ IDEA -> Preferences -> Build, Execution, Deployment -> Build Tools -> Maven

  • 检查“Maven home directory”是否符合预期,如果不是,则选择正确的 maven 路径,然后 apply

  • 检查“User settings file”是否符合预期,默认是“${your_home_dir}/.m2/settings.xml”,如果 之前没有特殊配置,则无需更改

  • 检查“Local directory”是否符合预期,默认是“${your_home_dir}/.m2/repository”,如果之前 没有特殊配置,则无需更改

(4)导入 Flink 代码

  • 1. IntelliJ IDEA -> File -> New -> Project from existing sources…,选择 Flink 代码的根路径
  • 2. 在“Import project from external model”中选择“Maven”,然后一路点击“next”直到结束
  • 3. IntelliJ IDEA -> File -> Project Structure… -> Project Settings -> Project,检查 Project SDK 是否符合预期(因为在之前的步骤中我们已经配置了 JAVA_HOME,所以一般是符 合预期的),如果不是就点击“New”,然后选择之前步骤中安装的 JDK home 目录

PS:代码导入完后,Intellij 会自动 sync 代码并创建 index 用于代码查找。如果之前代码没有编 译过,则需要做一次代码全编译,然后 Intellij 经过一次 sync 后,就能这样 Intellij 就能识别所有 的代码。

(5)添加 Java 的 Checkstyle

在 Intellij 中添加 Checkstyle 是很重要的,因为 Flink 在编译时会强制代码风格的检查,如果代码 风格不符合规范,可能会直接编译失败。对于需要在开源代码基础上做二次开发的同学,或者有 志于向社区贡献代码的同学来说,及早添加 checkstyle 并注意代码规范,能帮你节省不必要的修 改代码格式的时间。

Intellij 内置对 Checkstyle 的支持,可以检查一下 Checkstyle-IDEA plugin 是否安装(IntelliJ IDEA -> Preferences -> Plugins,搜索“Checkstyle-IDEA”)。

配置 Java Checkstyle:

  • IntelliJ IDEA -> Preferences -> Other Settings -> Checkstyle
  • 设置 “Scan Scope”为“Only Java sources (including tests)”
  • 在“Checkstyle Version”下拉框中选择“8.9”
  • 在“Configuration File”中点击“+”新增一个 flink 的配置:

a. “Description”填“Flink”
b. “Use a local Checkstyle file”选择本代码下的 tools/maven/checkstyle.xml 文件
c. 勾选“Store relative to project location”,然后点击“Next”
d. 配置“checkstyle.suppressions.file” 的值为"suppressions.xml",然后点击“Next”和 “Finish”
e. 勾选上“Flink”作为唯一生效的 checkstyle 配置,点击“Apply”和“OK

  • IntelliJ IDEA -> Preferences -> Editor -> Code Style -> Java,点击⚙齿轮按钮,选择 “Import Scheme” -> “Checkstyle Configuration”,选择 checkstyle.xml 文件。这样配置后, Intellij 在自动 import 的时候会按照规则,把 import 代码添加到正确的位置。

需要说明的是,Flink 中的一些模块并不能完全 checkstyle 通过,包括 flink-core、flink-optimizer 和 flink-runtime。但无论如何,还是应当保证你新增或修改的代码遵守 checkstyle 的规范。

(6)添加 Scala 的 Checkstyle

  • 将“tools/maven/scalastyle-config.xml”文件拷贝到 flink 代码根目录的“.idea”子目录中
  • IntelliJ IDEA -> Preferences -> Editor -> Inspections,搜索“Scala style inspections”,勾选这一项

(7)小试牛刀:在 Intellij 中运行 example

flink 代码编译完成后,直接选择一个 example 即可运行,如: org.apache.flink.streaming.examples.windowing.WindowWordCount.java

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容