日経BPのITインフラテクノロジーAWARD 2015が発表されました。2015年にブレークすると予想されるクラウドやビッグデータの製品やサービスを選出しています。グランプリにDocker、準グランプリにApache Sparkが選ばれました。Sparkは2014年に入り盛り上がってきています。インメモリで高速に分散処理ができるため、機械学習のような繰り返し処理に向いています。MLibの機械学習ライブラリもあるので分散型機械学習フレームワークとして注目を集めています。そんなDockerとSparkを使い手軽に分散型機械学習の環境をつくり勉強していこうと思います。
Sparkの書籍
新しい技術を学習する場合、最初は書籍から網羅的にはいったほうが概念をつかみやすいです。
- Advanced Analytics with Spark Patterns for Learning from Data at Scale
- Learning Spark Lightning-Fast Big Data Analytics
- Fast Data Processing with Spark
Advanced Analytics with Spark Patterns for Learning from Data at ScaleはO’Reilly Web Ops & Performance NewsletterからHappy Holidaysギフトでプレゼントしてもらいました。
SequenceIQのDockerイメージ
DockerイメージはSequenceIQのsequenceiq/sparkを使います。SequenceIQはHadoop-as-a-Service APIのCloudbreakオープンソースで開発しています。CloudbreakはAmbariとDockerを使っているようです。
インストール
sequenceiq/sparkのDockerイメージをpullします。2014-12-18にリリースされたSpark 1.2.0を使います。
$ docker pull sequenceiq/spark:1.2.0 |
コンテナを起動します。
$ docker run -i -t -h sandbox sequenceiq/spark:1.2.0 /etc/bootstrap.sh -bash |
最後の-bash
は/etc/bootstrap.shを実行するときのフラグです。/bin/bash
を起動します。
... |
インストールとバーションの確認
Hadoopのバージョンは2.6.0です。
$ hadoop version |
Sparkのバージョンは1.2.0、Scalaのバージョンは2.10.4です。
$ spark-shell |
Sparkのインストールディレクトリです。
$ echo $SPARK_HOME |
Hadoopのインストールディレクトリです。
$ echo HADOOP_YARN_HOME |
spark-shellとpysparkコマンドは$SPARK_HOME/bin
に配置されています。
$ which spark-shell |
Spark Shell (ScalaとPython)
SequenceIQのブログApache Spark 1.2.0 on Dockerを読みながら試してみます。Quick StartにもSpark Shellのサンプルがあります。
インタラクティブ分析に使うSpark Shellには、Scalaのspark-shellとPythonのpysparkが用意されています。はじめにScala APIのspark-shellを起動してサンプルコードを実行します。
$ spark-shell |
次にSparkのPython APIであるPySparkを使います。pysparkを起動して同様のサンプルコードを実行します。
$ pyspark |
円周率計算のサンプル
spark-examples-1.2.0-hadoop2.4.0.jarから円周率計算のサンプルプログラムを実行します。
YARN上で実行するSparkアプリは2つのモードがあります。
- yarn-cluster mode
- SparkアプリはYARNクラスタで実行される
- 通常のバッチ処理で使う
- yarn-client mode
- Sparkアプリはローカルホストで実行される
- デバッグなどインタラクティブ処理で使う
yarn-cluster modeで実行すると、処理結果は$HADOOP_YARN_HOME/logs
に出力されます。
$ spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster --driver-memory 1g --executor-memory 1g --executor-cores 1 $SPARK_HOME/lib/spark-examples-1.2.0-hadoop2.4.0.jar |
ログを確認します。
$ cat /usr/local/hadoop/logs/userlogs/application_1420873088326_0001/container_1420873088326_0001_01_000001/stdout |
yarn-client modeで実行すると、処理結果はコンソールに標準出力されます。
$ spark-submit --class org.apache.spark.examples.SparkPi --master yarn-client --driver-memory 1g --executor-memory 1g --executor-cores 1 $SPARK_HOME/lib/spark-examples-1.2.0-hadoop2.4.0.jar |