このページはソースから Flink 1.3-SNAPSHOT をビルドする方法をカバーします。
Flinkをビルドするために、ソースコードが必要です。リリースのソースをダウンロード または gitリポジトリをクローンします。
さらに、Maven 3 と JDK (Java Development Kit)が必要です。Flink はビルドするために少なくとも Java 7が必要です。Java 8を使うことをお勧めします。
注意: Maven 3.3.x はFlinkをビルドすることができますが、わずかな依存を適切に取り除くことができないでしょう。Maven 3.0.3 はライブラリを適切に生成します。Java 8 を使ってユニットテストをビルドするには、PowerMock runnerを使うユニットテスト内での失敗を避けるためにJava 8u51以上を使ってください。
gitからクローンするには、以下を入力します:
git clone https://github.com/apache/flink
Flinkをビルドする最も簡単な方法は以下を実行することです:
mvn clean install -DskipTests
これは Maven (mvn
) にまず全ての既存のビルド (clean
) を削除し、それから新しいFlinkライブラリを作成 (install
)するように指示します。-DskipTests
コマンドはMavenがテストを実行することを防ぎます。
デフォルトのビルドはHadoop 2のためのYARNクライアントを含みます。
Flinkは異なるバージョンのライブラリを使ってクラッシュすることを避けるために、いくつかのライブラリを隠します。隠されるライブラリは Google Guava, Asm, Apache Curator, Apache HTTP Components などです。
依存性のシェーディング メカニズムは最近Mavenに変更され、Mavenのバージョンに依存してユーザがFlinkを少し異なる方法でビルドする必要があります:
Maven 3.0.x, 3.1.x, and 3.2.x Flinkのコードベースのルートディレクトリで mvn clean install -DskipTests
を呼ぶだけで十分です。
Maven 3.3.x ビルドは2つのステップでされなければなりません: 最初はベースディレクトリで、そして分散プロジェクト内で:
mvn clean install -DskipTests
cd flink-dist
mvn clean install
注意: Mavenのバージョンを調べるには mvn --version
を実行します。
Info ほとんどのユーザはこれを手動でやる必要はありません。ダウンロードページ は一般的なHadoopバージョンのためのバイナリパッケージを含みます。
FlinkはApache Hadoopから来る依存としてHDFSとYARNに依存があります。(アップストリームのプロジェクトおよび異なるHadoop配布物の両方による)多くの異なるバージョンのHadoopがあります。間違ったバージョンの組み合わせを使っている場合は例外が起こるかもしれません。
Hadoop はバージョン2.3.0 以上でサポートされます。特定のHadoopバージョンをビルドするように指定することもできます:
mvn clean install -DskipTests -Dhadoop.version=2.6.1
Hadoop 2.x バージョンはバージョン2.3.0以上でのみYARN機能がサポートされます。2.3.0未満のバージョンを使いたい場合は、以下の特別なビルド引数を使ってYARNサポートを除外することができます: -P!include-yarn
。
例えば、もし Hadoop 2.2.0
のためのFlinkをビルドしたい場合は、以下のコマンドを使います:
mvn clean install -Dhadoop.version=2.2.0 -P!include-yarn
ベンダー固有のHadoopバージョンのFlinkをビルドするには、以下のコマンドを発行します:
mvn clean install -DskipTests -Pvendor-repos -Dhadoop.version=2.6.1-cdh5.0.0
-Pvendor-repos
はCloudera, Hortonworks あるいは MapRのような人気のあるHadoopベンダーのリポジトリを含むMaven build profileを有効にします。
Info 純粋にJava APIとライブラリを使うユーザはこの章を無視することができます。
Flink はAPI、libraries そしてScalaで書かれている実行時ランタンムを持っています。(Scalaは厳密に後方互換性を持たないため)Scala APIとライブラリの利用者はFlinkのScalaバージョンをプロジェクトのScalaバージョンと合わせる必要があるかも知れません。
デフォルトでは、FlinkはScala 2.10でビルドされます。Scala2.11でFlinkをビルドするために、以下のスクリプトを使ってデフォルトのScala バイナリバージョンを変更することができます。
# Switch Scala binary version between 2.10 and 2.11
tools/change-scala-version.sh 2.11
# Build with Scala version 2.11
mvn clean install -DskipTests
独自のScalaバージョンでビルドするには、適切なバイナリバージョンに切り替え、追加のビルドプロパティとして 言語バージョンを提供する必要があります。例えば、Scala 2.11.4でビルドするには以下を実行する必要があります:
# 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に対してテストされています。これら二つのバージョンは互換性があると知られています。(Scala 2.9のような)以前のバージョンは互換性がありません。
新しいバージョンは互換性があるかもしれませんが、Flinkによって使われる言語機能の破壊的な変更と、それらのScalaバージョンでのFlinkの依存の可用性に依存します。Scalaで書かれている依存物は、例えばKafka, Akka, Scalatest および scoptが含まれます。
たとえばホームディレクトリが暗号化されている場合、java.io.IOException: File name too long
例外に遭遇するかもしれません。Ubuntuで使われているencfsのようないくつかの暗号化ファイルシステムは長いファイル名を許可しません。それがこのエラーの原因です。
回避策は以下を追加することです:
<args>
<arg>-Xmax-classfile-name</arg>
<arg>128</arg>
</args>
エラーを起こしているモジュールのpom.xml
のコンパイル設定内に追加します。例えば、もしエラーがflink-yarn
モジュール内で起きた場合、上のコードはscala-maven-plugin
の<configuration>
タグの下に追加されるべきです。詳細はこの問題を見てください。