Sparkの構築

Apache Sparkの構築

Apache Maven

Mavenに基づいたビルドはApache Sparkのためのリファレンスのビルドです。Mavenを使ったSparkのビルドはMaven 3.3.9 あるいはそれ以上と、Java 7+を必要とします。Spark 2.0.0の時点でJava7のサポートは非推奨になり、Spark 2.2.0 では削除されるかも知れません。

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

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

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

Java 7を使ってコンパイルする場合は、MAVEN_OPTSに追加のオプション "-XX:MaxPermSize=512M" を追加する必要があるでしょう。

これらのパラメータをMAVEN_OPTSに追加しない場合、以下のようなエラーと警告を見るかも知れません:

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

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

[INFO] Compiling 233 Scala sources and 41 Java sources to /Users/me/Development/spark/sql/core/target/scala-{site.SCALA_BINARY_VERSION}/classes...
OpenJDK 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled.
OpenJDK 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize=

前述したMAVEN_OPTS 変数を設定することでこれらの問題を修正できます。

注意:

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

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

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

Hdoopバージョンの指定

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

Hadoop バージョン必要なプロファイル
2.2.xhadoop-2.2
2.3.xhadoop-2.3
2.4.xhadoop-2.4
2.6.xhadoop-2.6
2.7.x 以降の 2.xhadoop-2.7

Spark 2.1.0の時点で2.6より前のHadoopのバージョンのサポートは非推奨になり、Spark 2.2.0では削除されるかも知れません。

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

例:

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

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

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

# Apache Hadoop 2.6.X
./build/mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0 -DskipTests clean package

# Apache Hadoop 2.7.X and later
./build/mvn -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.0 -DskipTests clean package

# Different versions of HDFS and YARN.
./build/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はHave 1.2.1 バインドと一緒にビルドされるでしょう。

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

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

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

Mesosサポートのビルド

./build/mvn -Pmesos -DskipTests clean package

Scala 2.10 のための構築

Scala 2.10と一緒にコンパイルされたSparkパッケージを生成するには、-Dscala-2.10 プロパティを使ってください:

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

Spark 2.1.0の時点でScala 2.10のサポートは非推奨になり、Spark 2.2.0 では削除されるかも知れません。

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

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

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

./build/mvn -pl :spark-streaming_2.11 clean install

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

継続した寄せ集め

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

./build/mvn scala:cc

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

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

$ ./build/mvn install
$ cd core
$ ../build/mvn scala:cc

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 が呼ばれた時はいつでも自動的に再起動されるでしょう。

SBTを使った構築

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

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

./build/sbt -Pyarn -Phadoop-2.3 package

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

 暗号化ファイルシステム

暗号化されたファイルシステム上で構築する場合(例えば、もしホームディレクトリが暗号化されている場合)、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も見てください。

IntelliJ IDEA あるいは Eclipse

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

テストの実行

デフォルトでは ScalaTest Maven pluginを使ってテストが実行されます。テストはrootあるいはadminユーザとして実行すべきでは無い事に注意してください。

以下はテストを実行するコマンドの例です:

./build/mvn -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver test

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

./build/mvn -P... -Dtest=none -DwildcardSuites=org.apache.spark.repl.ReplSuite test
./build/mvn -P... -Dtest=none -DwildcardSuites=org.apache.spark.repl.* test

あるいは Javaテスト:

./build/mvn test -P... -DwildcardSuites=none -Dtest=org.apache.spark.streaming.JavaAPISuite

SBTを使ったテスト

以下はテストを実行するコマンドの例です:

./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 "test-only org.apache.spark.repl.*"

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

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

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

Java8 テストだけの実行

./build/mvn install -DskipTests
./build/mvn -pl :java8-tests_2.11 test

あるいは

./build/sbt java8-tests/test

Java 8 JDKが検知された場合は、Java 8 テストが自動的に有効になります。JDK8をインストールしたがシステムのデフォルトでは無い場合は、テストを実行する前に JAVA_HOME をJDK 8 を示すように設定することができます。

PySpark pip installable

Python環境で使うためにSparkをビルドしていて、pipインストールしたい場合は、上で説明したように最初にSpark Jarをビルドする必要があるでしょう。そうすればsetup.pyとpip installableパッケージに適したsdistパッケージを構築することができます。

cd python; python setup.py sdist

注意: パッケージ化の必要性からPythonディレクトリから直接pip installすることができません。むしろ上で述べたように最初にsdistパッケージをビルドすべきです。

Mavenを使ったPySparkのテスト

PySparkをビルドしていて、PySparkテストを実行したい場合は、Hiveサポートと一緒にSparkをビルドする必要があるでしょう。

./build/mvn -DskipTests clean package -Phive
./python/run-tests

run-tests スクリプトは特定のPythonのバージョンあるいは特定のモジュールに制限することもできます。

./python/run-tests --python-executables=python --modules=pyspark-sql

注意: Hiveサポートと一緒にSparkをビルドする場合には、sbtビルドと一緒にPythonテストを実行することもできます。

R のテストの実行

SparkRテストを実行するには、R パッケージtestthat をインストールする必要があるでしょう(Rシェルから install.packages(testthat) を実行します)。以下のコマンドを使ってSparkRテストのみを実行することができます:

./R/run-tests.sh

Dockerに基づいた統合テストスィーツ

Dockerの統合テストを実行するには、boxにdocker エンジンをインストールする必要があります。インストレーションの説明はDocker サイトで見つけることができます。一度インストールしてからまだ実行されてない場合は、docker サービスを開始する必要があります。Linux上では、sudo service docker startによって行うことができます。

./build/mvn install -DskipTests
./build/mvn -Pdocker-integration-tests -pl :spark-docker-integration-tests_2.11

あるいは

./build/sbt docker-integration-tests/test
TOP
inserted by FC2 system