2014年1月28日火曜日

Spark + YARN + CDHの相性

http://spark.incubator.apache.org/
Sparkは、Hadoop上で動作するクラスターコンピューティングの基盤です。
という説明で正確かは自信ありません。。

生のHadoop+HDFS構成でMapReduceを動作させると基本的にHDFSに対してシーケンシャルアクセスが発生しますが、たとえばMapReduce上でiterableな解析処理を実行しようとすると毎回HDFSをシーケンシャルに読み込むために性能劣化につながります。
そのためSparkではRDD(Resilient Distributed Dataset)というデータ機構を独自に用意し、一度読み込んだデータはメモリ上にキャッシュするなどの対策でiterableな解析処理も多少は最適化するようになっています。

この特性を活かして、MLlibのような機械学習ツールや、Bagelのようなグラフ解析ツールも用意されています。
http://spark.incubator.apache.org/docs/latest/mllib-guide.html
http://spark.incubator.apache.org/docs/latest/bagel-programming-guide.html

また、インタラクティブコンソール上でscalaやpythonを用いてduck typing的に処理が書けるのも特徴です。

Sparkは独自のCluster Managerを持ち、この上で分散処理をコントロールします。Cluster Managerはstandaloneで動作させることもできますし、MesosやYARNなどのResource Managerに任せることもできます。スペック的には。。



Sparkでは、YARNと連携する際、ダウンロードしてきたソース・ファイルを用いてYARNの環境向けにビルド(assembly)しなおす必要があります。
ドキュメントは以下。
http://spark.incubator.apache.org/docs/latest/running-on-yarn.html

基本的には、YARNの動作環境にあわせて環境変数(SPARK_HADOOP_VERSION)に適切な値を設定し、「sbt assembly」を実行します。
指定すべきバージョンは以下が参考になります。
http://spark.incubator.apache.org/docs/latest/hadoop-third-party-distributions.html

試しに、CDH4.5とSpark8.1を組み合わせてYARN連携をしようとしてみました。マニュアル通りSparkのインストールディレクトリで以下を実行します。
./sbt/sbt clean
SPARK_HADOOP_VERSION=2.0.0-cdh4.5.0 SPARK_YARN=true ./sbt/sbt assembly
ただし上記を実行すると、コンパイル時にエラーになります。
エラーメッセージは以下のような感じで
https://gist.github.com/moaikids/8663958

要約すると、org.apache.spark.deploy.yarn.YarnAllocationHandler.scala内で
import org.apache.hadoop.yarn.api.records.{AMResponse, ApplicationAttemptId}
というimport文があるのですが、このうち「AMResponse」インターフェースが存在しないため、コンパイルエラーになります。

Apache Hadoopの例えばr2.0.5-alphaには含まれていますが、
http://hadoop.apache.org/docs/r2.0.5-alpha/api/org/apache/hadoop/yarn/api/records/AMResponse.html
CDH4.5には含まれていない、
http://archive.cloudera.com/cdh4/cdh/4/hadoop-2.0.0-cdh4.5.0/api/org/apache/hadoop/yarn/api/records/
という状態です。

色々調べてみると、現在のSparkはApache Hadoop2.2でstableになったクラスを前提としているようで、CDH4.5(Hadoop2.0ベース)ではYARN経由での連携は出来ないようです。
詳細については以下のMailing Listのやりとりが詳しいです。
https://groups.google.com/forum/#!topic/spark-users/T1soH67C5M4

基本的には、CDH4.5でSpark8.1を動かす場合はstandaloneモードが無難ですし、どうしてもYARN連携したい場合は現在(2014/01/28現在)Beta1のCDH5を使って構築してみるか、のいずれかの選択肢になります。



0 件のコメント:

コメントを投稿