Sparkの構築

Mavenを使ったSparkの構築には、Maven 3.3.3 以上およびJava 7+ が必要です。Sparkビルドは適したMavenバイナリを提供することができます; 以下を見てください。

build/mvnを使った構築

今ではSparkはbuild/ディレクトリの下のソースから簡単にビルドおよびSparkの配備をするように自己内包Mavenインストレーションと一緒にパッケージ化されています。このスクリプトは自動的に全ての構築に必要なものをbuild/ ディレクトリの中に内部的にダウンロードおよびセットアップします (Maven, Scala および Zinc) 。なんらかのmvnバイナリが既にあれば光栄ですが、それはScalaおよびZinc自身のコピーを適切なバージョンに一致するかに関係なくダウンロードしてくるでしょう。build/mvn execution は以前のビルドメソッドへの簡単な移行ができるmvn への呼び出しとして振る舞うことができます。例として、以下のようにしてSparkのバージョンを構築することができます:

build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package

他の構築の例は以下で見つけることができます。

注意:暗号化されたファイルシステム上で構築する場合(例えば、もしホームディレクトリが暗号化されている場合)、Sparkの構築は"Filename too long"エラーで失敗するかも知れません。次善策として、プロジェクトのpom.xmlscala-maven-pluginの構成引数に以下のものを追加します:

<arg>-Xmax-classfile-name</arg>
<arg>128</arg>

以下のように project/SparkBuild.scala の中に追加します:

scalacOptions in Compile ++= Seq("-Xmax-classfile-name", "128"),

sharedSettings の値。これらの行をどこに追加するか自信が無ければ、this PRも見てください。

実行可能な分散の構築

Spark Downloadsページで配布されているようなSparkの配布物を作成し、実行可能なように配置するには、プロジェクトのルートディレクトリにあるmake-distribution.shを使います。直接MavenビルドをするようにMavenプロファイル設定などを設定することができます。例:

./make-distribution.sh --name custom-spark --tgz -Psparkr -Phadoop-2.4 -Phive -Phive-thriftserver -Pyarn

使い方についての詳しい情報は、./make-distribution.sh --helpを実行してください。

Mavenのメモリの使い方のセットアップ

MAVEN_OPTSを設定することで、普段より多くのメモリを使うようにMavenを設定する必要があるでしょう。以下の設定をお勧めします:

export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

もしこれを実行しなければ、以下のようなエラーを見るかも知れません:

[INFO] Compiling 203 Scala sources and 9 Java sources to /Users/me/Development/spark/core/target/scala-2.10/classes...
[ERROR] PermGen space -> [Help 1]

[INFO] Compiling 203 Scala sources and 9 Java sources to /Users/me/Development/spark/core/target/scala-2.10/classes...
[ERROR] Java heap space -> [Help 1]

以前に話した内容をMAVEN_OPTS 変数に設定することでこれをなすことができます。

注意:

Hdoopバージョンの指定

HDFSはバージョンを超えたプロトコルの互換性が無いため、HDFSから読み込みたい場合は、環境の特定のHDFSのSparkを構築する必要があるでしょう。これはhadoop.versionプロパティを使って行うことができます。設定しない場合は、デフォルトでSparkはHadoop 2.2.0の構築ができないでしょう。特定のHadoopバージョンに対して特定のビルドプロファイルが必要なことに注意してください。

Hadoop バージョン必要なプロファイル
1.x から 2.1.xhadoop-1
2.2.xhadoop-2.2
2.3.xhadoop-2.3
2.4.xhadoop-2.4
2.6.x および 2.x以降hadoop-2.6

Apache Hadoop バージョン 1.x, Cloudera CDH “mr1” distributions, および YARNを使わない他のHadoopバージョンでは、以下を使用します:

# Apache Hadoop 1.2.1
mvn -Dhadoop.version=1.2.1 -Phadoop-1 -DskipTests clean package

# Cloudera CDH 4.2.0 with MapReduce v1
mvn -Dhadoop.version=2.0.0-mr1-cdh4.2.0 -Phadoop-1 -DskipTests clean package

yarnプロファイルを有効にすることができ、hadoop.versionと異なる場合には任意でyarn.versionを設定することができます。Spark はYARNバージョン2.2.0以降をサポートします。

例:

# Apache Hadoop 2.2.X
mvn -Pyarn -Phadoop-2.2 -DskipTests clean package

# Apache Hadoop 2.3.X
mvn -Pyarn -Phadoop-2.3 -Dhadoop.version=2.3.0 -DskipTests clean package

# Apache Hadoop 2.4.X or 2.5.X
mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=VERSION -DskipTests clean package

Versions of Hadoop after 2.5.X may or may not work with the -Phadoop-2.4 profile (they were
released after this version of Spark).

# Different versions of HDFS and YARN.
mvn -Pyarn -Phadoop-2.3 -Dhadoop.version=2.3.0 -Dyarn.version=2.2.0 -DskipTests clean package

HiveおよびJDBCサポートの構築

JDBCサーバとCLIを伴うSpark SQLのためにHive統合を有効にするには、-Phive およびPhive-thriftserver プロファイルを既存のビルドオプションに追加します。デフォルトではSparkはHive 0.13.1をバインドしてビルドするでしょう。

# Apache Hadoop 2.4.X with Hive 13 support
mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -Phive -Phive-thriftserver -DskipTests clean package

Scala 2.11のための構築

Scale 2.11を使ってSparkパッケージを生成するには、-Dscala-2.11 プロパティを使います:

./dev/change-scala-version.sh 2.11
mvn -Pyarn -Phadoop-2.4 -Dscala-2.11 -DskipTests clean package

Spark はScale 2.11のJDBCコンポーネントをサポートしていません。

