scala on databricks
- Spark は「分散コンピューティングエンジン」
- Databricks は 「マネージド Spark」
クラスタは管理が辛いのでその部分をDatabricks がよしなにやってくれる.
実体は AWS + Spark クラスタ + ストレージレイヤー + jupyter notebook + ml flow のようなもの.
アナリストとエンジニアのギャップを埋めて作成したモデルを運用に乗せやすくしてくれる.
gcp の kube や lightbend の akka serverless みたいに分散アーキテクチャの管理をよしなにやってくれるのでうれしい.
Databricks はノートブックを job として実行できるので 開発者 と違って データサイエンティスト・アナリストはそれをそのままjobにしてしまいがち
これはいい面もあるが悪い面もある
良い面として、例えばセルごとのSparkタスクの実行結果やメトリクスが表示されるのでライトなチューニングがしやすい.
一方で、githubのインテグレーションは存在するがそれほどスムーズではない.
cli や rest API が提供されているのでプロダクション環境はGithubなどと連携してコードの管理をしたい.
マネージドによるイージーさと運用のシンプルさ、Databricks のサービスにロックインされてしまうことのバランスをうまくとりたい.
job は notebook ベースか uber jar.
jar は s3 や gcs にアップロードして、そこから引っ張ってくる. 様々なストレージサービスとのインターフェースとなる dbfs(databricks file system?) と それにアクセスできる ライブラリ dbutils や databricks cli を使う.
Scala で executable な jarを sbt assembly で作ってup するとよさそう
jarをupする場合github actions などを使ってテスト・コードレビュー・CI/CDのフローをつくれば開発者フレンドリーになると思う
ACID トランザクション、耐障害性を備えるストレージレイヤーに delta lake がある. これはイベントソーシングベースの永続化層. dbのstateとそれを変更する 一連の action によってデータを管理するので特定の時点のデータベースの状態を後から再現することが容易になる. これは git-like なインターフェースを備えたOSS のdb dolt のようで面白い. データベースがある意味イミュータブルなので監査の面でもメリットがあるかもしれない.
Databricks 上では Scala 2.12 が主流の模様(´・ω・`) エンタープライジーなかほりがする...
一部の機能e.g. dbutils はdatabricksのruntime上に公開されているがライブラリとして積極的に公開されているわけではないので注意が必要。主要な機能はossだがところどころそうではないものもある。