Databricks のリモート開発

Important

リモート開発は ベータ版です

Databricks リモート開発を使用すると、ワークスペースにアクセスし、SSH トンネルを使用して IDE から Databricks コンピューティング上のワークロードを対話形式で実行できます。 セットアップが簡単で、環境管理の必要がなくなり、Databricks ワークスペース内のすべてのコードとデータがセキュリティで保護されます。

Requirements

リモート開発を使用するには、次が必要です。

  • ローカル コンピューターに Databricks CLI バージョン 0.269 以降をインストールし、認証を構成している。 「 インストール」を参照してください。
  • Databricks Runtime 17.0 以降を実行する専用 (シングル ユーザー) クラスター。 専用コンピューティングの概要を参照してください。 さらに、
    • Unity カタログを有効にする必要があります。
    • コンピューティング ポリシーが存在する場合は、ジョブの実行を禁止してはなりません。

SSH 接続を設定する

まず、 databricks ssh setup コマンドを使用して SSH トンネルを設定します。 <connection-name>を接続の名前 (たとえば、my-connection) に置き換えます。

databricks ssh setup --name <connection-name>

CLI によって、クラスターを選択するように求められます。 --cluster <cluster-id>で直接指定することもできます。

databricks ssh setup --name <connection-name> --cluster <cluster-id>

IntelliJ ユーザーの場合、Databricks では、接続する前にセットアップ コマンドに --auto-start-cluster=false を追加し、クラスターを手動で起動することをお勧めします。 これは、JetBrains IDE が起動時にすべての構成済みクラスターを開始するためです。これにより、予期しないコンピューティング料金が発生する可能性があります。

Databricks に接続する

次に、IDE またはターミナルを使用して Databricks に接続します。

Visual Studio Code または Cursor を使用して接続する

  1. Visual Studio Code の場合は、 リモート SSH 拡張機能をインストールします。 カーソルには、既定でリモート SSH 拡張機能が含まれています。

  2. IDE のメイン メニューで、[表示]>[コマンド パレット]をクリックします。 [Remote-SSH: Settings]\(リモート SSH: 設定\) を選択します。 または、[ Preferences: Open User Settings (JSON)] を選択して、 settings.json を直接変更します。

  3. Remote.SSH: 既定の拡張機能 (またはremote.SSH.defaultExtensionssettings.json) で、ms-Python.Pythonms-toolsai.jupyterを追加します。

    settings.jsonを変更する場合:

    "remote.SSH.defaultExtensions": [
        "ms-Python.Python",
        "ms-toolsai.jupyter"
    ]
    

    必要に応じて、Remote.SSH: Connect Timeout (または remote.SSH.connectTimeoutsettings.json) の値を大きくして、タイムアウト エラーの可能性をさらに減らします。 既定のタイムアウトは 360 です。

  4. コマンド パレットで、[ Remote-SSH: Connect to Host]\(リモート SSH: ホストに接続\) を選択します。

  5. ドロップダウンから、最初の手順で設定した接続を選択します。 IDE は新しいウィンドウで接続を続行します。

IntelliJ IDE を使用して接続する

  1. リモート サーバーのチュートリアルに従ってセットアップします。
  2. 新しい接続画面で、次のように入力します。
    • ユーザー名: root
    • ホスト: <connection-name>

ターミナルを使用して接続する

ssh <connection-name>

プロジェクトを開く

接続後、コマンド パレットから [フォルダーを開く] を使用し、 /Workspace/Users/<your-username>に移動します。

/Workspace/Volumes、および/dbfs内のファイルは、クラスターの再起動後も保持されます。 /home/root、およびその他のローカル パス内のファイルは一時的であり、再起動時に失われます。

コードを実行 (Visual Studio Code または Cursor)