MavenでのSparkのテスト

デフォルトでは ScalaTest Maven pluginを使ってテストが実行されます。

幾つかのテストはSparkが最初にパッケージされていることを必要とするため、最初に-DskipTestsをつけてmvn packageを常に実行してください。以下は正しい(ビルド、テスト)の順番の例です:

mvn -Pyarn -Phadoop-2.3 -DskipTests -Phive -Phive-thriftserver clean package
mvn -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver test

ScaleTestプラグインはまた以下のようにして特定のテストスイートのみの実行をサポートします:

mvn -Dhadoop.version=... -DwildcardSuites=org.apache.spark.repl.ReplSuite test

サブモジュールの個別の構築

mvn -pl オプションを使ってSparkのサブモジュールを構築することが可能です。

例えば、Sparkストリーミングモジュールを以下を使って構築することができます:

mvn -pl :spark-streaming_2.10 clean install

ここで、spark-streaming_2.10streaming/pom.xmlファイル内で定義されたartifactId です。

継続した寄せ集め

逐次および継続的な寄せ集めをサポートするscale-maven-pluginを使用します。例えば、

mvn scala:cc

は、継続的な寄せ集めを実行しなければなりません (つまり、変更を待ちます)。しかしながら、これは広範囲に渡ってテストされていません。注意すべき問題点:

従って、継続的なcoreサブモジュールの寄せ集めを実行するためのフローは以下のようになるかも知れません:

$ mvn install
$ cd core
$ mvn scala:cc

IntelliJ IDEA あるいは Eclipseを使ったSparkの構築

Spark開発のためのIntelliJ IDEA あるいはEclipseでのセットアップのヘルプは、IDEセットアップのためのwikiページを見てください。

Java 8 テストスイートの実行

Java8 テストだけの実行

mvn install -DskipTests -Pjava8-tests

あるいは

sbt -Pjava8-tests java8-tests/test

Java 8テストは-Pjava8-testsプロファイルが有効な場合にのみ実行されます。それらは -DskipTestsの代わりに実行されるでしょう。それらのテストがシステムを実行するためには、JDK8インストレーションが必要です。JDK8をインストールしたがシステムのデフォルトでは無い場合は、テストを実行する前に JAVA_HOME をJDK 8 を示すように設定することができます。

YARN上のPySparkの構築

YARN上のPySpark は、jarがMavenで構築された場合にのみサポートされます。更に、RedHatベースのオペレーションシステムでのこのアセンブリjarの構築には知られた問題があります(see SPARK-1753)。Red HatがインストールされたYARNクラスタ上でPySparkを実行したい場合は、jarを別の場所で構築し、クラスタを超えて出荷することをお勧めします。これについての正確な問題点を調査中です。

YARNのHadoop依存無しのパッケージング

mvn packageで生成されたアセンブリjarは、デフォルトで全てのSparkの配布物、Hadoopおよび幾つかのエコシステムプロジェクトを含むでしょう。YARNデプロイメントでは、これは複数のバージョンがexecutorのクラスパスに現れることを引き起こします; Sparkアセンブリ内にパッケージされているバージョンと各ノード上のバージョン、yarn.application.classpathに含まれているバージョンです。hadoopが提供する プロファイルは、ZooKeeperおよびHadoopそれ自身のようなHadoopエコシステムプロジェクトを含むこと無しにアセンブリを構築します。

SBTを使った構築

Maven はSparkのパッケージングのための公式なお勧めのビルドツールです。そしてbuild of referenceです。しかし、SBTは継続的な寄せ集めでもっと高速なので、日々の開発をサポートされます。より進歩的な開発者はSBTを使いたいと思うかも知れません。

SBT ビルドはMaven POMファイルから派生したため、同じMavenプロファイルと変数がSBTビルドを制御するために設定することができます。例えば:

build/sbt -Pyarn -Phadoop-2.3 assembly

毎回sbtを起動するオーバーヘッドを避けるために、再コンパイルする必要があります。build/sbtを実行することでsbtを対話モードで起動することができ、コマンドプロンプトで全てのビルドコマンドを実行します。ビルド時間の削減についての更なるお勧めは wiki pageを参照してください。

SBTを使ったテスト

幾つかのテストはSparkが最初にパッケージされることを必要とするため、最初にbuild/sbt assembly を常に実行してください。以下は正しい(ビルド、テスト)の順番の例です:

build/sbt -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver assembly
build/sbt -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver test

以下のようにして特定のテストスイートだけを実行します:

build/sbt -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver "test-only org.apache.spark.repl.ReplSuite"

以下のようにして特定のサブプロジェクトのテストスイートだけを実行します:

build/sbt -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver core/test

Zincを使った寄せ集めのスピードアップ

Zinc はSBTの逐次コンパイラの長く実行されるサーババージョンです。バックグラウンドプロセスとしてローカルで実行する場合、SparkのようなScalaベースのプロジェクトの構築をスピードアップします。Mavenを使ってSparkを定期的に再コンパイルする開発者はZincに最も興味があるでしょう。プロジェクトサイトで zincの構築と実行の使用方法を得るでしょう; OS X ユーザは brew install zincを使ってインストールすることができます。

build/mvn パッケージの zincを使うと、自動的に全てのビルドのダウンロードおよび利用が行われます。このプロセスは、ZINC_PORT環境変数が設定されていない場合は、最初の build/mvn が呼ばれた時に自動開始されポート3030をバインドするでしょう。zinc プロセスはbuild/zinc-<version>/bin/zinc -shutdown を実行することでいつでもシャットダウンされ、 build/mvn が呼ばれた時はいつでも自動的に再起動されるでしょう。

TOP
inserted by FC2 system