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

[Databricks Connect: Bringing the capabilities of hosted Apache Spark™ to applications and microservices \- The Databricks Blog](https://databricks.com/blog/2019/06/14/databricks-connect-bringing-the-capabilities-of-hosted-apache-spark-to-applications-and-microservices.html)の翻訳です。

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

# 概要

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

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

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

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

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

```py: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](https://databricks.com/jp/glossary/what-is-pycharm)、Intellij、RStudio)、カスタムのPython / JavaアプリケーションからSparkジョブを実行できます。

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

Databricks Connectから起動されたジョブは、分散処理を活用し、Databricks Spark UIでモニタリングできるように、リモートでDatabricksクラスター上で実行されます。
![](https://databricks.com/wp-content/uploads/2019/06/DBCImage2.jpg)

# カスタマーユースケース

現時点(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、データフレームなどを利用できること)する必要があります。
1. 物理計画や実行などのヘビーウェイトなオペレーションはクラウド上のサーバーで実行されるべきです。さもないと、クライアントがクラスターに近い場所になく、広域ネットワーク越しにデータを読み込む際に多大なるオーバーヘッドを引き起こすことになります。

これらの要件に適合するために、アプリケーションが[Spark API](https://databricks.com/jp/glossary/spark-api)を利用する際には、Databricks Connectライブラリは、Sparkと全く同じように[分析フェーズ](https://databricks.com/blog/2015/04/13/deep-dive-into-spark-sqls-catalyst-optimizer.html)に至るジョブの計画を実行します(要件1)。ジョブの実行準備が整った際には、Databricks Connectは論理的クエリープランを、実際の物理的処理実行とIOが発生するサーバーに送信します(要件2)。
![](https://databricks.com/wp-content/uploads/2019/06/DBCImage3.jpg)
*図1. Databricks ConnectはSparkジョブのライフタイムを、論理的分析までを含むクライアントフェーズ、リモートクラスターにおける処理実行を含むサーバーフェーズに分割します。*

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

# 利用方法

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

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)