3
2

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 5 years have passed since last update.

DatabricksとGitHubを連携するお話

3
Last updated at Posted at 2019-09-27

はじめに

ここ数ヶ月、機械学習の前処理プロジェクトを前任から引き継ぎ、2人体制で開発を進めてきました。そこで課題になったのがコードレビューです。
今回は、DatabricksにGitHubを連携してレビューをすることになった経緯と、連携に必要な手順をご紹介しようと思います。

状況

【開発環境】
・ プラットフォーム: Databricks
・ 言語: pyspark

【課題】
Databricksは、Jupyter notebookライクなUIで、データをインタラクティブに確認・探索できたり、notebookをそのままバッチスクリプトとして利用できたりと、使い勝手の良いプラットフォームです。

2人体制に変わった当初は、Databricksのコメント機能などを利用して互いのコードをレビューしてました。
しかしながら、コード変更の差分が把握しにくく、開発中のコミュニケーションが分散しやすいこと、開発の背景やレビューの履歴を残しにくいことから、GitHubに連携して開発・レビューを進めることにしました。

ただし、GitHub連携が不十分(デフォルトはpullができない)なため、GitHubを使って開発するのは少々 面倒 工夫が必要な状況です。

工夫したところ

GitHub連携にあたり、工夫したのは以下です。

  1. プロジェクトのnotebookをCircle CIに連携
    チームで導入されているCircle CIを利用することにしました。
    GitHubのmasterにマージしてDatabricksに反映されたものを、バッチスクリプトに利用します。

  2. DatabricksのWorkspaceとローカルPCをDatabricksCLIで同期
    開発の流れは、下記のようにしました。

    • GitHubのmasterからローカルPCへpull。ブランチを作成して開発開始
    • 完成したら、Databricksで稼働を確認
    • GitHubへPull request

    Databricksの個人Workspaceにmasterのnotebookをコピーする手もありますが、Databricksの編集機能が弱い(置換ができない、文章補完が遅い等)こと、GitHubとの連携が容易で最新masterの使用を担保しやすいこともあり、上記運用になりました。

  3. GitHub の Issue と Pull request にテンプレを設定
    開発の背景や概要、レビューしてほしいことなど、入力必須な項目をテンプレ化しました。連携前は、slackやnotebook内のコメントなど、複数のチャネルに情報が分散してわかりにくい状況でした。

連携の際に一つ注意点です。
GitHubで差分を把握するには .py 形式での保存が必要です。
DatabricksCLIでローカルにファイルをダウンロードする場合、自動的に.pyが付与されますが、Databricks上でGitHubにpushする場合、入力が任意となりますのでご留意ください。

Circle CIの連携手順

では、連携の具体的な手順をご紹介します。
ここではCircle CIの説明は省きますが、こちらがわかりやすかったです。

GitHubのリポジトリを作成する

まずはリポジトリを作成します。

.ymlファイルを追加する

リポジトリページで.circleci/config.ymlという名前で新規ファイルを作成します。
ファイルには、circle ciの設定情報を記載します。下記サンプルは最もベーシックな内容です。必要に応じて、設定を追記してください。

.circleci/config.yml
version: 2
jobs:
  build:
    docker: # See https://docs.docker.com/get-started/#docker-concepts if you are new to Docker.
      - image: circleci/ruby:2.4.1
    steps:
      - checkout
      - run: echo "A first hello"

Databricksのtokenを取得する

  1. User settings > Access Tokensから Generate New Tokenを押下
  2. Lifetime (days)にTokenの有効期間を入力し、tokenを発行する
    ※表示されるtokenは、一度しか表示されないので、忘れずに控えてください

ビルドをCircle CI上でセットアップする

  1. サインアップページから”Start with GitHub”をクリックし、アカウントを作成します
  2. 「ADD PROJECTS」から対象リポジトリを選択し、Start Buildボタンをクリックします

プロジェクトにDatabricksのtokenを入力する

  1. 「JOBS」から対象プロジェクトの歯車ボタンを押下し、設定に移動します
  2. BUILD SETTINGS の Environment Variablesを選択します
  3. Add Variablesボタンを押下し、Nameに「DATABRICKS_TOKEN」、Valueにtokenを入力します

これで、GitHubとCircle CIとの連携は完了です。

DatabricksCLIの設定手順

次に、DatabricksCLIの設定手順です。

pipでDatabricksCLIをインストール

$ pip install databricks-cli

configにHostとtokenを設定する

DatabricksCLIのconfigにHostとtokenを設定します。
ターミナルからconfigを呼び出し(一番上を実行する)、Hostと先ほど発行したtokenを入力してください。

$ databricks configure --token
>>Databricks Host (should begin with https://): https://<your-host>.cloud.databricks.com/ # アクセスしているhost名を貼る
>>Token:  # tokenを貼る

以上でDatabricksCLIの設定は完了です。

改善できたところ

上記の設定を経て、ローカルでの開発&GitHubでのレビューに変更したおかげで、

  1. 変更の差分がわかりやすくなった
  2. テンプレの導入で、コミュニケーションコストが大幅に減った
  3. 開発の背景を含めて履歴を残せるようになり、タスク管理や確認が容易になった

と、かなりレビューしやすくなりました。やはり、GitHubは便利ですね。
差分が把握しやすくなったのは地味に嬉しいですが、レビューの視点をnotebook単位からIssue単位へ引き上げることができたのが、最もよかったです。

課題

次に課題。コーディングと実行のインターフェースが違うことです。
わかってたことですが、コーディングしてすぐに試せないのは結構ストレスです。
当初、pycharmを使ってローカルPCでコードの実行もできるよう構想してたのですが、両者の環境を同期するのは困難と判断し、今に至っています。

まとめ

Databricks単体の開発は、個人のアドホック分析には強いのですが、複数人の開発では余分なコミュニケーションコストが発生し、最適手とは言えません。
GitHubと連携することで、Databricksの良さを生かしたまま、開発の見通しがよくなりました。
今後、コーディングとコードの実行をワンストップでできる方法を模索できればと思います。

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?