DatabricksではAWS PrivateLinkを用いて閉域網の構成を組むことができます。セキュリティは向上しますが、クラスターから公衆回線にアクセスできないので、GUI経由でのライブラリのインストールができなくなります。
この場合、ライブラリのインストール方法の選択肢には以下のようなものがあります。
- インターネット接続可能なネットワークでライブラリをダウンロード、ファイルを閉域網に移動してからインストール(オフラインインストール)
- 閉域網内にリポジトリサーバーを立てる
- Proxyサーバで特定のURLのみの通信を許可する(AWSとProxyサーバでネットワークが疎通している必要あり)
- 必要なライブラリをインストール済みのカスタムランタイムをDockerコンテナに用意しておく
一長一短ありますが、ここでは追加の設定が不要な手順1を説明します。また、ここではPyPIとMavenからのインストールが必要なライブラリGlowを対象にします。
注意
上記ライブラリ以外での動作確認を行ったわけではないので、場合によっては動作しない可能性があることにご注意ください。ここで説明しているオフラインインストールの方法でライブラリをインストールしても、ライブラリ自体が外部との通信を必要とする場合もあります。
PyPIからのライブラリのダウンロード
ローカルマシンでダウンロード用のディレクトリを作成します。
mkdir glow
cd glow
ライブラリで使用するwheelファイルをダウンロードします。
pip download glow.py==1.0.0
こちらを圧縮しておきます。圧縮ファイルはglow.zip
とします。
Mavenからのライブラリのダウンロード
こちらは少し複雑です。以下を参考にさせていただきました。Macの場合はbrew install maven
でmavenをインストールしておきます。
mkdir glow_maven
cd glow_maven
上のディレクトリ内にpom.xml
ファイルを作成します。<dependency>
の内容はMaven Repositoryで取得します。
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>id</groupId>
<artifactId>dl</artifactId>
<version>1</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/io.projectglow/glow-spark3 -->
<dependency>
<groupId>io.projectglow</groupId>
<artifactId>glow-spark3_2.12</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>
以下を実行してjarファイルをダウンロードします。
mvn dependency::copy-dependencies
こちらもdependency
以下を圧縮しておきます。dependency.zip
とします。
ライブラリのアップロード
Databricksファイルシステム(DBFS)に上のステップで作成した圧縮ファイルをアップロードします。事前にライブラリを格納するパスを決めておきます。ここでは/FileStore/libraries
以下にファイルを格納します。必要に応じてパスを変更ください。
- サイドバーのデータをクリックし、アップロードをクリックします。
- DBFSターゲットディレクトリを
/FileStore/libraries
とし、上のステップで作成したzipファイルをドラッグアンドドロップします。
ライブラリの解凍
zipファイルを解凍します。
クラスターとノートブックを作成し、以下のコマンドを実行して解凍します。
%sh
unzip /dbfs/FileStore/libraries/glow.zip -d /dbfs/FileStore/libraries
%sh
unzip /dbfs/FileStore/libraries/dependency.zip -d /dbfs/FileStore/libraries/glow_maven
initスクリプトの作成
上のステップまで完了すればGUIからライブラリをインストールすることは可能ですが、ファイルの数が多いので一括でインストールを行うinitスクリプトを作成してクラスターに設定します。
こちらを参考にしました。
ノートブックで以下を実行して、initスクリプト/databricks/scripts/maven-glow-install.sh
を作成します。
dbutils.fs.put("/databricks/scripts/maven-glow-install.sh","""
#!/bin/bash
cp /dbfs/FileStore/libraries/glow_maven/dependency/*.jar /databricks/jars/
""", True)
クラスターの作成
Glowをインストールするクラスターを作成します。Glowのバージョンとの関係で、ここではDatabricks Runtimeのバージョンを7.3 LTS ML (includes Apache Spark 3.0.1, Scala 2.12) にします。
高度なオプションを展開してinitスクリプトのタブを開き、送信先をDBFS、initスクリプトのパスにdbfs:/databricks/scripts/maven-glow-install.sh
を指定し、追加をクリックします。
これでクラスターを起動します。
wheelのインストール
最後にwheelをライブラリとしてインストールします。
ノートブックの最初のセルで以下を実行します。これによって、--find-links
に指定したDBFSパスから依存ライブラリも併せてインストールします。
%pip install --no-index --find-links=/dbfs/FileStore/libraries/glow/ /dbfs/FileStore/libraries/glow/glow.py-1.0.0-py3-none-any.whl
これで、PrivateLink環境でもglowが利用できるようになりました。
import glow
spark = glow.register(spark)
from pyspark.sql.functions import *
path = "/databricks-datasets/genomics/1kg-vcfs/ALL.chr22.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz"
df = spark.read.format("vcf").option("includeSampleIds", True).load(path)
display(df)