新春特別企画

Apache Kafkaにも注目 ―Hadoop, Spark,分散処理フレームワークをめぐる2019年

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

Spark

2018年はSpark 2.3と2.4のフィーチャーアップデートバージョンがリリースされました。これまでと比べて目玉となるアップデートが多かったように思います。

猿田浩輔氏

猿田浩輔氏

Kubernates対応とPython対応の強化

昨今Kubernetesの活用が活発になってきており,SparkもKubernetesへの対応が始まりました。2.3ではまだ機能不足感が否めませんでしたが,2.4ではPySparkが動作するようになったほか,クライアントモードをサポートしたことでSpark Shellからの利用が可能になるなど,少しずつプロダクションレディーに近づいています[SPARK-18278]SPIP: Support native submission of spark jobs to a kubernetes cluster[SPARK-23984]PySpark Bindings for K8S,[SPARK-23146]Support client mode for Kubernetes cluster backend⁠。

クラウドでのSparkの活用も活発になってきましたが,Kubernetesがサポートされたことによってこの流れがさらに加速するかもしれません。多くのユーザに使われることによって,Kubernetes対応の完成度も劇的に向上していくのではないかと思われます。

PythonユーザにとってはPandas UDF(SPARK-21190)は嬉しい機能のひとつだと思います。

これまでSpark SQLをPythonから利用する場合,Pythonで書かれたUDFの呼び出しがパフォーマンスのボトルネックになるケースが散見されました。これはJVMとPythonインタプリタ間の通信に伴うシリアライズ/デシリアライズが非効率だったことや,Pythonインタプリタ側でのデータ処理効率が良くなかったことが原因です。Spark 2.3からPandas UDFと呼ばれる機能が導入され,Pandasと連携することで複数のレコードを同時に処理するUDFが記述できるようになりました。また,これに伴ってJVMとPythonインタプリタ間のシリアライズ/デシリアライズ効率を,Apache Arrowを利用して改善しています。

Structured Streamingの改善

2017年にアルファ版を卒業したStructured Streamingも依然として開発が活発です。とくにContinuous Processingと呼ばれる,新たな実行モードが導入されたことが大きなトピックです。従来はMicrobatch Processingと呼ばれる,マイクロバッチによるストリーム処理の実行方式のみをサポートしていました。

Microbatch Processingでは,マイクロバッチごとにExecutor(スレーブノード上で実際のデータ処理を行うプロセス)にタスクを配布します。マイクロバッチに同期してオフセットログ(データソースから次に読み出す位置が記録されたログ)が書き出される実装になっているため,どうしてもエンドツーエンド(データの受信から処理結果を対向側に受け渡すまで)で秒オーダーの時間がかかってしまいます。

Continuous ProcessingではロングランニングタスクをExecutor上に常駐させることで都度のタスクの配布を回避するほか,各タスクが読み込んだオフセットを非同期的にドライバ(分散処理全体のスケジューリングなどを行うプロセス)にレポートすることで,オフセットログの書き込み性能の向上も図っており,エンドツーエンドでミリ秒オーダーでの処理を実現可能にします。

AIを指向したProject Hydrogen,利便性向上が続くSpark SQL

また昨今なにかと「AI」というキーワードが出てくることが多いですが,SparkでもAIを指向したProject Hydrogenと呼ばれるサブプロジェクトが始まりました。Sparkでは従来からMLlibやSpark MLなど機械学習のためのコンポーネントが備わっています。これらは各種学習/最適化アルゴリズムなどをSpark上で実行するためのものだったのに対し,Hydrogenの取り組みはどちらかというと,機械学習やディープラーニングなどを支えるインフラのエンハンスメントという色合いが強いように思います。

Project Hydrogenでは大きく3つの取り組みが計画されています。

Barrier Execution ModeSPARK-24374
分散ディープラーニングなどに求められる,タスク間の通信や同期を支援する機能
Optimized Data ExchangeSPARK-24579
Sparkとさまざまなディープラーニングフレームワークとの間で効率的にデータ交換を行うためのデータフォーマットの策定など
Accelerator Aware SchedulingSPARK-24615
GPUやFPGAなど,利用可能なアクセラレータの種類や数などを考慮したタスクスケジューリングを行う機能

