Databricks Connect: アプリケーション、マイクロサービスにApache Spark™の機能を


Databricks Connect: Bringing the capabilities of hosted Apache Spark™ to applications and microservices - The Databricks Blogの翻訳です。

この記事では、あらゆるノートブックIDEやカスタムアプリケーションからネイティブのApache Spark APIを利用できる新たなライブラリであるDatabricks Connectをご紹介します。

概要

過去数年にわたって、Apache Spark向けに多くのカスタムアプリケーションコネクターが開発されました。これには、spark-submitやRESTジョブサーバー、ノートブックゲートウェイなどのツールが含まれます。これらには以下のような制限がありました。

  • これらは様々なケースに対応できるものではありませんでした:多くは特定のIDEやノートブック向けのものでした。
  • お使いのアプリケーションをSparkクラスターで実行する必要がありました。
  • Sparkの上に別のプログラミングインタフェースを統合する必要がありました。
  • クラスターを再起動することなしに、ライブラリの依存関係を変更することができませんでした。

これを、単純にライブラリウィインポートしてサーバーにアクセスする、SQLデータベースサービスへの接続方法を比較してみましょう。

Python
import pymysql
conn = pymysql.connect(<connection_conf>)
conn.execute("SELECT date, product FROM sales")

Sparkの構造化データAPIで同様のことを行う場合には、以下のようになります。

Python
from pyspark.sql import SparkSession
spark = SparkSession.builder.config(<connection_conf>).getOrCreate()
spark.table("sales").selectExpr("date", "product").show()

しかし、Databricks Connect以前では、上記のスニペットはシングルノードのSparkクラスターでのみ動作し、複数ノードへの容易なスケーリングや、spark-submitのような追加のツールなしにはクラウドにスケーリングすることができませんでした。

Databricks Connectクライアント

Databricks Connectは普遍的なSparkライブラリを提供することで、このSparkコネクターのストーリーを完結させます。これによって、ノートブックのアプリケーション (例:Jupyter、Zeppelin、CoLab)、IDE(例:Eclipse、PyCharm、Intellij、RStudio)、カスタムのPython / JavaアプリケーションからSparkジョブを実行できます。

このことは、あなたはどこからでも"import pyspark"や"import org.apache.spark"を実行でき、Databricksクラスターに対してシームレスに大規模ジョブを実行できることを意味します。例として、Databricks Connectを用いてCoLabノートブックからSparkジョブをリモートで実行する様子をお見せします。ここでは、アプリケーション固有のインテグレーションが不要であることに注意してください。単にdatabricks-connectライブラリをインストールしてインポートするだけです。また、ここではGCPからS3のデータセットを読み込んでいますが、SparkクラスターがAWSにホストされているので実現可能となっています。

Databricks Connectから起動されたジョブは、分散処理を活用し、Databricks Spark UIでモニタリングできるように、リモートでDatabricksクラスター上で実行されます。

カスタマーユースケース

現時点(2019/6)で数百以上のお客様がアクティブにDatabricks Connectを利用しています。特筆すべきユースケースには以下のようなものがあります。

開発およびCI/CD

  • Databricksクラスターを利用しつつも、ローカルのIDEでコードをデバッグ。
  • 運用環境におけるCI/CDパイプラインにおいて、Sparkアプリケーションをテスト。

インタラクティブな分析

  • 慣れ親しんでいるシェル(Jupyter、bash)やスタジオ環境(RStudio)を使いつつも、Databricksクラスターで処理を行えるように、多くのユーザーがDatabricks Connectを活用。

アプリケーション開発

  • ヘルスケア業界の大手のお客様は、インタラクティブなユーザークエリーを提供するPythonベースのマイクロサービスをデプロイするためにDatabricks Connectを使用。クエリーサービスは、1日あたり数千のクエリーに対応するために、リモートで複数のDatabricksクラスター上でSparkジョブを実行、このためにDatabricks Connectライブラリを使用。

Databricks Connectの動作原理

普遍的なクライアントライブラリを作るためには、以下の要件を満たす必要がありました。

  1. アプリケーション観点では、クライアントライブラリは完全なSparkとして動作(例:SQL、データフレームなどを利用できること)する必要があります。
  2. 物理計画や実行などのヘビーウェイトなオペレーションはクラウド上のサーバーで実行されるべきです。さもないと、クライアントがクラスターに近い場所になく、広域ネットワーク越しにデータを読み込む際に多大なるオーバーヘッドを引き起こすことになります。

これらの要件に適合するために、アプリケーションがSpark APIを利用する際には、Databricks Connectライブラリは、Sparkと全く同じように分析フェーズに至るジョブの計画を実行します(要件1)。ジョブの実行準備が整った際には、Databricks Connectは論理的クエリープランを、実際の物理的処理実行とIOが発生するサーバーに送信します(要件2)。

図1. Databricks ConnectはSparkジョブのライフタイムを、論理的分析までを含むクライアントフェーズ、リモートクラスターにおける処理実行を含むサーバーフェーズに分割します。

Databricks Connectクライアントは、様々なユースケースに対応できるように設計されています。プラットフォームのAPIトークンを通じて分かりやすい認証、承認ができるように、REST経由でサーバーと通信を行います。セキュアかつ同時実行性の高い共有クラスターにおいても、複数ユーザーのセッションは分離されます。高いパフォーマンスを実現するために結果は効率的なバイナリーフォーマットで返却されます。使用されるプロトコルはステートレスなので、対障害性のあるアプリケーションを容易に構築でき、クラスターが再起動されたとしても作業状態を失うことはありません。

利用方法

Databricks ConnectはDBR 5.4のリリースからGAとなっており、Python、Scala、Java、Rをサポートしています。"pip install databricks-connect"を実行することで、すべての言語に対するライブラリをPyPIから取得できます。Databricks Connectのドキュメントにはこちらからアクセスできます。

Databricks 無料トライアル

Databricks 無料トライアル