1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PrivateLink構成のDatabricksでライブラリをインストールする

Posted at

DatabricksではAWS PrivateLinkを用いて閉域網の構成を組むことができます。セキュリティは向上しますが、クラスターから公衆回線にアクセスできないので、GUI経由でのライブラリのインストールができなくなります。

この場合、ライブラリのインストール方法の選択肢には以下のようなものがあります。

  1. インターネット接続可能なネットワークでライブラリをダウンロード、ファイルを閉域網に移動してからインストール(オフラインインストール)
  2. 閉域網内にリポジトリサーバーを立てる
  3. Proxyサーバで特定のURLのみの通信を許可する(AWSとProxyサーバでネットワークが疎通している必要あり)
  4. 必要なライブラリをインストール済みのカスタムランタイムをDockerコンテナに用意しておく

一長一短ありますが、ここでは追加の設定が不要な手順1を説明します。また、ここではPyPIとMavenからのインストールが必要なライブラリGlowを対象にします。

注意
上記ライブラリ以外での動作確認を行ったわけではないので、場合によっては動作しない可能性があることにご注意ください。ここで説明しているオフラインインストールの方法でライブラリをインストールしても、ライブラリ自体が外部との通信を必要とする場合もあります。

PyPIからのライブラリのダウンロード

ローカルマシンでダウンロード用のディレクトリを作成します。

Bash
mkdir glow
cd glow

ライブラリで使用するwheelファイルをダウンロードします。

Bash
pip download glow.py==1.0.0

Screen Shot 2022-06-15 at 11.38.53.png

こちらを圧縮しておきます。圧縮ファイルはglow.zipとします。

Mavenからのライブラリのダウンロード

こちらは少し複雑です。以下を参考にさせていただきました。Macの場合はbrew install mavenでmavenをインストールしておきます。

Bash
mkdir glow_maven
cd glow_maven

上のディレクトリ内にpom.xmlファイルを作成します。<dependency>の内容はMaven Repositoryで取得します。

pom.xml
<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ファイルをダウンロードします。

Bash
mvn dependency::copy-dependencies

Screen Shot 2022-06-15 at 11.43.28.png

こちらもdependency以下を圧縮しておきます。dependency.zipとします。

ライブラリのアップロード

Databricksファイルシステム(DBFS)に上のステップで作成した圧縮ファイルをアップロードします。事前にライブラリを格納するパスを決めておきます。ここでは/FileStore/libraries以下にファイルを格納します。必要に応じてパスを変更ください。

  1. サイドバーのデータをクリックし、アップロードをクリックします。
    Screen Shot 2022-06-15 at 11.51.38.png
  2. DBFSターゲットディレクトリを/FileStore/librariesとし、上のステップで作成したzipファイルをドラッグアンドドロップします。
    Screen Shot 2022-06-15 at 11.51.47.png
    Screen Shot 2022-06-15 at 12.06.28.png

ライブラリの解凍

zipファイルを解凍します。

クラスターとノートブックを作成し、以下のコマンドを実行して解凍します。

Shell
%sh
unzip /dbfs/FileStore/libraries/glow.zip -d /dbfs/FileStore/libraries
Shell
%sh
unzip /dbfs/FileStore/libraries/dependency.zip -d /dbfs/FileStore/libraries/glow_maven

このような状態になります。
Screen Shot 2022-06-15 at 12.49.23.png

initスクリプトの作成

上のステップまで完了すればGUIからライブラリをインストールすることは可能ですが、ファイルの数が多いので一括でインストールを行うinitスクリプトを作成してクラスターに設定します。

こちらを参考にしました。

ノートブックで以下を実行して、initスクリプト/databricks/scripts/maven-glow-install.shを作成します。

Python
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) にします。

Screen Shot 2022-06-15 at 12.53.21.png

高度なオプションを展開してinitスクリプトのタブを開き、送信先DBFSinitスクリプトのパスdbfs:/databricks/scripts/maven-glow-install.shを指定し、追加をクリックします。
Screen Shot 2022-06-15 at 12.53.28.png

これでクラスターを起動します。

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が利用できるようになりました。

Python
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)

Screen Shot 2022-06-24 at 8.40.32.png

Databricks 無料トライアル

Databricks 無料トライアル

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?