Teradata Jupyter ExtensionsをJupyter Hubにデプロイする方法

著者 [Hailing Jiang](Hailing.iang@teradata.com)
最終更新日 2021年11月17日

:::note warn
警告
本記事はTeradata Corporationによる[Getting Started](https://quickstarts.teradata.com/index.html#getting-access-to-vantage)に掲載された内容を抄訳したものです。掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。正確な内容については、原本をご参照下さい。
また、修正が必要な箇所や、ご要望についてはコメントをよろしくお願いします。
:::

# 概要
独自のJupyterHubクラスターをお持ちのお客様には、Teradata Jupyterエクステンションを既存のクラスターに統合するための2つのオプションがあります。

①	Teradata Jupyter Docker イメージを使用する。
②	既存のDockerイメージをカスタマイズしてTeradataエクステンションを含める。

このページでは、2つのオプションの詳細な手順を説明します。手順は、お客様のJupyterHubのデプロイが[Zero to JupyterHub with Kubernetes](https://zero-to-jupyterhub.readthedocs.io/en/latest/index.html)をベースにしていることを前提にしています。

::: note info
Vantageの新しいインスタンスが必要な場合は、[Google Cloud](https://qiita.com/ykswi/items/10a382de5fa5a4a42c50)、[Azure](https://qiita.com/ykswi/items/2c30aa1f5413b16c838c)、[AWS](https://qiita.com/ykswi/items/fba559149ad568678d58)のクラウドにVantage Expressという無料版をインストールすることができます。また、[VMware](https://qiita.com/ykswi/items/ebe1d854c38db9bb0f51)、[VirtualBox](https://qiita.com/ykswi/items/ffadaa375add309f2075)、または[UTM](https://qiita.com/ykswi/items/94995954ae723185c2f7)を使用して、ローカルマシン上でVantage Expressを実行することもできます。
:::


# Teradata Jupyter Docker イメージの使用
Teradataは、[jupyter/datascience-notebook](https://hub.docker.com/r/jupyter/datascience-notebook/)イメージをベースにした、すぐに実行可能なDockerイメージを提供しています。Teradata SQLカーネル、Teradata PythonおよびRライブラリとドライバー、Teradata Jupyter拡張をバンドルし、Teradataデータベースと対話しながら生産性を向上させることができます。また、このイメージには、SQLカーネル、拡張機能、Teradataライブラリの使用方法を示すサンプルノートブックが含まれています。

このイメージは以下のように使用することができます。

・ローカルのDockerコンテナで個人用Jupyter Notebookサーバを起動する。
・JupyterHubを使用したチーム向けJupyterLabサーバの実行

ローカルDockerコンテナで個人用JupyterLabサーバーを起動する手順については、[インストールガイド](https://docs.teradata.com/r/KQLs1kPXZ02rGWaS9Ktoww/Fwvns7y_a7juDWx1NixC2A)をご覧ください。ここでは、お客様の既存のJupyterHub環境でTeradata Jupyter Dockerイメージを使用する方法を中心に説明します。


# Teradata Jupyter Docker イメージをレジストリにインストールします。

①	[Vantage Modules for Jupyter](https://downloads.teradata.com/download/tools/vantage-modules-for-jupyter) のページにアクセスし、Docker イメージをダウンロードします。tarballで、**teradatajupyterlabext_VERSION.tar.gz**という形式になっています。

②	イメージをロードします。

```:docker_load.sh
docker load -i teradatajupyterlabext_VERSION.tar.gz
```
③	イメージをDockerレジストリにプッシュします。
```:docker_push
docker push
```
::: note tip
シンプルにするために、読み込んだ画像の名前を変更することを検討するとよいでしょう。
```:docker_tag
docker tag OLD_IMAGE_NAME NEW_IMAGE_NAME
```
:::

# JupyterHubでTeradata Jupyter Docker イメージを使用する


①	Teradata Jupyter DockerイメージをJupyterHubクラスタで直接使用するには、[JupyterHubドキュメントに記載されているように](https://zero-to-jupyterhub.readthedocs.io/en/latest/jupyterhub/customizing/user-environment.html#choose-and-use-an-existing-docker-image)overrideファイルを変更します。**REGISTRY_URL**と**VERSION**を上記の手順で適切な値に置き換えてください。

```:chg_override
singleuser:
  image:
  name: REGISTRY_URL/teradatajupyterlabext_VERSION
  tag: latest
```

②	[JupyterHubのドキュメント](https://zero-to-jupyterhub.readthedocs.io/en/latest/jupyterhub/customizing/extending-jupyterhub.html#applying-configuration-changes)に記載されているように、クラスタに変更を適用

::: note tip
複数のプロファイルを使用することで、ユーザーがJupyterHubにログインする際に使用する画像を選択することができます。複数のプロファイルを設定する詳細な手順と例については、[JupyterHubのドキュメント](https://zero-to-jupyterhub.readthedocs.io/en/latest/jupyterhub/customizing/user-environment.html#using-multiple-profiles-to-let-users-select-their-environment)を参照してください。
:::


# Teradata Jupyter Dockerイメージのカスタマイズ
Teradata Jupyter Dockerイメージにバンドルされていないパッケージやノートブックが必要な場合、Teradataイメージをベースイメージとして使用し、その上に新しいイメージをビルドすることをお勧めします。

以下は、Teradataイメージの上にビルドし、追加のパッケージとノートブックを追加するDockerfileの例です。Dockerfileを使用して新しいDockerイメージを構築し、イメージを指定のレジストリにプッシュし、新しいイメージをシングルユーザーイメージとして使用するために上記のようにオーバーライドファイルを変更し、上記のようにクラスタに変更を適用します。**REGISTRY_URL** と VERSION は適切な値に置き換えてください。

```:add_pkg
FROM REGISTRY_URL/teradatajupyterlabext_VERSION:latest

# install additional packages
RUN pip install --no-cache-dir astropy

# copy notebooks
COPY notebooks/. /tmp/JupyterLabRoot/DemoNotebooks/
```

# 既存のDockerイメージをカスタマイズしてTeradataの拡張機能を含める

Teradata SQLカーネルとエクステンションは、現在使用している既存のイメージに含めることができます。

①	[Vantage Modules for Jupyter](https://downloads.teradata.com/download/tools/vantage-modules-for-jupyter)ページから、zip圧縮されたTeradata Jupyter extensionsパッケージバンドルがダウンロードできます。 既存のDockerイメージがLinuxベースである場合は、Linux版のダウンロードを使用します。 そうでない場合は、使用しているプラットフォーム用にダウンロードします。 .zipファイルには、Teradata SQL Kernel、エクステンション、サンプルノートブックが含まれています。

②	バンドルファイルを作業ディレクトリに解凍してください。

③	以下は、既存のDockerイメージにTeradata Jupyterエクステンションを追加するためのDockerfileの例です。Dockerfileを使用して新しいDockerイメージを構築し、イメージを指定のレジストリにプッシュし、新しいイメージをシングルユーザーイメージとして使用するために上記のようにオーバーライドファイルを変更し、変更をクラスタに適用します。

```:dockerfile_add
FROM REGISTRY_URL/your-existing-image:tag
ENV NB_USER=jovyan \
  HOME=/home/jovyan \
  EXT_DIR=/opt/teradata/jupyterext/packages

USER root

##############################################################
# Install kernel and copy supporting files
##############################################################

# Copy the kernel
COPY ./teradatakernel /usr/local/bin
RUN chmod 755 /usr/local/bin/teradatakernel

# Copy directory with kernel.json file into image
COPY ./teradatasql teradatasql/

##############################################################
# Switch to user jovyan to copy the notebooks and license files.
##############################################################

USER $NB_USER

# Copy notebooks
COPY ./notebooks/ /tmp/JupyterLabRoot/TeradataSampleNotebooks/

# Copy license files
COPY ./ThirdPartyLicenses /tmp/JupyterLabRoot/ThirdPartyLicenses/

USER root

# Install the kernel file to /opt/conda jupyter lab instance
RUN jupyter kernelspec install ./teradatasql --prefix=/opt/conda

##############################################################
# Install Teradata extensions
##############################################################

COPY ./teradata_*.tgz $EXT_DIR

WORKDIR $EXT_DIR

RUN jupyter labextension install --no-build teradata_database* && \
  jupyter labextension install --no-build teradata_resultset* && \
  jupyter labextension install --no-build teradata_sqlhighlighter* && \
  jupyter labextension install --no-build teradata_connection_manager* && \
  jupyter labextension install --no-build teradata_preferences* && \
  jupyter lab build --dev-build=False --minimize=False && \
  rm -rf *

WORKDIR $HOME

# Give back ownership of /opt/conda to  jovyan
RUN chown -R jovyan:users /opt/conda

# Jupyter will create .local directory
RUN rm -rf $HOME/.local
```

④	Teradata package for PythonとTeradata package for Rはオプションでインストールすることができます。
・[Teradata Package for Python - teradataml download page](https://downloads.teradata.com/download/connectivity/teradata-package-for-python-teradataml)
・[Teradata Package for R - tdplyr download page](https://downloads.teradata.com/download/connectivity/teradata-package-for-r-tdplyr)


# さらに詳しく
・[Teradata Jupyter Extensions Website](https://teradata.github.io/jupyterextensions)
・[Teradata Vantage™ Modules for Jupyter Installation Guide](https://docs.teradata.com/r/KQLs1kPXZ02rGWaS9Ktoww/root)
・[Teradata® Package for Python User Guide](https://docs.teradata.com/r/1YKutX2ODdO9ppo_fnguTA/root)

#### Teradata Vantageへのお問合せ
[Teradata Vantage へのお問合せ](https://www.teradata.jp/About-Us/Contact)