Flink 是一个以 Java 及 Scala 做为开发语言的开源大数据项目,代码开源在 github 上,并使用 maven 来编译和构建项目。对于大部分开发或使用 Flink 的同窗来讲,Java、Maven 和 Git 这三 个工具是必不可少的,所以首先须要把这三个工具进行安装和配置。另外,一个强大的 IDE 有助于咱们更快的阅读代码、开发新功能以及修复 bug,所以这里也会简单介绍 IDE 的相关 配置。java
Git工具安装配置完成后,咱们就能够从 github 上下载 Flink 代码了。github 上 flink 的代码仓库是github.com/apache/flin…node
(可选)对于国内的用户,下载 github 上的代码可能比较慢,能够在/etc/hosts 中增长以下配置, 能够显著提高 github 的下载速度:git
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”文件中。github
若是使用 Win10 Linux 子系统,建议也配置在“C:\Windows\System32\drivers\etc\hosts”文件中, 而后重启 Linux 子系统,由于 Linux 子系统中的/etc/hosts 文件是根据 Window 系统中的“C:\Windows\System32\drivers\etc\hosts”这个文件生成的。web
使用 Win10 Linux 子系统还能够经过删除 Linux 子系统的/etc/hosts 文件中的这一行来阻止 Linux 子系统启动的时候覆盖修改过的 hosts 文件:apache
# This file was automatically generated by WSL. To prevent automatic generation of this file, remove this line.
复制代码
下载 Flink 代码到本地bash
git clone https://github.com/apache/flink.git
复制代码
(可选)代码下载完后,默认是在 master 分支,考虑到代码质量,通常会选择合适的发布分支 使用,好比 release-1.7 或者 release-1.8。app
git checkout release-1.7
git checkout release-1.8
复制代码
Flink 代码使用 maven 构建项目,编译代码的时候 maven 默认会根据当前用户下的 “~/.m2/settings.xml”文件中的配置信息下载 Flink 的依赖包,也能够在 mvn 命令中增长“-- settings=${your_maven_settings_file}”来指定 maven settings 文件的位置。 若是你以前已有合适的 maven settings 的配置,能够直接使用已有的配置即maven
若是须要指定 maven 的 local repository 的路径,能够在 settings.xml 文件中配置 “localRepository”这个参数。默认状况下会下载到“~/.m2/repository/”(即当前用户 home 目录下 的“.m2/repository”目录)。ide
重要的配置片断以下所示。
<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 信息: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/目录中看到:
在编译中可能遇到的问题
这种错误通常都和 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 目录下了,以后的编译就没问题了。
我在 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 命令比较耗内存,整机内存 差很少用完了)。这个问题目前没有结论,有兴趣和条件的同窗,也能够试一试。
一个好的 IDE 不只能有效的提升开发者的开发效率,并且对于不作代码开发可是但愿经过代码学 习 Flink 的人来讲,也很是有助于其对代码的理解。
推荐使用 IntelliJ IDEA IDE 做为 Flink 的 IDE 工具。官方的说法是,不建议使用 Eclipse IDE,主 要缘由是 Eclipse 的 Scala IDE 和 Flink 用 scala 的不兼容。
(1)下载安装 Intellij IDEA,Intellij IDEA IDE 的下载地址:www.jetbrains.com/idea/,下载最新版…
(2)安装 Scala plugin, Flink 项目使用了 Java 和 Scala 开发,Intellij 自带 Java 的支持,在导入 Flink 代码前,还须要确 保安装 Intellij 的 Scala plugin。安装方法以下:
(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 代码
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:
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
须要说明的是,Flink 中的一些模块并不能彻底 checkstyle 经过,包括 flink-core、flink-optimizer 和 flink-runtime。但不管如何,仍是应当保证你新增或修改的代码遵照 checkstyle 的规范。
(6)添加 Scala 的 Checkstyle
(7)小试牛刀:在 Intellij 中运行 example
flink 代码编译完成后,直接选择一个 example 便可运行,如: org.apache.flink.streaming.examples.windowing.WindowWordCount.java