リモート開発を使用してコードを実行するには、Databricks 仮想環境が設定されていることを確認する必要があります。 この環境には、すべての組み込みの DBR ライブラリと コンピューティング スコープ ライブラリが含まれています

  1. IDE 内のターミナルから echo $DATABRICKS_VIRTUAL_ENV を実行します。

    出力例: /local_disk0/.ephemeral_nfs/envs/pythonEnv-xxx/bin/python

  2. コマンド パレットを開き、[Python: Select Interpreter を選択します。 上記の出力を貼り付けます。

  3. 新しいターミナルを開き、仮想環境が自動的にアクティブ化されます。

  4. Jupyter Notebook を実行するには、仮想環境がカーネルとして選択されていることを確認します。 ノートブックの右上にある [ カーネルの選択 ] をクリックします。

Python ファイルと .ipynb ノートブックは、標準の Python および Jupyter 拡張機能を使用して実行およびデバッグできます。

Python の依存関係を管理する

Python依存関係は、クラスター レベルでグローバルに管理することも、ノートブックを使用して個々のプロジェクトにスコープを設定することもできます。

[コンピューティング > ライブラリ] のワークスペース UI を使用して依存関係をインストールします。 これらはクラスターの再起動間で保持され、 pythonEnv-xxxで使用できます。 クラスター ライブラリを参照してください。

プロジェクト固有のノートブックのセットアップ

プロジェクト スコープの依存関係の場合は、各セッションの開始時に %pip install コマンドを含むノートブックを実行します。

# Install from pyproject.toml
%pip install .

# Install from a requirements file
%pip install -r requirements.txt

# Install a wheel from Volumes or Workspace
%pip install /Volumes/catalog/schema/volume/your_library.whl

%pip コマンドには、Databricks 固有のガードレールが含まれており、依存関係が Spark Executor ノードに伝達されます。 これにより、カスタム依存関係を持つユーザー定義関数 (UDF) が有効になります。

その他の例については、「%pip コマンドを使用したライブラリの管理」を参照してください。

セッションが 10 分以内に再接続した場合、ノートブックを再実行する必要はありません。 これは、SSH 構成で -shutdown-delay を使用して構成できます。

同じクラスター上の複数の SSH セッションは、1 つの仮想環境を共有します。

制限事項

Databricks リモート開発には、次の制限があります。

  • 複数のユーザーとサーバーレスを持つ共有クラスターはまだサポートされていません。
  • Visual Studio Codeおよびリモート開発用の Databricks 拡張機能はまだ互換性がありません。また、一緒に使用しないでください。
  • /Workspace/Volumes/dbfsの外部で編集されたファイルは、クラスターの再起動時に失われます。
  • クラスターごとに最大 10 個の SSH 接続が許可されます。
  • 非アクティブなセッションは、1 時間後に削除される場合があります。

Databricks Notebook の違い

リモート開発を使用する場合、ノートブックにはいくつかの違いがあります。

  • Python ファイルでは、Databricks グローバル ( sparkdbutilsなど) は定義されません。 from databricks.sdk.runtime import sparkを使用して明示的にインポートする必要があります。
  • ipynb ノートブックの場合、次の機能を使用できます。
    • Databricks グローバル: displaydisplayHTMLdbutilstablesqludfgetArgumentscsqlContextspark
    • %sql SQL セルを実行するマジック コマンド

Python ソースコード「notebooks」を使用するには:

  • jupyter.interactiveWindow.cellMarker.codeRegexを検索して、それに設定します。

    ^# COMMAND ----------|^# Databricks notebook source|^(#\\s*%%|#\\s*\\<codecell\\>|#\\s*In\\[\\d*?\\]|#\\s*In\\[ \\])
    
  • jupyter.interactiveWindow.cellMarker.defaultを検索して、それに設定します。

    # COMMAND ----------
    

トラブルシューティング

このセクションには、一般的な問題の解決に関する情報が含まれています。

SSH 接続が失敗するかタイムアウトする

  • ワークスペース UI でクラスターが実行されていることを確認します。
  • 送信ポート 22 が開き、ラップトップ、ネットワーク、VPN で許可されていることを確認します。
  • SSH タイムアウトを増やします。 Visual Studio Code またはカーソルを使用した接続を参照してください。
  • キーの不一致エラーの場合は、 ~/.databricks/ssh-tunnel-keys を削除し、 databricks ssh setupを再実行します。
  • "リモート ホスト ID が変更されました" エラーについては、 ~/.ssh/known_hosts ファイルを確認し、クラスターに関連するエントリを削除します。
  • SSH セッションは 1 時間後に削除される可能性があり、1 つのクラスターに対して 10 を超える SSH 接続を作成することはできません。 制限事項を参照してください。

CLI 認証エラー

  • databricks auth loginを使用して、Databricks CLI プロファイルが有効であることを確認します。
  • クラスターに対する CAN MANAGE アクセス許可があることを確認します。

コードが機能しない

  • Databricks の仮想環境が設定されていることを確認してください。Run コード (Visual Studio Code または Cursor) を参照してください。
  • IPYNB ノートブックと *.py Databricks ノートブックは Databricks グローバルにアクセスできますが、Python *.py ファイルにはアクセスできません。 Databricks Notebook の違いを参照してください。

クラスターの再起動後にファイルが消えたり、環境がリセットされたりする

  • /Workspace/Volumes、および/dbfsマウント内のファイルは、クラスターの再起動後も保持されます。 /home/root、およびその他のローカル パス内のファイルは一時的であり、再起動時に失われます。
  • 永続的な依存関係にはクラスター ライブラリ管理を使用します。 必要に応じて、init スクリプトを使用して再インストールを自動化します。 initスクリプトとは何かについては、を参照してください。

Windows (WSL) で SSH セットアップが失敗する

WSL 内ではなく、Windows で直接 databricks ssh setup を実行します。 Windows VS Code インスタンスは、WSL 側で作成された SSH 構成を見つけることができません。

FAQ

リモート開発と Databricks Connect の違い

Databricks Connect を使用すると、Spark API を使用してコードを記述し、ローカルの Spark セッションではなく Databricks コンピューティングでリモートで実行できます。 Databricks Visual Studio Code拡張機能では、Databricks Connect を使用して、Databricks でのユーザー コードの組み込みデバッグが提供されます。

リモート開発を使用すると、IDE からワークスペースにアクセスし、開発環境全体をクラスターに移動できます。Python、カーネル、およびすべての実行は、クラスター リソースへのフル アクセスを使用して Databricks 上で実行されます。

コードとデータはどのように保護されますか?

すべてのコードは、Databricks クラウド VPC 内で実行されます。 セキュリティで保護された環境にデータやコードが残っていません。 SSH トラフィックは完全に暗号化されます。

どの IDE がサポートされていますか?

Visual Studio Codeとカーソルは正式にサポートされています。 SSH 機能を備えた IDE には互換性がありますが、テストされるのは VS Code と Cursor のみです。

すべての Databricks ノートブック機能は IDE から利用できますか?

display()dbutils%sqlなどの一部の機能は、制限付きで、または手動で設定できます。 Databricks Notebook の違いを参照してください。

SSH トンネルを使用して接続すると、クラスターは自動的に開始されますか?

はい。ただし、クラスターの起動に接続タイムアウトよりも時間がかかる場合、接続の試行は失敗します。 これを回避するには、コマンド パレット (または remote.SSH.connectTimeout) から settings.json の値を大きくして、タイムアウト エラーの可能性をさらに減らします。

クラスターが実行されているかどうかを確認するにはどうすればよいですか?

Databricks ワークスペース UI で [コンピューティング ] に移動し、クラスターの状態を確認します。 クラスターには、SSH 接続が機能するために [実行中 ] と表示されている必要があります。

SSH/IDE セッションを切断するにはどうすればよいですか?

セッションを切断するには、IDE ウィンドウを閉じるか、IDE の [切断 ] オプションを使用するか、SSH ターミナルを閉じるか、ターミナルで exit コマンドを実行します。

クラスターを停止し、動作していないときに課金を回避するにはどうすればよいですか?

すぐに停止するには、ワークスペース UI からクラスターを終了します。 Databricks ワークスペース UI で [コンピューティング ] に移動し、クラスターを見つけて、[ 終了 ] または [停止] をクリックします。

ワークスペース UI からクラスターに短い 自動終了 ポリシーを設定します。 切断後、SSH サーバーは shutdown-delay 期間 (既定値: 10 分) を待機し、クラスターのアイドル タイムアウトが適用されます。

永続的な依存関係を処理する方法

セッション中にインストールされた依存関係は、クラスターの再起動後に失われます。 要件とセットアップ スクリプトには永続的ストレージ (/Workspace/Users/<your-username>) を使用します。 自動化には、クラスター ライブラリまたは init スクリプトを使用します。

どのような認証方法がサポートされていますか?

認証では、Databricks CLI と ~/.databrickscfg プロファイル ファイルが使用されます。 SSH キーは、Databrick リモート開発によって処理されます。

クラスターから外部データベースまたはサービスに接続できますか?

はい。クラスター ネットワークで送信接続が許可され、必要なライブラリがある限りです。

追加の IDE 拡張機能を使用できますか?

ほとんどの拡張機能は、IDE とクラスターに応じて、リモート SSH セッション内にインストールされている場合に機能します。 Visual Studio Code では、既定ではリモート ホストにローカル拡張機能はインストールされません。 拡張機能パネルを開き、リモート ホストでローカル拡張機能を有効にすると、手動でインストールできます。 また、特定の拡張機能を常にリモートでインストールするように Visual Studio Code を構成することもできます。 Databricks への接続を参照してください。

はい。ただし、ワークスペース管理者は、VS Code および Cursor 拡張機能マーケットプレースの URL を許可リストに登録する必要があります。 ユーザーのローカル コンピューターには、インターネットにアクセスする機能も必要です。