Sparkの仕組み・導入メリット・インストール方法など

【目次】
・Sparkについて
・Sparkの歴史
・Sparkの仕組み
・データ分析におけるSpark導入のメリット
・Sparkの導入方法
・参考文献

Sparkについて

OSS(Open Source Software)のインメモリ処理の分散並列基盤
※インメモリ(メインメモリ上で処理するため、ディスクストレージを介するよりも高速かつ安定しているらしい。メモリに乗り切らないようなケースでも、ディスクを利用するなどしてアプリケーションが問題なく動作するように作られている。)
ビッグデータ活用を支えるプラットフォームとして注目されている。
比較の際はHadoopで言う所の、MapReduceが引き合いに出されます。MapReduceがバッチ処理に特化した仕組みになっているのに対して、Sparkはバッチ処理だけでなく、対話的な処理や繰り返し処理・ストリーミング処理といった多様なデータ処理のパターンに対応できる仕組みになっていることから、Sparkに注目が集まっています。

分散処理エンジンとして、Apache Spark Coreがあり、以下の様な機能が用意されているようです。

Spark SQL・・・SQL処理用
Spark Streaming・・・ストリーミング処理
MLib・・・機械学習処理用
 基本API
 ・統計情報の取得
 ・相関関係の算出
 ・層化抽出
 ・仮説検定
 ・ランダムデータ生成
 機械学習アルゴリズム
 ・分類回帰(SVM、ロジット、線形回帰、ナイーブベイズ、決定木、ランダムフォレスト、isotonic回帰)
 ・協調フィルタリング(ALS(Alternating Least Squares))
 ・クラスタリング(K平均法、混合ガウシアン、PIC、LDA、ストリーミングK平均法)
 ・次元削減(SVD、PCA)
 ・特徴抽出&変換(TF-IDF、Word2Vec、etc…)
 ・頻出パターンマイニング(FP-Groth、アソシエーションルール、PrefixSpan)
GraphX・・・グラフの処理
※機械学習の機能があるのは嬉しいですね。スクラッチで作るのはペインフルなので。

データソースとしては、HDFS(Hadoop Distributed File System)だけでなく、Hive、HBase、PodgreSQL、MySQL、CSVファイルなども対応している。

Sparkの歴史

2009年にUC BarkeleyのMatei Zaharia氏がScalaを用いて開発

Google Trendで検索トレンドを見たところ、2014年頃から今に至るまで伸び続けています。
GoogleTrend

Sparkの仕組み

RDD(Resilient Distributed Dataset)
不変で並列実行可能な分割されたコレクションのことを指します。
これによりユーザーが並列分散処理を意識しなくとも、それができる環境が提供されます。
こちらのRDDを
map,filter,union,flatMapなどのTransformations
で生み出し、RDDのデータを
reduce,countなどのActions
を実行することで動かします。
RDDを任意の時点でメモリやディスクに保存することもできるため、処理の再実行のみならず、同じデータを複数回利用するなど、複雑なデータ処理に関しても効率的に実行できます。
SparkはScalaという言語で書かれていますが、Python・Java・Rなどに対してAPIが提供されているので、幅広いユーザーが扱うことが可能です。しかしながら、痒いところに手を届かせるためには、Scalaの勉強は避けられないのかもしれません。実際のところ、大体のデータマイニング系エンジニアの知り合いはScalaの勉強などをしていた印象があります。

データ分析におけるSpark導入のメリット

・並列分散の手法を意識せずに大規模データの処理が可能になる。
・Rなどの苦手とする反復処理を高速化させることができる。
・データ取得、前処理、分析処理、レポーティングを一つのプラットフォームで実行できる。
・コマンドラインによるインタラクティブな試行錯誤がしやすいので、データ分析のタスクに向いている。(PythonやRのように)

※レコメンドエンジンとしてSparkを用いるケースも観察されているようです。
 Yahoo!台湾

Sparkの導入方法

ここでの導入はあくまでもプログラミングを学ぶためであって、ローカル環境での実行環境の構築ではSparkのメリットを感じることはできません。
※SparkはJava仮想マシン上で動作するため、事前にOracle JDKをインストールしておきましょう。
Java SE Development Kit 8 Downloads

■Windowsの場合
Apache Sparkで始めるお手軽リアルタイムウインドウ集計
こちらで手順が詳しく書かれています。

■Macの場合
Macの方が導入はシンプルです。
Download Spark
からダウンロードします。(SparkRはSparkのver1.4以降からサポートされているそうです。)
HOW TO INSTALL APACHE SPARK ON MAC OS X YOSEMITE
Apache Spark 1.6.0 setup on Mac OS X Yosemite
そこで、

build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package

を実行すればコンパイルできるようです。(10分ほどかかる。私は30分もかかったが。。)

そのあと、パスを通します。
PATH=/usr/local/share/spark/bin:$PATH; export PATH

それから、pythonでsparkを動かしてみます。
pyspark

を実行して、試しにReadmeのテキスト行数をカウントさせるコマンドを入力します。これは、textFileメソッドを用いて、Readmeファイルを読み込み、linesという名前のRDDを生成していることを意味します。
lines = sc.textFile(“/usr/local/share/spark/README.md”)

そして、このコマンドで値が返されたら、うまく動いていることが確認できるでしょう。
print lines.count()

加えて、ワードカウントを行うコマンドを入力します。(スペース区切りで分解し、mapメソッドで(単語, 1)という組み合わせに変換したあと、最終的にreduceByKeyで同一の単語を足し上げるという処理をしています。)

counts = lines.flatMap(lambda line: line.split(” “)) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)

そして、これで結果を取得します。
counts.collect()

スクリーンショット 2016-05-02 12.21.50

参考文献

Spark を活用する:ビッグデータアプリケーション用の高速インメモリコンピューティング

Apache Spark入門 動かして学ぶ最新並列分散処理フレームワーク (NEXT ONE)

詳解 Apache Spark

[Apache Spark]RDDについて簡単にまとめてみた

Rユーザのためのspark入門

Spark 1.4.0 の SparkR を動かす

Spark Examples