Spark-Shellベンチマーク

Sparkを高性能インタラクティブアドホック調査ツールにする話.
Apache Sparkを高性能並列処理シェルとして使う - なぜか数学者にはワイン好きが多い

前回の記事では,collect()を使っていますが,単にカウントするのにcollect().sizeは辞めて下さい.
死にました.

14/09/08 15:26:32 WARN storage.BlockManagerMasterActor: Removing BlockManager BlockManagerId(1, datanode01, 39504, 0) with no recent heart beats: 46296ms exceeds 45000ms
14/09/08 15:26:32 WARN storage.BlockManagerMasterActor: Removing BlockManager BlockManagerId(2, datanode02, 55477, 0) with no recent heart beats: 119686ms exceeds 45000m
s
14/09/08 15:26:32 INFO network.ConnectionManager: Key not valid ? sun.nio.ch.SelectionKeyImpl@78a8c612
14/09/08 15:26:32 INFO network.ConnectionManager: key already cancelled ? sun.nio.ch.SelectionKeyImpl@78a8c612
java.nio.channels.CancelledKeyException
at org.apache.spark.network.ConnectionManager.run(ConnectionManager.scala:286)
at org.apache.spark.network.ConnectionManager$$anon$4.run(ConnectionManager.scala:115)


14/09/08 15:26:47 ERROR util.Utils: Uncaught exception in thread Result resolver thread-2
java.lang.OutOfMemoryError: GC overhead limit exceeded

14/09/08 15:27:05 ERROR util.Utils: Uncaught exception in thread Result resolver thread-5
java.lang.OutOfMemoryError: Java heap space
Exception in thread "Result resolver thread-5" java.lang.OutOfMemoryError: Java heap space

RDDに対するcollectは,単にJavaの配列を生成するので,ちょっと多めのデータを処理しようとすると瞬間に死にます.
Sparkは速いだけあって,ホントに瞬間的に死にます.
Apache Spark: 凄まじい性能はミスると一瞬で身を滅ぼす(手が滑った話) - なぜか数学者にはワイン好きが多い

さて.
それでも,普通のシェルとSparkシェルで,まずは行カウントと,grepを通した行カウントを比べてみました.
ファイルはHDFSにある想定です.
なので,シェルの行カウントは次のような感じになってしまいます.

$ hdfs dfs -cat webtoon.copy/httpd.log.2014082201|wc -l

これをSparkシェルでやろうと思うと,こんな感じです.

scala> val file = sc.textFile("webtoon.copy/httpd.log.2014082201")
scala> file.count()

14/09/08 17:41:05 INFO spark.SparkContext: Job finished: count at <console>:15, took 6.745443605 s
res0: Long = 2742670

ファイルの行数を数えるwc -lと,grepで一定の文字列を含む行を抽出したあとの行数を数えるgrep|wc -l相当のコマンドを,シェルとSparkシェルで実行してみました.



ファイルの数を2倍ごとにしていったので,縦軸の処理時間も対数軸にしてあります.
負荷が溜まるような類じゃないので,処理時間はだいたい線形に増えていっています.
この程度ではHDFS+BashよりもHDFS+Sparkが圧勝ですが,このあと,処理を複雑にするとどうなるか楽しみです.