Sparkがどんなものかを体験するため、インストールして実際に処理を実行しながら学んでいきましょう。
公式サイトのダウンロードページから2.0.0を選択してダウンロードしてください。パッケージタイプは「Pre-built for Hadoop 2.7 and later」でOKです。
ダウンロードしたものを展開すると「jars」ディレクトリ以下には依存のjarファイルが入っています。そして、「lib」ディレクトリ以下にjarファイル、「bin」「sbin」ディレクトリ以下には、実行スクリプトが配置されているはずです。この実行スクリプトを使うことで、対話型で分析したり、記述したアプリケーションを実行したりすることができます。
主要なスクリプトを下記に挙げておきます。
本稿では、この中からspark-shellを使っていきます。
Sparkのクラスタは1つのマスターと複数のワーカーで構成されています。
クラスタ起動スクリプトが用意されているので、試しにローカル機でマスターとワーカーを立ち上げてみます。
まず、マスターを立ち上げるために、展開したディレクトリに移動して下記のコマンドを実行します。
./sbin/start-master.sh
「starting org.apache.spark.deploy.master.Master, logging to ...」と表示され、ログのパスも確認できます。
もし、「localhost: ssh: connect to host localhost port 22: Connection refused」というメッセージが表示された場合は、リモートログインの設定の変更が必要なので確認してみてください(Macの場合は必要です)。
Sparkには処理の状況が確認できる便利なWebのユーザーインタフェース(以下、WebUI)があり、クラスタやマスターの詳細を確認できます。
WebUIを使うには、下記のURLにアクセスしてみてください。
ページ内には、マスターのURLやREST URL、Alive workersなどが表示されているはずです。もしページにアクセスできない場合は、起動に失敗している可能性があるので、ログを確認して見てください
次に、ワーカーを立ち上げます。本番運用では別ノード上で行うものですが、今回は、ローカル内で立ち上げます。引数に先ほど立ち上げたマスターのURLを指定してください(マスターのURLは前述のWebUIで確認できます)。
./sbin/start-slave.sh {マスターのURL}
うまく立ち上がると、WebUIの「Workers」にも追加されます。
クラスタ起動スクリプトは他にもあり、マスターとワーカーを一気に立ち上げるものや、設定ファイルに記載のワーカーを一気に立ち上げるもの、それらを停止するものなどがあります。
自分自身でクラスタを構築する場合は、ホスト名やポートなどを指定して各サーバ上でこれらのスクリプトを実行する必要があります。
停止したい場合は、下記のコマンドで終了させることができます。今回は引き続き立ち上げたクラスタを使っていくので、立ち上げたまま次に進みましょう。
sbin/stop-all.sh
先ほど立ち上げたクラスタにspark-shellでつなげてみましょう(--masterのオプションにはマスターのURLを指定してください。マスターのURLは前述のWebUIで確認できます)。
./bin/spark-shell --master {マスターのURL}
下記のような表示が出てきたら、準備OKです。
ちなみに、先ほどのWebUIの「Running Applications」にNameが「Spark shell」となっている行が追加されているはずです。
spark-shellで下記のScalaのコードを実行してみます。これは、1から1000の数値をそれぞれ2倍にした数値を足し上げる処理です。処理は、10のパーティションに分けています。パーティションとは並列実行可能なデータの単位です。
sc.parallelize(1 to 1000, 10).map(_*2).reduce(_+_)
早速、計算結果の数値が返却されたと思います。これくらいの計算量であれば、すぐに終わります。
では、ちょっと時間のかかりそうな処理に変更してみましょう。1000までではなくIntの最大値を指定してみます。
sc.parallelize(1 to 2147483647, 10).map(_.toDouble*2).reduce(_+_)
筆者の環境だと1分ちょっとかかりました。
このように計算量が多くなると、処理に時間がかかってしまいます。しかし、複数台のクラスタ上で実行した場合は、複数のノードで並列実行されますので、もっと早く終わることが期待できます。
Copyright © ITmedia, Inc. All Rights Reserved.