Apach Spark とは?

Apach Sparkはクラスタリングコンピューティングプラットフォームの一つ。くだけた言い方をすると、 高速 かつ 汎用的 に大規模なデータを処理することができるもの。SparkはPython,Java,ScalaなどからシンプルなAPIで呼び出すことができ、他のビッグデータツールとの組み合わせも可能だ。

今回は、Apach Sparkでシンプルな(意味のない)コードを実行させてみた。どのライブラリ、フレームワークを学ぼうと、最初に書くコードはとてもシンプルで自分にとって理解の及ぶ範囲から始めるというのが、いつの間にか身につけた私の学習法の一つ。登山を始めるのだっていきなり富士山を登ったりはしない、高尾山くらいからのぼってコツをつかむのがいい。

実行環境

OS : Ubuntu 16.10

Sparkのダウンロード

Spark自体は公式サイトからダウンロードできる。Downloadから適当なバージョンのSparkを入手したら展開。

展開すると、以下のような階層になっているのがわかる。

> tree -L 1
.
├── LICENSE
├── NOTICE
├── R
├── README.md
├── RELEASE
├── bin          #実行ファイル郡。Sparkシェルもこのディレクトリに含まれる。
├── conf
├── data
├── examples     #実行可能な例題プログラムが格納されている。
├── jars
├── licenses
├── python
├── sbin
└── yarn

今のところ重要だと感じるのはbinとexample。それ以外はSparkプロジェクトの、コンポーネントソースコード等が含まれているから、見る機会はあまりないだろうと思う。

ビルドツール(SBT)の設定

今回はSparkをScalaで利用していきたいので、SBT(Simple Build Tool)を利用しソースコードのビルドを行う。SBTとはScalaで書かれたビルドツールの一つで、Scalaソースコードを管理するならSBTが一番だろう。Javaの殆どのプロジェクトがMavenで管理されているように。

SBTがわからない人は公式サイトを覗いてみるといい。わかりやすい(たぶん)説明が載っている。

SBTの設定はとても簡単で数行で今のところ問題ない。以下がその内容だ。

name := "learningSpark" // プロジェクトの名前。

version := "1.0" // プロジェクトのバージョン

scalaVersion := "2.10.6" // 使用するScalaのバージョン。

libraryDependencies ++= Seq( // 依存ライブラリ。ここで spark-core を依存関係に追加。
  "org.apache.spark" %% "spark-core" % "1.2.0" % "provided"
)

単語カウントをしてみる

以上で環境のセットアップは完了したので単語カウントのプログラムを書いてみた。書いてみたプログラム全体は以下になる。

見てもらうとわかると思うが、API自体もわかりやすいものになっているので、関数型言語を学習したことがある人には大体の動作がイメージできると思う。特にfilterやfirstといった関数はまさに関数型言語の特徴的なものだ。これらのコードの詳細については今後少しずつ記事にしていこうと思う。