Databricksユーザーを招待して利用開始するまでの手順

Databricksのワークスペース管理者がDatabricksユーザーを招待し、Databricksユーザーが利用を開始するまで(ノートブック上でコマンドを実行するまで)の手順をまとめています。

:::note info
**注意**
- こちらの内容はDatabricks on AWSに関するものとなっています。Azure Databricksの場合は一部手順が異なります。Azure Databricksの手順は追って準備します。
- こちらで説明している手順は[シングルサインオン](https://docs.databricks.com/administration-guide/users-groups/single-sign-on/index.html)が有効化されているケースでは当てはまりません。
- GUIは日本語を想定しています。GUIを日本語に変更する手順に関しては[こちら](https://qiita.com/taka_yayoi/items/ff4127e0d632f5e02603)を参照してください。
:::

> [Databricksクイックスタートガイド](https://qiita.com/taka_yayoi/items/125231c126a602693610)のコンテンツです。

![Screen Shot 2022-06-03 at 9.15.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/257094eb-9c89-828a-39b4-db9afcc9e036.png)

# ワークスペース管理者の作業

招待したユーザーがすぐに作業を開始できるように、ワークスペース管理者が準備を行います。

## 機能の有効化・無効化

サイドメニューから**設定 > 管理コンソール**にアクセスし、**Workspace settings**タブを開きます。

[DBFSブラウザを有効にする](https://qiita.com/taka_yayoi/items/9d98eee6e46a3469b638#%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89)などワークスペースの機能のオンオフを行います。
![Screen Shot 2022-06-02 at 17.08.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/eff1af97-4b7b-f981-cc30-a548e118e221.png)

### お勧め設定

- REST APIを呼び出す際に使用するパーソナルアクセストークンを利用させない。
    - **Access Control**の下にある**Personal Access Tokens**を**オフ**にします。
- ワークスペースのサイドメニューから[DBFS(Databricks File System)](https://qiita.com/taka_yayoi/items/897264c486e179d72247)をブラウジングできるようにしたい。
    - **Advanced**の**DBFS File Browser**を**オン**にします。
- ノートブックのコマンドの実行結果のダウンロードを許可しない。
    - **Advanced**の**Download button for notebook results**を**オフ**にします。
- GUIを用いたローカルからのファイルのアップロードを許可しない。
    - **Advanced**の**Upload data using the UI**を**オフ**にします。
- ノートブックのエクスポートを許可しない。
    - **Advanced**の**Notebook Exporting**を**オフ**にします。

## クラスターの作成

デフォルトの設定では、Databricksユーザーは計算処理を行うDatabricksクラスターを作成することができません。

ここでは、ワークスペースにアクセスできる全ユーザーが利用できる(起動・ノートブックのアタッチ)クラスターを準備します。

1. サイドメニューから**クラスター**にアクセスし、**クラスターの作成**ボタンをクリックします。
1. 以下の設定でクラスターを作成します。

    - **クラスター名**: 共用クラスター
    - **クラスターモード**: ハイコンカレンシー(同時接続性の高いクラスターです)
    - **Databricksランタイムのバージョン**: Runtime 10.5 ML
    - **オートスケールの有効化**: オン
    - **非アクティブ状態が120分継続した後に終了**(アイドル状態が120分続いたら自動でクラスターが停止します)
    - **ワーカータイプ**: i3.2xlarge
        - **ワーカーの最小数**: 2
        - **ワーカーの最大数**: 8

![Screen Shot 2022-06-02 at 17.17.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/77247688-6951-64b7-ea39-37c4ca257bac.png)

## クラスターのアクセス権の設定

1. 画面右上の**その他**をクリックし**権限**を選択します。
![Screen Shot 2022-06-02 at 17.18.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/12bab740-b59a-f997-a927-293abeafa996.png)

1. アクセス権を設定します。
![Screen Shot 2022-06-02 at 17.19.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8630bc24-3a52-a816-6153-964b2e4ef0ac.png)

1. **NAME**から**グループ**の下にある**すべてのユーザー**を選択します。
![Screen Shot 2022-06-02 at 17.20.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/56074a58-28b5-5285-1926-a69db56aa652.png)
1. **PERMISSION**から**再起動が可能**を選択します。
![Screen Shot 2022-06-02 at 17.22.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a3bceda5-3086-a112-c8ea-438eec89c573.png)
1. **+追加**をクリックします。
![Screen Shot 2022-06-02 at 17.24.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/935463c7-927e-0433-db17-8cdb8243ef8a.png)
1. **Save**をクリックします。

:::note info
**注意**
- 同時に利用するユーザー数など性能要件に応じてクラスターのスペックを変更してください。
- セキュリティポリシーに応じてクラスターのアクセス権を変更してください。アクセス権とユーザーができることの関係は以下の通りとなります。詳細は[原文](https://docs.databricks.com/security/access-control/cluster-acl.html#cluster-level-permissions)を参照ください。

| できること | アクセス権なし |アタッチ可 | 再起動が可能 | 管理可能 |
|:--|:--|:--|:--|:--|
| ノートブックをクラスターにアタッチ  |   | x  | x  | x  |
| Spark UIの参照  |   |  x | x  | x  |
| クラスターメトリクスの参照  |   | x  | x  | x  |
| ドライバーログの参照  |   |  x | x  | x  |
| クラスターの停止  |   |   | x  |  x |
| クラスターの起動  |   |   |  x | x  |
| クラスターの再起動  |   |   | x  | x  |
| クラスターの編集  |   |   |   |  x |
| ライブラリをクラスターにアタッチ  |   |   |   | x  |
| クラスターのリサイズ |   |   |   |  x |
| アクセス権の変更  |   |   |   | x  |
:::

### お勧め設定

#### 複数のユーザーで1台のクラスターを共有する

**メリット**: 管理するクラスターの台数を限定できるので管理が楽です。
**デメリット**: 
- 1台のクラスターを複数人で使用するので、リソースの取り合いが起こる可能性があります。
- GPUクラスターを使用したいなど、特定のユースケースに柔軟に対応することができません。

**設定内容**: 上述の設定を参考にしてください。

#### 複数のユーザーで1台のクラスターを共有する(管理者がクラスターの起動・停止を行う)

上の設定よりもユーザーの自由度は減り、クラスターの起動・停止はできなくなります。

**メリット**: ユーザーは稼働中のクラスターにノートブックをアタッチするだけでいいので操作が楽です。
**デメリット**: 管理者がクラスターの手動起動・停止を行う必要があります。

**設定内容**:

上のアクセス権の設定で付与する権限を**アタッチ可**に変更します。

#### 各ユーザーが許可された裁量でクラスターを管理する

**メリット**: ユーザーが一定の自由度の下でクラスターを作成、利用することができます。
**デメリット**: 
- クラスターが乱立することになり多くのクラスターを管理しなくてはなりません。
- クラスターポリシーを活用しないと野放図にクラスターが作成されることになります。
- コストのコントロールが効きづらくなります。

**設定方法**

管理者が[クラスターポリシー](https://qiita.com/taka_yayoi/items/93d7597d7fc739b48bb7)を作成し、ユーザーにクラスターポリシーのアクセス権限を与えます。

1. ワークスペース管理者は、サイドメニューの**クラスター**にアクセスし、**クラスターポリシー**タブをクリックします。
1. **クラスターポリシーを作成**ボタンをクリックします。
![Screen Shot 2022-06-02 at 20.22.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e0c2a36e-55e1-3582-01d8-41628452f77c.png)
1. クラスターポリシーの名前とポリシーのルール(JSON)を指定します。ここでは、名前を`一般的なクラスターポリシー`とし、**定義**タブに貼り付けるポリシーのルールは以下のようにします。

    このルールでは以下のルールを規定しています。

    - ハイコンカレンシークラスター
    - プールの使用不可
    - Databricksランタイムは10.x系のみ
    - 指定できるインスタンスタイプは`i3.xlarge,i3.2xlarge,i3.4xlarge"のみ
    - ワーカーノードの最小数は1
    - ワーカーノードの最大数は10
    - ディスクのオートスケールを有効化
    - 自動停止するアイドル時間は30分
    - カスタムタグとして`team`に`product`を指定

    ```json:JSON
    {
      "spark_conf.spark.databricks.cluster.profile": {
        "type": "fixed",
        "value": "serverless",
        "hidden": true
      },
      "instance_pool_id": {
        "type": "forbidden",
        "hidden": true
      },
      "spark_version": {
        "type": "regex",
        "pattern": "10\\.[0-9]+\\.x-scala.*"
      },
      "node_type_id": {
        "type": "allowlist",
        "values": [
          "i3.xlarge",
          "i3.2xlarge",
          "i3.4xlarge"
        ],
        "defaultValue": "i3.xlarge"
      },
      "driver_node_type_id": {
        "type": "fixed",
        "value": "i3.xlarge",
        "hidden": true
      },
      "autoscale.min_workers": {
        "type": "fixed",
        "value": 1,
        "hidden": true
      },
      "autoscale.max_workers": {
        "type": "range",
        "maxValue": 10,
        "defaultValue": 2
      },
      "enable_elastic_disk": {
        "type": "fixed",
        "value": true,
        "hidden": true
      },
      "autotermination_minutes": {
        "type": "fixed",
        "value": 30,
        "hidden": true
      },
      "custom_tags.team": {
        "type": "fixed",
        "value": "product"
      }
    }
    ```

    ![Screen Shot 2022-06-02 at 20.38.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3c56f2aa-e3d6-1cb1-c4d7-362bc2cf59f3.png)

1. **権限**タブをクリックします。
1. **NAME**には**すべてのユーザー**、**PERMISSION**には**使用可能**を選択し、**+追加**をクリックします。
![Screen Shot 2022-06-02 at 20.39.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/fa863208-a9de-aff0-ad6b-2c1cc1abd7b3.png)

これでクラスターポリシーが作成されました。

ユーザーは権限が与えられているクラスターポリシーを指定してクラスターを作成します。

:::note info
**注意**
ユーザーは**使用可能**権限が与えられているクラスターポリシーを使用してしかクラスターを作成することはできません。
:::

1. サイドメニューから**クラスター**を選択し、**クラスターの作成**をクリックします。
1. 使用できるクラスターポリシーが複数ある場合には、**クラスターポリシー**から使用するポリシーを選択できますが、1つしかない場合にはクラスターポリシーは固定されます。
![Screen Shot 2022-06-02 at 20.43.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c59fc09e-5819-2e6c-00e6-3a36a2460c04.png)
1. 変更が許可されている設定を必要に応じて変更して、**クラスターを作成**ボタンをクリックします。
1. これでクラスターが作成されます。

クラスターポリシーの詳細に関しては、[Databricksクラスターポリシーの管理](https://qiita.com/taka_yayoi/items/93d7597d7fc739b48bb7)をご覧ください。

## ユーザーの招待

1. サイドメニューの**設定 > 管理コンソール**を選択します。
1. **Users**タブが選択されていることを確認します。
1. **+ ユーザーを追加**ボタンをクリックします。
![Screen Shot 2022-05-26 at 17.51.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4c744e1b-a166-272f-fa9e-cb08e8efb9b5.png)
1. **Email**に招待したいユーザーのメールアドレスを入力し、**Send invite**をクリックします。
![Screen Shot 2022-05-26 at 17.51.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d6406895-1a14-c64b-d86c-254112cb5373.png)
1. 招待メールが送信された旨のメッセージが表示されるので**OK**をクリックします。他のユーザーを招待するにはステップ4からの操作を繰り返します。
![Screen Shot 2022-05-26 at 17.52.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/32841c5b-719d-17a6-96b7-54140924f58d.png)

# ユーザーの作業

## 招待メールの受信およびワークスペースへのログイン

:::note
**注意**
上の操作から5分以内に確認メールが届かない場合には、迷惑メールに分類されていないか確認してください。
:::

1. Databricksからの確認メール(メールタイトル: **管理者の名前 has invited you to collaborate using Databricks**)を開きます。招待者の名前とメールアドレスを確認の上、メールに記載されているURLをクリックします。
![Screen Shot 2022-05-26 at 17.59.07.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/abf24735-9c41-0bed-6573-8e50f936821d.jpeg)
1. Databricksワークスペースに遷移します。ここで、**First and last name**に自分の名前、**Password**と**Confirm password**にパスワードを入力し、**Sign Up**ボタンをクリックします。

:::note
**注意**
パスワードは最低8文字を指定してください。
:::

これで、Databricksワークスペースにログインできました！
![Screen Shot 2022-05-26 at 18.00.04.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/11b32425-39ab-4abb-5ec0-4606390023e3.jpeg)

:::note info
**注意**
このタイミングでワークスペースをブックマークしておくことをお勧めします。URLはワークスペース固有なので、他のワークスペースと混同しないように、ブックマークにわかりやすい名前をつけておくことをお勧めします。
:::

## 画面操作に慣れる

1. まずは言語を日本語に切り替えましょう。[こちら](https://qiita.com/taka_yayoi/items/ff4127e0d632f5e02603)の手順に従って、画面の言語を日本語に切り替えてください。
1. ワークスペースの画面は以下のような構成となっています。画面左側のサイドメニューから主要機能にアクセスします。
![Screen Shot 2022-06-02 at 17.42.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/0d65b203-eb2b-2123-46bf-a02abe78b320.png)
1. サイドメニューにマウスカーソルを移動するとメニューが展開します。なお、この挙動は一番下の**メニューオプション**から変更することができます。
![Screen Shot 2022-06-02 at 17.44.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/26b9b5fc-6e42-1ec0-6655-0cec151705a8.png)
1. 以下のメニュー項目となっていますので、それぞれにアクセスしてみてください。
    1. **Data Science & Engineering** こちらはペルソナスイッチャーと呼ばれるものです。作業内容がデータサイエンス&データエンジニアリングであれば**D**、機械学習(Machine Learning)に関するものであれば**M**、SQL分析であれば**S**を選択することで、メニューや画面がそのペルソナに適したものに変更されます。
![Screen Shot 2022-06-02 at 17.45.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1aef3681-535d-b623-d86d-a083811e4bd0.png)
    1. **作成** [ノートブック](https://qiita.com/taka_yayoi/items/24a897cf40bba6d9e305)、テーブル、クラスターなどをクイックに作成することができます。
    1. **ワークスペース** ワークスペース上のフォルダー、ノートブックを一覧、アクセスすることができます。ワークスペースにはユーザーごとの**ホームフォルダ**が作成され、このフォルダの中にノートブックやフォルダを作成することになります。
![Screen Shot 2022-06-02 at 18.03.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/723ae0b9-f906-3ec5-bde8-07ba5ed94644.png)

    1. **リポジトリ** Git連携機能である[Databricks Repos](https://qiita.com/taka_yayoi/items/b89f199ff0d3a4c16140)にアクセスします。
    1. **最近利用したアイテム** 最近アクセスしたノートブックが一覧表示されます。
    1. **検索** ワークスペースを[検索](https://qiita.com/taka_yayoi/items/ab21c89eca56bc101dca)できます。
    1. **データ** ワークスペースの[データベース](https://qiita.com/taka_yayoi/items/e7f6982dfbee7fc84894)にアクセスします。
    1. **クラスター** [Databricksクラスター](https://qiita.com/taka_yayoi/items/c5d99cd77fe4bfcf69f0)の一覧画面に移動します。
    1. **ワークフロー** ノートブックの処理を[定期実行](https://qiita.com/taka_yayoi/items/b3275a1983c51a8bbe1a)することができます。

## ノートブックを作成する

Databricksでは[ノートブック](https://qiita.com/taka_yayoi/items/24a897cf40bba6d9e305)にコードを記述し、ノートブックを稼働中のクラスターにアタッチしたあとでコードを実行します。なので、まず初めにノートブックを作成します。

1. 上のサイドメニューから**作成 > ノートブック**を選択します。
1. 作成するノートブックの名前を指定し、**デフォルト言語**はPython、クラスターは[上のステップ](#クラスターの作成)で管理者が作成したクラスターを選択します。これでノートブックの作成とともにノートブックがクラスターにアタッチされます。
1. **作成**をクリックします。
![Screen Shot 2022-06-02 at 17.48.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/9b89e66f-77a4-b1cb-e891-f2d6c7c76919.png)
1. ノートブックが表示されます。左上でクラスターが選択されていることを確認してください。
![Screen Shot 2022-06-02 at 17.49.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/002f3906-11f9-1378-f157-91f84c55d22a.png)


## Pythonコードを実行する

1. 最初から表示されているセルにPythonコードを入力します。
    ```py:Python
    print("test")
    ```

    ![Screen Shot 2022-06-02 at 17.49.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5ed8decc-5160-68a1-60ca-ce94b3433bb6.png)

1. セルのコマンドを実行します。セル右上に表示されている▶︎をクリックし、**セルを実行**をクリックします。
![Screen Shot 2022-06-02 at 17.49.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f1c037e6-3843-c641-976c-0ceb4277e999.png)
1. Pythonが実行されました！
![Screen Shot 2022-06-02 at 17.49.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/94b1a919-6004-2e4a-8f2f-1c4fdc00ded0.png)

:::note info
**注意**
アイドル状態が120分継続すると自動でクラスターは停止する設定になっていますが、クラスターを使用しない場合には手動で[クラスターを停止](https://qiita.com/taka_yayoi/items/991aae376c089df58504#%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E3%81%AE%E5%81%9C%E6%AD%A2)してください。
:::

### Databricks 無料トライアル

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