Apache Sparkの開発者が創立したDatabricksが,先日のDaytona GraySortコンテストで,Sparkプロセッシングエンジンを使って新記録を達成した。Daytona GraySortコンテストは,100テラバイトのデータをソートする速度を計測する,サードパーティによるベンチマークである。Databricksは公式記録として,206台のクラスタ上で4,27テラバイト/分というスループットを公表している。これはHadoop MapReduceを使用するYahoo!が提示したこれまでの記録と比較して,10分の1のマシンで,3倍の性能向上を達成したことになる。
Daytona GraySortコンテストへの提出資料を公開したブログ記事の中で同社は,最近になってSparkに導入され,これほど大きなスループットを達成可能にした技術的改善のいくつかを取り上げている。
Spark 1.1ではソートベース・シャッフル
と呼ばれる,新しいシャッフル実装が導入された。これまでのシャッフル実装では,シャッフルのパーティション毎に インメモリバッファが必要だったため,これが大きなメモリオーバーヘッドを生み出していた。しかし新しいソートベースシャッフル
では,一度に必要なメモリバッファはひとつだけでよい。これによってメモリ使用量が大幅に削減され,同一条件のハードウェア上で,より多くのタスクが並行動作可能になったのだ。
新しいシャッフルアルゴリズムに加えて,ネットワークモジュールがNettyのネイティブEpollソケットトランスポートに改訂された。メモリプール管理を独自に行うことで,JVMのメモリアロケータをバイパスし,ガベージコレクションの影響を低減する。新しいネットワークモジュールは外部のシャッフルサービス構築でも利用され,メインのSpark実行体がガベージコレクションで停止している間でも,シャッフルファイルの提供が可能になった。
最後に,Spark 1.1では,デフォルトのソートアルゴリズムとしてTimSortが導入された。TimSortはマージソートとインサートソートから派生したもので,現実のデータセットの大部分,中でも部分的にソートされたデータセットに対して,クイックソートよりもパフォーマンスに優れている。
これらすべての改善によってSparkクラスタは,Mapフェーズでは3GB/ノードのI/Oアクティビティ,Reduceフェーズでは10Gbpsのイーサネットリンクを飽和させる1.1GB/秒/ノードのネットワークアクティビティを維持することが可能になっている。
SparkはUCバークレーのAMPLabでの研究から生まれた,高度な実行エンジンである。Hadoop MapReduceに比較してプログラムを,データがディスク上にある場合は10倍,メモリ上に存在する場合は100倍の速度で実行することができる。SparkはJava,Scala,またはPythonで記述されたプログラムをサポートする。データ処理フローは,馴染みの深い関数型プログラミングで構築可能だ。
Sparkは,Hadoopの次世代の実行プラットフォームとして,大きな注目を集めるだけでなく,MapReduceを置き換えとして見る声も一部にはある。2月にはApacheのトップレベルプロジェクトに昇格し,それ以降,ClouderaやHortonworks,MapRのHadoopディストリビューションなどに含まれている。さらに最近では,Hortonworksが,Stinger.nextイニシアティブの一環として,Spark上でのHive実行をサポートする予定だと発表している。
Databricksは2013年に,Sparkとその関連プロジェクトをサポートするコマーシャルエンティティとして設立された。関連プロジェクトとしてはストリームプロセッシングをサポートするSpark Streaming,HiveデータをクエリするSpark SQL,機械学習用のMLibなどがある。