Spark 2.4の時点ではBarrier Execution Modeの基本的な部分が実装されました。

このほかSpark SQLではハイオーダーファンクション(配列やマップなどのデータ構造を対象とした関数)をはじめとしたビルトイン関数の実装も充実してきたりSPARK-23899⁠,イメージデータの入出力を簡素に行えるAPIが整備されたりとSPARK-21866SPARK-22666⁠,従来からの機能も着実に利便性の良いものに進化し続けています。

2019年のSpark

2019年はSpark 3.0がリリースされる見込みです。2016年にリリースされたSpark 2.0から,実に約3年ぶりのメジャーバージョンアップとなります。3.0になにを盛り込むかは現在ディスカッションされていますが,ユーザに特に影響の大きいところでは,依存しているライブラリやミドルウェアのバージョンアップがあげられます。

主要なものは以下の通りです。

  • Java 11対応
  • Scala 2.12対応
  • Hadoop 3系対応
  • Hive 3系対応

Scala 2.12への対応は以前から要望が多く,Spark 2.4ではScala 2.12向けにビルドされたバイナリが実験的に配布されていますが,Spark 3.0からは標準でSpark 2.12に対応する見込みです。Hadoop 3系対応に関しては,実はSpark 2.4の時点でpom.xmlにHadoop 3.1向けのプロファイルが定義されています。しかしSpark 2.4まででサポートしているHiveのバージョンと,Hadoop 3系との間で一部APIの互換性がないため,Hadoop 3.1に対応させつつHiveの機能を利用可能なようにビルドすることはできません。そのため現在はHadoop 3.1向けにビルドされたSparkのバイナリは配布されていません。Spark 3.0ではサポートするHiveのバージョンアップを行うことで,Hadoop 3系にも対応していくはずです。

また現在は実験的導入の扱いとなっているKubernetesサポートについても,2019年のどこかのタイミングではプロダクションレディーが宣言されるでしょう。

このほかProject Hydrogenは引き続き進められる予定です。Spark 2.4ではBarrier Execution Modeの基本的な部分が実装されましたが,残りの2つについても取り組みが進められるはずです。現時点でまだデザインドキュメントが公開されているだけですが,徐々に実装が出てくるでしょう。

著者プロフィール

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

株式会社 NTTデータ

Hadoopをはじめとするオープンソースソフトウェアの技術的ななんやかやに従事。NO RICE, NO LIFE. 麺類も好きです。


猿田浩輔(さるたこうすけ)

株式会社 NTTデータ

2009年からHadoopをはじめとしたOSSの並列分散処理基盤の導入支援や技術開発などを行い,2014年からはHadoopを補完するプロダクトの候補としてSparkに取り組みはじめる。技術調査や案件支援などを経て明らかになったSparkの課題に取り組み,コミュニティへのフィードバックを続けてきた。2015年6月に日本人最初のApache Sparkコミッタに就任。


佐々木徹(ささきとおる)

株式会社 NTTデータ

これまでに大規模クラスタでのApche Sparkの性能検証などに関わった。OSSコミュニティでの開発活動も行っており,これまでにApache Hadoop,Apache Spark,Apache Kafkaに貢献してきた。


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

株式会社 NTTデータ

PostgreSQLを中心としたオープンソースのDBMSに取り組む。本体拡張機能の開発を経て,Oracle DatabaseからPostgreSQLへの移行案件に従事し,ミッションクリティカルな商用システムへの適用を実現してきた。近年,大規模なデータを処理するニーズに応えるかたちでHadoopに取り組み始め,DBMSとHadoopの両者の特徴を活かした効果的な組み合わせの実現に注力する。共著に『Hadoop徹底入 門』(第1版,第2版),『Apache Spark入門』『Apache Kafka分散メッセージングシステムの構築と活用』。