こんにちは。
Spark Summitの資料をとりあえず読んでみよう、の第1弾です。
1番目ということでKeynoteである 「The State of Spark, and Where We’re Going Next」を見てみました。
多分、これがSparkの特徴を復習したり現状を把握するには一番早いと思いますので。
では、見てみます。
Sparkプロジェクトの歴史
- 研究プロジェクトとして2009年開始
- 2010年にOSS化(初期バージョンは1600LOC!Wikipedia用のデモでした)
- 2013年7月にApache Incubator化
- 現在100人以上の開発者(Contributor)、25の会社によって開発が進んでおり、最も開発が活発なBigDataプロダクトの一つになっている
- 比較:Stormは48人、Giraphは52人、Drillは18人、Tezは12人、6か月前についにHadoop MapReduceより活発なプロジェクトになった!
- 実際StormはリードコミッタのNathanさんが会社立ち上げに入ってからめっきり勢いは落ちましたからねぇ・・・
- カンファレンスも3回開催され、規模がどんどん大きくなってきている
Sparkプロジェクトの構成、コード規模
- Sparkは下記のように同一のエンジンであるSpark上で複数のプロダクトが動作する構成になっている
- コードサイズも様々な機能を備えた上でこれだけ小さい!
- ・・と言いつつ、実はStormはこのコード量の7割が自動生成されたThriftのコードなのでこの比較は微妙な所ではあります。
- そもそも基本のコード量としてJava>Scala>Clojureなので、とりあえずこのスライドはアピールのためと割り切った方がいいかと。
Sparkプロジェクトの利点
- ビッグデータの世界の流れとして、様々なユースケースが存在するため、各ユースケースに対応するためにプロダクトが乱立してしまっていた。
- Pregel、Giraph、Dremel、Tez、Storm、S4 etc
- Sparkは前述のプロジェクト構成でも説明したように、各ユースケースに特化するのではなく、同一エンジン上で様々なユースケースのアプリを動作させるというアプローチをとった。
- 基本となるエンジンはMapReduceを汎用化して作った。
- DAG形式の計算モデルと、RDDによるデータ共有機構という2点に特化することにより、様々なユースケースに対応できる広い汎用性を得ている。
- この構成によって、ユーザは1つのシステム上で複数のユースケースを動作させる際に複数のプロダクトを導入するのではなく、「統合された」Spark上で実行できるようになった。
- Spark上ではScala&RDDによるアプリケーション、SQLによるアプリケーション等が一律で動き、幅広いジョブの定義が可能になっている。
■Scala&RDDによるアプリケーション
val points = sc.runSql[Double, Double](
“select latitude, longitude from historic_tweets”)
val model = KMeans.train(points, 10)
sc.twitterStream(...)
.map(t => (model.closestCenter(t.location), 1))
.reduceByWindow(“5s”, _ + _)
■SQLによるアプリケーション
GENERATE KMeans(tweet_locations) AS TABLE tweet_clusters
// Scala table generating function (TGF):
object KMeans {
@Schema(spec = “x double, y double, cluster int”)
def apply(points: RDD[(Double, Double)]) = {
...
}
}
今後のSparkの開発の流れについて
- 今後の開発の流れとして「ビッグデータのツールが多く存在し、チューニング&活用が大変になっていること」をSparkで解決することが挙げられる。
- ゴール:ビッグデータを扱うシステムを通常サイズのデータを扱うシステムとシームレスに結合でき、活用できるようにすること
- 現状立ち上がっている開発のサブチームは下記の通り
- 標準ライブラリ
- Databricksはこの領域を重点領域としている。Spark Streamingの改善、Sharkの最適化やSparkプロジェクト内の別プロダクトの呼び出し可能化がある。
- デプロイメント
- どこでも使えるようにすることが目標。YARNへの適応とSIMRというMapReduceクラスタの上でそのまま動作するアダプタが対象。
- 容易に使えること
- 監視とメトリクス取得(0.8)、大量タスクへの適応/スタンドアローンモードの信頼性向上(0.8.1)、外部ハッシュキー/ソート(0.9.0)
- 最終的にはデフォルトの設定のみで幅広い環境に適応させることが目標となる。
最後に
- ビッグデータの次の主戦場は複雑な演算を低レイテンシで実行するという領域となる。
- Sparkは上記の領域に対して「統一された」エンジンを提供出来る。
- ただ、もっとも大事なのはコミュニティの力となるためこのSpark Summitも楽しんでほしい。
・・・という内容でした。
Sparkを用いることで複数のビッグデータを扱うユースケースを一つの基盤で一律で扱える、
というアプローチが明確になっていたのは興味深い所でした。
それでは。