Build Flink
你需要先下载源代码才能 build Flink, 可以直接下载个release版本或者去github上拉下来. 还有Maven 3, Flink 至少需要Java 7.我们推荐使用Java 8。
运行下面这行拉源代码:
git clone https://github.com/apache/flink
最简单的building Flink的方法是运行下面这行:
cd flink
mvn clean install -DskipTests
这个内置的maven命令会先清空以前build的东西, 然后重新build Flink包. -DskipTests命令可以让maven跳过测试。
Build Flink 针对特定的Hadoop版本
这节是关于build flink针对特定的Hadoop版本. 通常,大多数用户不需要做这一步. Flink的下载页包含了比较通用的build完的二进制包了。.
因为Flink 依赖Hadoop的HDFS 和YARN . 同时Hadoop有多种版本. 如果Hadoop版本不一致 会出现如下的异常。
ERROR: Job execution failed.
org.apache.flink.runtime.client.JobExecutionException: Cannot initialize task 'TextInputFormat(/my/path)':
java.io.IOException: Failed on local exception: com.google.protobuf.InvalidProtocolBufferException:
Protocol message contained an invalid tag (zero).; Host Details :
Hadoop主要有两种版本,Hadoop1(0.20, 0.23 or 1.2.1)和Hadoop2(2.2之后的),最主要的区别是YARN (Hadoops cluster resource manager).
默认情况下 Flink依赖Hadoop 2.
下面的命令可以build Hadoop1版本的 flink:
mvn clean install -DskipTests -Dhadoop.profile=1
-Dhadoop.profile=1,这个标志可以
让Maven build Hadoop 1的依赖的Flink . 需要注意的是不同的Hadoop build处理的flink的功能是不一样的. 特别是对YARN 的支持和内置的HBase支持 的功能,在 Hadoop 1 是不支持的。
你也可以特别定制一个版本:
mvn clean install -DskipTests -Dhadoop.version=2.4.1
以下命令可以用来,为Flink定制一些类似cloudera 的Hadoop版本。:
mvn clean install -DskipTests -Pvendor-repos -Dhadoop.version=2.2.0-cdh5.0.0-beta-2
-Pvendor-repos
可以激活 一个带有多个Hadoop发行版的repositories的maven的构建文件, 比如Cloudera, Hortonworks, or MapR这几个.
Build Flink for hadoop2
versions before 2.2.0
maven会自动为flink构建yarn的功能,但是Hadoop2.2.0之前的是不带yarn的,所以 可以通过下面这个标志让flink去掉yarn的功能: -P!include-yarn
.
So if you are building Flink for Hadoop 2.0.0-alpha
, use the following command:
-P!include-yarn -Dhadoop.version=2.0.0-alpha
Build Flink 针对特定的Scala版本
Note:使用java api的用户可以跳过这一节
Flink 的APIs, lib包, 和运行模型有的是Scala写的,因为Scala不是严格的向后兼容。所以必须保证flink使用的scala和用户的scala版本一致,默认情况下, Flink是Scala 2.10.。你可以使用下面的脚本来 build scala 2.11的flinkTo build Flink。:
# Switch Scala binary version between 2.10 and 2.11
tools/change-scala-version.sh 2.11
# Build and install locally
mvn clean install -DskipTests
To build against custom Scala versions, you need to switch to the appropriate binary version and supply the language version as additional build property. For example, to buid against Scala 2.11.4, you have to execute:
# Switch Scala binary version to 2.11
tools/change-scala-version.sh 2.11
# Build with custom Scala version 2.11.4
mvn clean install -DskipTests -Dscala.version=2.11.4
Flink是使用 Scala 2.10开发的, 同时Scala 2.11也测试通过. 目前只有这两个版本是适合flink的 . 早些的版本 (比如Scala 2.9) 是不适合的。
最新的版本可能会适合 , 是否适合取决于最新的scala的功能变动, 和flink用到的scala功能,在最新的版本里是否有变化. 通过Scala 编写的依赖包比如Kafka, Akka, scala测试, 和scopt.
在加密的文件系统里 build
如果你的home目录是加密的,你可能会遇到a java.io.IOException: File name too long
exception. 原因是有些加密文件系统, 比如Ubuntu的encfs , 不支持长的文件名, 所以导致这个错误.
解决方案是在pom.xml增加下面这一段:
<args>
<arg>-Xmax-classfile-name</arg>
<arg>128</arg>
</args>
比如再flink-yarn
module这个子项目里出现这个错误,就在这个子项目的pom.xml的<configuration>标签内的scala-maven-plugin里添加上面这一段. 更多相关内容可以点击后面这个链接查看this issue。
背景
使用Maven来build flink是依赖properties和build profiles来控制的。properties有两个文件,一个hadoop2( 2.2.0),一个 hadoop1(1.2.1)。当hadoop2是可用的,flink会build进yarn client的功能。
在maven build的时候添加 -Dhadoop.profile=1可以激活Hadoop1的properties文件
,通过properties配置文件设置的Hadoop版本,默认是Hadoop1.2.1和Hadoop2.2.0
如果不想用默认Hadoop可以通过这两个标记, hadoop-two.version
和 hadoop-one.version
. 比如说 -Dhadoop-two.version=2.4.0
.