はじめに
GLB事業部Lakehouse部 陳(チェン)です。 現地でのData + AI SUMMIT2023(DAIS)に参加している儀保の報告をもとに講演「Optimizing Batch and Streaming Aggregations(バッチとストリーミング集約の最適化)」というセッションについてご紹介します。講演では、独立開発者でApache SparkとDatabricksに精通しているJacek Laskowski氏による、Apache Sparkの最新バージョン3.4.1におけるSpark SQLとSpark SQL Streamに関する概要が紹介されました。対象者は、Apache SparkやDatabricksに興味がある技術者や、データ処理やAIに関心があるビジネスパーソン、そしてSparkとDelta Lakeに興味がある方です。
Spark SQL
Spark SQLは、Apache Sparkのモジュールの1つで、RDD APIを使用して記述された分散計算の概念を使用しています。これにより、SQLやPython、Pandasのようなデータフレームを使用してクエリを記述することができます。具体的には以下のような特徴があります。
- SQLやデータフレームを使用したクエリ記述が可能
- データソースAPIによる様々なデータソースへのアクセス
- クエリ最適化による高速な処理
これにより、従来のRDD APIを使用したプログラムよりも簡潔で効率的なデータ処理が可能になります。
Spark SQL Stream
Spark SQL Streamは、ストリーミングクエリの記述を可能にするSpark SQLの拡張機能です。これにより、リアルタイムでのデータ処理が可能になります。以下の3つ特徴があります。
- ストリーミングデータの処理が可能
- ウィンドウ関数やウォーターマークなどのストリーミング処理に特化した機能
- バッチ処理と同じクエリ記述が可能
これらにより、リアルタイムでのデータ分析やアプリケーションの開発が容易になります。
最新機能とサービス
Apache Spark 3.4.1では、さらに最適化されたバッチ処理とストリーミング処理が可能になっています。具体的な機能は以下のようです。
- Adaptive Query Execution (AQE)によるクエリ最適化
- Delta Lakeのサポートによる高速なストリーミング処理
- Structured Streamingの改善によるリアルタイム処理の高速化
これらの機能により、より効率的で高速なデータ処理が実現されています。
クエリ実行のプロセス
Apache Sparkでは、クエリを実行する前に、未解決の論理計画を解決する必要があります。これは、アナライザーを使用して行われます。アナライザーは、論理演算子を最適化し、クエリの実行計画を効率的にするために使用されます。
具体的には、アナライザーは以下のような機能を提供します。
- 未解決の属性やテーブルを解決する
- クエリの最適化を行うためのルールを適用する
- 論理演算子を最適化する
集約処理の種類と最適化
講演では、さまざまな種類の集約が可能であることが紹介されました。具体的には、以下のような集約が可能です。 - 基本的な集約 - 多次元集約 - 法的集約 - ウィンドウ集約
これらの集約処理には、それぞれ最適な物理演算子が存在します。ハッシュ集約execは、ハッシュベースの集約に最適な物理演算子で、Spark SQLで最速の集約オプションです。しかし、メモリが不足すると、ソートベースの集約になることがあります。その場合、実行者に利用可能なメモリを増やすことでパフォーマンスが向上する可能性があるとのことでした。
問題点と対策
Apache Sparkには、メモリ制限やユーザー定義関数の制限など、いくつかの問題点が存在します。これらの問題に対処するために、適切な最適化や代替手段が提案されました。また、問題の根本原因を特定するために、コードを対応するバッチクエリに書き換えることが推奨されました。
まとめ
今回の講演では、Apache Spark 3.4.1におけるSpark SQLとSpark SQL Streamに関する概要が紹介されました。最新の機能やサービスを活用することで、データ分析やアプリケーション開発がより容易になります。また、問題点と対策についても具体的な方法や代替手段が提案されました。これらの知識を活かして、Apache Sparkを使ったデータ処理を効率的に行いましょう!
終わりに
現地でのDAISに参加しているメンバーからの報告をもとに、セッションの内容を解説しました。 DAIS期間中では、セッションに関する記事を以下の特設サイトに順次上げていきますので、見ていただけると幸いです。