Beyond Shuffling - tips & tricks for scaling Apache Spark(Apache Sparkをスケールアップするためのヒントとコツ)
スピーカー:Software Developer, Spark Technology Center, Holden Karau氏
このセッションの資料が こちらのページ からダウンロードできます。
Surve氏と同じく、Spark Technology Centerから来たKarau氏は『初めてのSpark』(オライリー・ジャパン刊)などのSpark関連書籍を執筆している。過去にはAlpine、Databricks、Google、Foursquare、およびAmazonでの検索や分類の仕事に携わってきた。このセッションはApache Sparkのジョブをスケールアップすることをテーマに行われた。
SparkではRDD(Resilient Distributed Dataset:不変で並列実行可能なコレクション)が標準機能として利用できるようになっている。まずは再利用する場合について考える。ここで問題になるのがキー・バリュー・データに関する考慮点である。どのように分散しているか、どのような集計機能を使用する必要があるのかである。
特に、問題になるのがキーの不均衡である。キーは均等に分散していないため、「groupByKey」により大量の処理が発生してしまう。Karau氏は「groupByKeyは悪!」と断言するほど。ほかにも、キー順にソートすることでパーティションサイズの制限やパフォーマンス劣化という問題が生じることがあると、Karau氏は指摘する。
対策として挙げられたのは「Spark SQL」の使用だ。Spark SQLはSpark(RDD)の操作をSQLで行うためのクラス群である。Karau氏によると、データが構造化データまたは半構造化データの場合で、データのサブセットに対してのみ処理を行うケースでSpark SQLを用いると、パフォーマンスが改善することがあるという。
そのほか、Karau氏はSparkの機械学習にコードを自動生成するものを組み込む方法と、そうして生成されたコードの例も示した。
【参考】Sparkのプログラミングガイド(Java、Python、Scalaに関するものも)
パネルディスカッション「アプリ・サービス開発者が学ぶべきデータアーキテクチャはこれだ!」
本イベントの最後に行われたパネルディスカッションでは、Sparkに知見のあるメンバーが集い、現在のSparkについての特徴やこれからのデータ基盤として何を選ぶべきかなどを意見交換した。
モデレーター:谷川 耕一氏(ブレインハーツ株式会社 取締役)
パネラー:大谷 弘喜氏(ワークスアプリケーションズ 開発本部)
小野寺 民也氏(日本IBM東京基礎研究所 サービス型コンピューティング部長)
神林 飛志氏(株式会社ノーチラス・テクノロジーズ 代表取締役社長)
大谷氏が所属するワークスアプリケーションズでは、昨年10月に「HUE」というクラウドベースERPを発表。「コンシューマ技術をエンタープライズに」を掲げ、CassandraやSparkなどを基礎技術として利用している。大谷氏は「ソフトウェアを高速化するにはアプリケーションの作りを変える。アルゴリズムを改善する」と話す。
神林氏のノーチラス・テクノロジーズは業務系の分散処理を行うミドルウェア開発に携わっている。「いまHadoopを業務で用いているなら明日からSparkに」と勧めつつも、Sparkは「過渡期の産物でもあるため、導入はやさしいとはいえない。未導入であれば、まだ静観してもよいのでは」との見解を示した。
日本IBM東京基礎研究所の小野寺氏は、「Sparkのソフトウェアスタックは巨大なヒープや大量のスレッドなどJava仮想マシン(JVM)への新たなチャレンジかのように見えるが、実際はJVM/OSへのチャレンジである」と、Sparkを実装レベルから見ている同氏らしい洞察を示した。
モデレーターの谷川氏が「エンジニアがこれから学ぶべきデータアーキテクチャは?」と各パネラーにたずねると、大谷氏は「やはり突き詰めると好きなものではないか」と回答。小野寺氏はSparkを挙げて「まだ産まれたばかりの新しい技術ではあるが、参入するにはいいタイミング」と述べ、Sparkに挑戦することを促した。神林氏はSparkが主に大規模データ処理を想定していることを指摘しながら、「RDBのオプティマイザが何をしているのか。まずはそうした基本を理解することが大事です」とSparkを利用するに当たっての注意も喚起した。