新春特別企画

2016ー2017のApache Sparkに起こったこと/起こること

この記事を読むのに必要な時間:およそ 3 分

2017年のApache Spark

次に,2017年のApache Sparkの開発がどのように進められるか,現時点でわかっている情報でお伝えします。ここでも「性能向上」に関してはProject Tungstenの後続の取り組み,⁠使いやすさ」に関しては「DataFrame/Dataset」の後続の取り組みに着目します。

Project Tungsten

Project Tungstenの「性能向上」の取り組みはさらに続きます。まずはコストベースオプティマイザ(CBO)の導入です。リレーショナルデータベースなどでは一般的な機能ですが,Sparkの開発においても統計情報収集のフレームワークの導入と合わせて検討されています。

続いて,メニーコア向けの最適化です。特に,Sparkの各プロセスにおいて処理されたデータをプロセス間で交換するシャッフルと呼ばれる処理を行う際,同一計算機内に存在しているプロセス間の通信を効率化することが検討されています。

最後にCodegenです。Codegenによって生成されるコードの品質向上の取り組みが検討されています。DataFrameをインメモリカラムナフォーマットとしてキャッシュできるようになっていますが,それに最適化されたコードを生成する取り組みが進められています。

DataFrame/Dataset

「使いやすさ」向上の取り組みに関しては,昨今のSpark上のライブラリの開発トレンドとして,DataFrame/Datasetベースのライブラリが増えてきたことが挙げられます。機械学習ライブラリであるMLlibでいち早くDataFrameに対応した開発が行われており,spark.mlと呼ばれるパッケージに集約されています。これはバージョン1.6以前から行われてきた取り組みです。

バージョン2.0からはStructured Streamingと呼ばれる,DataFrame/Datasetベースのストリーム処理エンジンが試験的に導入されました。現段階ではアルファリリースという位置付けですが,Spark Streamingの延長ではない,Sparkにおける新しいストリーム処理エンジンです。

Spark Streamingでは,従来はRDDをストリーム処理向けにラップしたDStreamと呼ばれるデータ構造を用いていました。しかしながら,RDDベースのバッチ処理との相互運用や切り替えは必ずしも楽ではない点が指摘されていました。Structured Streamingの取り組みにより,ストリーム処理でDataFrameを用いることができるようになりました。これにより以下の3点の効果が期待できます。

  • バッチ処理との相互運用や切り替えの容易化
  • DataFrameベースの処理となることでオプティマイザによる最適化の恩恵を受けられる
  • イベントタイムウィンドウ集約処理をサポート,イベントの生起時間を考慮したウィンドウ集約が可能に

とくに3点目は,データの遅延などにより,必ずしもデータの到着順序とデータに意味付けされたイベントの発生順序が一致しないことがあり,ストリーム処理においてよく取り上げられる課題です。この点を解消する取り組みが進められており,バージョン 2.1から導入され始めました

NTTデータでもSparkで時系列データを扱う事例がありますが,この機能向上は利用者にとってはありがたいものです。

Structured Streamingはバージョン 2.0で導入されていましたが,まだアルファリリース扱いでした。2017年前半の中心的なバージョンになると考えられるバージョン2.1でも,まだアルファリリースのままだと記載されています

バージョン2.1ではStructured StreamingがKafka 0.10以降のバージョンと連携させた動作をできるようになりましたが,この他にもStructured Streamingの開発は順次進んで行くものと思われます。

その他の2017年の予測ですが,ハードウェアの進化にさらに追従する取り組みとして,従来より検討が進められてきたGPU対応もいよいよ本格化するかもしれません。また,DataFrameの利用を基点としてさらに機能の広がりをみせるかもしれません。

たとえば,Sparkの開発で中心となっている米DatabricksがSparkとは別のリポジトリで,米Googleがオープンソース化した機械学習ライブラリをDataFrame上で動作させるようにしたTensorFramesや, DataFrame上に構築されたグラフ処理ライブラリGraphFramesを開発しています。これらのような,Spark本体に導入されないまでも,Sparkの機能を利用する形で利用用途を独自に拡張するものがこれから増えてくる可能性があります。

Sparkは毎年目覚ましい進歩を遂げるため,軽くウォッチしているだけではキャッチアップがやや大変かもしれませんが,年を追うごとに利用者目線で便利になっていることはまず間違いありません。実際に筆者も「このアプリの書き方だけで分散処理してくれるのすごいよね」という利用者の声を耳にしたことがあります。NTTデータも2015年より「Spark構築・運用ソリューション」を開始し,皆様のSpark導入・運用のご支援をさせていただいております。これまでSparkの様子を伺うだけだった方も,必要に応じてこのようなサービスを利用することも念頭に置きつつ,2017年という年初をきっかけとしてSparkを始めてみてはいかがでしょうか。

著者プロフィール

岩崎正剛(いわさきまさたけ)

株式会社NTTデータ システム技術本部 課長代理

PostgreSQL の機能拡張ツールおよび運用管理ツール Hinemos の開発経験を経て,Hadoop をはじめとする分散処理を安心して使えるようにするための取り組みを進める。2014年に Apache HTrace コミッタ,2015 年に Apache Hadoop コミッタに就任。共著に『Hadoop徹底入門』(第2版)。


鯵坂明(あじさかあきら)

株式会社NTTデータ システム技術本部 主任

入社以来Apache Hadoopを利用したシステムの導入支援および技術サポートに従事。2013年から本格的にApache Hadoopコミュニティでの開発に参加し,2014年にHadoopのコミッタに就任。2015年にHadoopのPMC(Project Management Committee)に就任。


下垣徹(しもがきとおる)

株式会社NTTデータ システム技術本部 課長

PostgreSQL 本体および周辺ツールの開発経験を経て,現在オープンソースの並列分散処理ミドルウェアを主に担当するチームを束ねる。Hadoop や Spark のお客様への導入推進を担当。共著に『Hadoop徹底入門』(第1版/第2版),『Apache Spark入門』。


関堅吾(せきけんご)

株式会社NTTデータ システム技術本部 課長代理

2010年にHadoopに触れて以降,広告・通信・建設・製造など,多数の業種でのHadoop関連システムの構築・運用に携わる。2015年に Apache Yetus コミッタ,2016年に Apache Bigtopコミッタに就任。

コメント

コメントの記入