ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

Apache Spark自習

2014-09-03 16:56:56 | PG(分散処理)

世間では8月で夏休みが終わったようだが、こちとら9月に入ってからが夏休みだぜヒャッハー!(夏とは思えないくらい涼しいけど^^; ヒヤッ)
という訳で夏休み中にやりたい事はいっぱいあったんだけど、Apache Sparkの自習に落ち着いた。

元々Sparkは2011年(Spark0.3の頃)にちょっとだけ試したことがある。
Hadoopを知ったのが2010年で、Scalaの勉強を始めたのがそのちょっと後。そんな中でScalaの分散処理基盤としてSparkが出てきたので、興味を持ったというところ。
ところが最近になってSparkが盛り上がってきた感じなので、改めて調べてみたくなったのだった。

Sparkはインメモリーで処理する(詳しい人からすると違和感がある表現らしいが^^;)という感じで盛んに喧伝されているけれども、自分は頭が悪いので、実際にコーディングしてみないと雰囲気が分からない。
という訳で、とにかく一通りコーディングしてみた。

試す上では、Sparkシェルが便利。ScalaのREPL同様、対話的に実行できる。
特にRDDのメソッドに対し、どのメソッドを呼び出したら実際の処理が始まるのかがはっきり分かる(笑)

RDDのメソッドは通常のScalaのコレクションのメソッドと似ているのだが、結合用のメソッドが充実している点は大きく違う。 

Spark SQLも少し試してみた。
Sparkは通常のScalaのコレクションのメソッドチェーンと同様のコーディングが出来るのが特徴だと思っていたので、SQLで記述するという事には懐疑的なのだが、通常のRDDとは違う最適化を行ってくれるらしいので、良いのかもしれない。 
統合言語クエリー(.NETのLINQがそういう日本語訳のようなので、そのまま使った^^;)はまさにDSLっぽくて、文字列でSQLを書くよりは良さそう。(文字列内のSQLは何が間違っていても一切コンパイルエラーになってくれないし、パースは実行時なので)

あと、HiveのテーブルもSpark SQLの機能でアクセスできる

もうひとつ、いわゆるリアルタイムっぽい処理にもあまり興味は無いんだけど、一応Spark Streamingも試してみた。
どういうコーディング方法なのかが一番疑問だったんだけど、ファイルに出力する部分まで含めて最初に定義(宣言)して、後は定期的に実行されるということが分かった。

最後に、SparkとHadoopの違いをまとめてみた。
聞きかじり+思い込みで書いたものなので、間違っている可能性も非常に大きい。(用語もテキトーだし(汗))
詳しい人に教えていただきたいところだ^^;
ついで言うと、マスターURLのYARNの部分も不安。英語はほんと苦手だorz


コーディングしてみて思ったのが、やはりScalaのメソッドチェーンぽいので、Scalaをやってた人からすると自然な感じ^^
(Hadoopで素のMapReduceを書く人はもういないと思うが、そういうコーディングよりも遥かに簡単。ちなみにSpark SQLの統合言語クエリーによるコーディングは雰囲気的にCascadingに似ているかもしれない)
(とは言え、まだ普通の人がScalaのコーディングをするとも思えないし。SQLやPythonで書くのかー? Sparkに期待している人達って、どうするつもりでいるんだろう?) 

でもメソッドに渡す関数が大きく(数十行とかに)なってしまったら、逆にメソッドチェーンにするのは見通しが悪くなりそうな気もする。
これはSparkに限らず、Scalaで大規模なコーディングってどうやるんだろう?という、かねてからの疑問でもあるんだけど。
Java8のStreamを使ってコーディングする際の、ラムダ式にどれくらい処理を書くか?という問題も今後出てくると思うけど、それも同じ) 

そういう意味では、Asakusa Frameworkが必ずOperatorクラスに処理を書かせて、処理の粒度を保ったり単体テストを書き易くしたりしているのは、Sparkでコーディングする際にも参考になるかもしれない。



最新の画像もっと見る

コメントを投稿