LoginSignup
8
4

More than 3 years have passed since last update.

Databricks

Last updated at Posted at 2020-03-18

Databricks とは、大量のデータを並列に処理するアプリを作るためのサービスだ。Apache Spark の開発者によって Apache Spark のマネージド・サービスとして開発された。ここ数日勉強しているが特に引っかかった点を書く。

一言でいうと Apache Spark とは、表形式のデータを加工するコードを自動的に並列処理に変換して並列で実行してくれるという物だ。開発者があたかも Jupyter 上の Pandas でコードを書いているような気分で巨大データを並列に加工出来る。機械学習関のライブラリも含まれているので、データの前処理から分析や予測まですべて Spark で行う事が出来る。

また、前身の(?) Hadoop との違いは、ストレージを切り離した所にある。Spark はデータ処理に特化してする事で様々な他のストレージと組み合わせて使えるようになった。

主な情報源

以下に Databricks で分かりにくい事があったので記録する。

CLI

分かりにくくは無いが CLI が無いとかなり面倒なのでインストールは必須。インストールには pip3 を使う。databricks configure で接続情報を設定すると使えるようになる。

# 設定
$ pip3 install databricks-cli
$ databricks configure --token
Databricks Host (should begin with https://): https://hogehoge.cloud.databricks.com/
Token: (GUI で作った token を入力)

# 動作確認
$ databricks fs ls

databricks コマンドには様々なサブコマンドがあるが、databricks fs には最初から短縮形として dbfs が用意されている。

Secret https://docs.databricks.com/security/secrets/index.html

Databricks でパスワードなどの秘密を扱う時は Notebook に直接書かないで Secret に保存した物を取り出して使うのがお作法だ。

  • scope とは? secret の名前空間
  • acl とは? ある scope のある secret の読み書き権限。

パスワードなどは scope ごとに Secret に保存する。

scope 作成

databricks secrets create-scope --scope hoge_scope

scope 表示

databricks secrets list-scopes

scope に secrets 追加

databricks secrets put --scope hoge_scope --key User
databricks secrets put --scope hoge_scope --key Password

secrets 表示

databricks secrets list --scope hoge_scope

他の人からもアクセス出来るようにする

databricks secrets put-acl --scope hogehoge-scope --principal hoge@hoge.com --permission MANAGE

Notebook 内から Secret にアクセスする方法

USER = dbutils.secrets.get(scope='hoge_scope', key='User')
PASSWORD = dbutils.secrets.get(scope='hoge_scope', key='Password')

Secret の内容を Notebook に表示させようとすると '[REDACTED]' と表示される。面白い。

DBFS と Workspace の2つのファイル置き場

Databricks で利用するファイルは以下の二箇所がある。

  • Databricks File System (DBFS)
    • Python プログラムからは /dbfs にマウントされているように見える。
    • プログラムで利用するファイルはここに置く。
    • cli からは databricks fs コマンドでアクセス出来る。
    • 特に、/FileStore/ 以下はファイルのアップロードなど UI からアクセスするのに使う。
  • Workspace
    • Notebook はここに置く。
    • cli からは databricks workspace コマンドでアクセス出来る。

なんと、プログラムから直接 Workspace にアクセスする事は出来ない!

SQL Table と DataFrame の関係

Databricks では、表にアクセスするのに Python や SQL を使う事が出来る。同じ表を別の言語で使うには表を SQL から見える所に Table として登録する必要がある。

Table にはどこからでもアクセス出来る global と、同じ Notebook からだけアクセス出来る local がある。

Python の DataFrame を "temp_table_name" という local table として登録する。これで SQL から参照出来る。

df.createOrReplaceTempView("temp_table_name")

Python の DataFrame を "global_table_name" という global table として登録する。これで SQL から参照出来る。global table は Web UI の Data から参照出来る。

df.write.format("parquet").saveAsTable("global_table_name")

"temp_table_name" という名前で登録されてある table を Python の DataFrame として読む。

temp_table = spark.table("temp_table_name")

global table は DBFS 上に保存される。保存される場所は DESCRIBE DETAIL で出てくる location で確認出来る。

DESCRIBE DETAIL `global_table_name`

例えば dbfs:/user/hive/warehouse/global_table_name

Notebook のマジックコマンド

マジックコマンド

8
4
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
8
4