Tomo's IT Blog

技術的な調査メモ

Apache Sparkの勉強-超概要を理解する

http://spark.apache.org/images/spark-logo-trademark.png


Apache Sparkを基礎から勉強していきます。
基本的にはドキュメントを読み進めながら動作を確認していこうと思います。

まずはトップページを読んでみよう

Apache Sparkのトップページ

Apache Spark™ - Lightning-Fast Cluster Computing

ここを見れば、そもそもApache Sparkが何なのか概要レベルで解るはずです。

Apache Spark™ is a fast and general engine for large-scale data processing.

Apache Sparkは、大規模なデータ処理のための高速かつ汎用的エンジンです。

特徴①:速い!

まず一つめと特徴としては、処理速度にあります。同じような並列分散処理基盤であるHadoop MapReduce上でプログラムを実行するよりもインメモリであれば最大100倍速い。ディスクでも10倍速いという特徴があります。
Apache Sparkは、高度なDAG実行エンジン(Advanced DAG execution engine)を備えます。

DAGとは何でしょうか?ここは用語が解らないので、Google先生に聞いてみます。
DAG=directed acyclic graphとのことです。日本語で言うと、有向非巡回グラフとなります。
詳細はWikipediaの出番です。

有向非巡回グラフ - Wikipedia

有向非巡回グラフ、有向非循環グラフ、有向無閉路グラフ(ゆうこうひじゅんかいグラフ、英: Directed acyclic graph, DAG)とは、グラフ理論における閉路のない有向グラフの事。有向グラフは頂点と有向辺(方向を示す矢印付きの辺)からなり、辺は頂点同士をつなぐが、ある頂点 v から出発し、辺をたどり、頂点 v に戻ってこないのが有向非巡回グラフである。

うーん。言葉だけだと解り辛いけど、どの頂点から出発しても同じ頂点には戻ってこないとということなのでしょう。これだと抽象的すぎて解り辛いですね。DAGの具体的な例を探してみましたが、英文のWikipediaの説明にSpread SheetもDAGでモデル化できるとのこと。一つのセルを頂点とみなし、あるセルの値とあるセルの値をかけたりといった計算を書けますが、どこかの頂点=セルの中身が変化すれば後続のすべてのセルの計算結果が変化するといった具合です。
なんとなくわかりましたが、このDAGというデータモデルがどのようにSpark内で利用されているのか、今後の勉強課題としておきます。

特徴②:使いやすい!

Java/Scala/Python/Rで記述できます。また、簡単に並列に処理できる80以上のハイレベルな操作が提供されています。また、対話式にこの操作をJava/Scala/Python/Rから使用できます。
具体的な操作は今後の学習ポイントです。特に並列処理は自分で実装すると大変なので、簡単なAPIを利用するだけで並列分散して高速に処理してくれるという意味で使いやすいというのが一番重要な点だと思います。

特徴③:汎用性

とりあえず、いろいろ汎用的に利用できるための機能が付いているようです。個々の機能に関しては今後調べていきたいと思います。

f:id:tmnj:20161130222558p:plain

簡単に言うと、以下のような感じだと思いますが、重要な点はすべてSparkという高速な並列分散基盤上で実行できるという点にあると思います。

特徴④:どこでも実行

SparkはHadoop、Mesos、スタンドアロン、またはクラウド上で動作します。 HDFS、Cassandra、HBase、S3などのさまざまなデータソースにアクセスできます。

f:id:tmnj:20161130223418p:plain


Topページを一通り眺めて、何となくイメージが付きました。
今後深掘りしていきたいと思います。