Microsoft Azure Databricksを使ってデータレイクのデータを表示する方法

Microsoft Azure Databricksを使ってデータレイクのデータを表示する方法

こんにちは。やましー@データ活用クラウドエンジニア(@yamashi18041) です。

今日は前回書いた「Microsoft Azure Data Factoryを使ってデータ基盤にデータを取り込む方法」で使用した教材、Microsoft Learnの続きです。

前回はデータレイクを作り、Azure Data Factory を使ってデータの取り込みまでを実施しました。

今日はAzure Databricks作って、前回データレイクに取り込んだを読み出してて見たいと思います。

この記事を読むことで、モダンなデータ活用基盤をクラウド上に作成できるようになります。

データ活用は今後、事業活動を行う上で絶対に必要です。こうしている間にも他社はどんどんと分析を行い売り上げをアップコスト削減に努め競争力を高めています。

Azure Databricksは現在Microsoftが絶賛おすすめ中のPaaSサービスで、分散処理をお手軽簡単にできるサービスになっています。

引用: https://azure.microsoft.com/ja-jp/services/databricks/

これを使いこなせるようになり、同僚に差をつけ上司を見返し、所属する会社の売り上げに貢献してどんどんあなたのキャリアアップを図っていってもらいたいと思います。

データの取り込みについては前回の記事で解説していますので、こちらからどうぞ。

今回の記事は以下のような方を読者として対象としてます。

  • データ活用技術に興味がある
  • Azure Databricksの使い方を知りたい
  • クラウド技術について情報収集中

ではAzure Databricksについて簡単に解説から始めたいと思います。

Azure Databricksとは

Azure Databricks とは
引用; https://docs.microsoft.com/ja-jp/azure/azure-databricks/what-is-azure-databricks

Azure Databricksとは一言でいうと

分散処理をするための基盤サービス

といったところでしょうか。

もう少し具体的に言うと、1台のコンピュータでは処理に時間がかかってしまうような膨大なデータを複数台のコンピュータを使って手分けして処理を行うことができるサービスとなっています。 これを分散処理といいます。

Databricksでは分散処理を行うコンピュータのグループをクラスターといいます。

実際にはApache SparkというOSS(オープンソースソフトウェア)をAzure 上で利用することができるサービスとなっています。

名前のDatabricksとはApache Sparkの開発元(OSSコントリビュータ)であるDatabricks社から来ています。

また、Microsoft社とDatabricks社が共同開発したPaaSであるため、元はOSSでありながらMicrosoft社からサポートを受けることができます。

その他Azure Databricksの特徴としては

  • Azureのサービスとの親和性が高く最適化されている
  • UIはJupyter NotebookのようなNotebookで操作する
  • NotebookはPython、Scala、R、SQL が使える
  • 分散処理をするクラスターはオートスケール機能でスケールアウトさせられる
  • 一定期間処理が行われない場合クラスターが自動削除されて費用がかからなくなる
  • クラスターを削除してもNoteBookは消えない
  • オンメモリで動作するため処理が高速
  • テラバイト級より大きいのデータはメモリ上に乗りきらないので扱えない

前置きはこのくらいにしておいて、ワークスペース作成から始めたいと思います。

Azure Databricksワークスペースを作成する

①「すべてのサービス」を選択します。

②「databricks」と検索します。

③「Azure Databricks」を選択します。

④「+追加」を選択しAzure Databricksのワークスペースの作成を開始します。

①Workspace name:「ymstech-adb01」
 適当なワークスペース名を設定します。

②サブスクリプション:いつもお使いのもの指定します。

③④リソースグループ:「ymstech-rg」
 前回作成したリソースグループを使用しました。

⑤場所:「東日本」

⑥Pricing Tier:「Trial (Premium – 14-Days Free DBUs」
 今回はデモなのでTrialを選択しました。DataBricksの課金体系としてDBUsに対する料金とクラスター内のVMに対する料金の両方が課せられます。Trial版はDBUsに対する課金が14日間無料になるようです。
 通常はPremiumとStandardがあります。PremiumはStandaerdで使える機能に加えRBAC制御や JDBC/ODBCエンドポイント認証などのセキュリティ周りの機能追加されています。

⑦ Deploy Azure Databricks workspace in your own Virtual Network(VNet) :「No」
 こちらはクラスターをどこのVNETで作成するかを指定することができます。 
 YESの場合はユーザーが作成した任意のVNETの使用できます。(VNETインジェクションと呼ばれる)

⑧「作成」を選択しワークスペースを作成します。

①「Launch Workspace」を選択すると、Databricksのワークスペース画面へ遷移します。

これでワークスペースの作成が完了です。

Notebookをインポートする

通常の開発の場合だと、まっさらなノートブックをクリエイトすることになりますが、 今回は既に演習用に公開されたノートブックがあるのでそれをインポートします。

①Workspaceを選択します。各ユーザーごとまたは共有で使えるワークスペースが与えられているので、そこにNotebookを作成していきます。

①「Users」を選択します。

②③ユーザー名の右の▽を選択します。

④Inportを選択します。

①Import from:「URL」を選択します。

② インポート元のULRを指定します。
「https://github.com/MicrosoftDocs/mslearn-data-ingestion-with-azure-data-factory/blob/master/DBC/03-Data-Ingestion-Via-ADF.dbc?raw=true」

③Importを選択します。

インポートできたことを確認します。

①ユーザー名を選択します。

②ワークスペースに「03-Data-Ingestion-Via-ADF」というNotebookの一式がフォルダとして見えるようになりました。こちらを選択し展開します。

③フォルダを展開しにNotebookがあることが確認できます。前回のブログで紹介したのは 「01-Getting-Started」のData Factoryの環境構築手順と「02-Data-Ingestion」でコピーパイプライン作成して実行してみるところまでを紹介しました。

前回のブログの続きを行うなうため、「02-Data-ingestion」を選択します。

①Cmd 5 からが本記事の対象のDatabricksを扱う演習です。

 ここではまずクラスターを起動してNotebookにアタッチするように促されています。が、まだ作成していないので作成していきます。

Azure Databricksクラスターを作成する

Notebookに書かれた処理を実行するためにはクラスターが必要なので作成していきます。

①「Clusters」を選択し、クラスター管理画面に遷移します。

②「+ Create Cluster」を選択し新規に作成します。

①Cluster Name:「ymstech-cluster01」任意のクラスター名を付けます。

②Cluster Mode:「Standard」一人で使用するためStandardとしました。
 複数人で一つのクラスターを使う場合はHi concurrencyを選択します。 

③Pool:「None」仮想マシンをホットスタンバイさせておき、クラスターの起動やオートスケールを迅速に行いたい場合はあらかじめプールを作成してそれを指定します。

④Databricks Runtime Version:「Runtime: 6.1 (Scala 2.11, Spark 2.4.4」
 いいろいろなソフトがセットになったランタイムです。Python version 2を使いたい場合や、GPUが使いたい場合はこちらを変更します。

⑤Enable autoscaling:「チェックあり」実行する処理に応じて自動でスケールアウト(ワーカーの仮想マシンが増える)します。

⑥Terminate after「60」minutes of inactivity
 処理が行われなくなってから指定した時間経過すると自動でクラスタを削除する設定です。これにより料金を非常に抑えることができます。これはAzure Databricks特有の機能です。

⑦Worker Type: 「Standard_DS3_v2」
 ワーカー仮想マシンのサイズ(CPUやメモリ)を決定します。

⑧Min Workers:「1」
 スケールアウトしない場合のワーカー仮想マシンの数です。

⑨Max Workers:「2」
 スケールアウトした場合の最大のワーカー仮想マシンの数です。

⑩Driver Type:「Same as worker」
 ドライバー仮想マシンのサイズ(CPUやメモリ)を決定します。
 ドライバー仮想マシンとは分散処理をワーカーにさせる場合に統率を取る役割の仮想マシンです。そのため、クラスターの最小構成はドライバー1台、ワーカー1台の計2台となります。

⑪「Create Cluster」を選択しクラスタを作成します。

作成までに5分くらい時間がかかります。

作ったクラスタをポータルから覗いてみる

作ったクラスタポータルからその存在を確認することができます。

①ワークスペースを作った時、実は、一緒にリソースグループが作られます。これはDatabricksに管理されたリソースグループなのでユーザーが直接操作することはできません。

そしてそのリソースグループのの中には「ストレージアカウント」と「ネットワークセキュリティーグループ」と「仮想ネットワーク」が作成された状態になります。

さらにクラスタを作成するとその仮想ネットワークの中に仮想マシンが作成されます。

Notebookにクラスターをアタッチする

アタッチお行わない限り処理が実行できないので必ずアタッチを行います。

再度Notebookにアクセスします。

①「Detached」を選択します。

②先ほど作成したクラスタ「ymstech-cluster01」を選択します。

すると③のような状態になります。これでNoteBook実行の準備が整いました。

NoteBookに書かれた処理を実行する

Databricksを実行するにあたりストレージアカウントのキーを取得します。

まだ作成していない方は前回の記事を参照して下さい。

①ポータルにアクセスし、ストレージアカウントの「アクセスキー」を選択します。

②次に使うので「key1」をコピーします。

①Notebookのcmd 6から実行用のコマンドがあります。ちなみに今回のNoteの言語はPythonです。新規にNotebookを作る場合は選ぶことができます。

InportしたNotebookをそのままでは動作しないので少し書き換えていきます。

②containerName :「”demo-container01″」
 今回視覚化するデータが入っているストレージアカウントのBLOBコンテナ名を記入します。前回の記事で作ったコンテナ名になります。

③storageAccountName:「ymstechsa01」
  今回視覚化するデータが入っているストレージアカウント名を記入します。

④storageAccountKey:先ほどコピーしたストレージアカウントのキーを記入します。

NoteBookを実行する方法は実行したいNoteBookのcmdの枠内にカーソルを合わせて「Ctrl + Enter」または「Shift + Enter」を実行します。

これにより変数に代入されます。次にストレージにどんなファイルが入っているか覗いてみます。

①Cmd8を修正して実行してみます。

②ストレージアカウント名を書き換えます

%fs ls wasbs://dwtemp@[your-storage-account-name].blob.core.windows.net/03.02

%fs ls wasbs://demo-container01@ymstechsa01.blob.core.windows.net/03.02

ちなみに「%fs」によりlinuxのシェルが実行できるようになります。今回はlsコマンドで指定の場所にどんなファイルがあるかを確認するコマンドです。

書き換えたら実行してみましょう。

③に実行結果が表示されます。
 parquetファイルがあることが確認できました。今回はアメリカの各都市における犯罪データがparquet(列指向フォーマット)としてまとめられています。

次にparquetの中身を見ていきたいと思います。

取り込んだデータの中身を見てみる

①cmd 10を実行し parquetの中身を変数に読み込みます。このコマンドはニューヨークの犯罪データを読み込みます。

②実行結果にSpark Jobsとあります。これはクラスタが実際にクラスタが処理を処理をしたということになります。また、JOBは分散処理を実行する単位となります。複数のJOBがある場合はワーカーにJOB振り分け分散処理が行われます。今回は1つなので分散されていません。この辺り別の記事で詳しく説明したいと思います。

③JOBの詳細が表示されます

④Stage とは1つのJOBを構成する処理単位で逐次実行される小さな単位です。

⑤読みだした parquet 内の列名が表示されました。

次も同様に、今度はボストンのデータを読みだしてみます。

次は実際のデータを表示してみたいと思います。

displayを実行することでデータの中身を見ることができます。

ここで注意して見てほしいのはニューヨークとボストンで列名が違います。

データ分析を行う上で列名が違うと処理がしにくいので次回はデータを整形してデータを統合していきます。

長くなってきたので今回はこの辺でいったん終わりたいと思います。

まとめ

Databricksとは「分散処理をするための基盤サービス」でしたね。

今回はDatabricksを作成しデータレイクの中身を覗いてみました。

次回はいよいよData Factoryと連携させてデータ整形&統合&可視化です。
お楽しみに!

クラウド技術学びたいときは実際に触ってみるのが近道なのでMicrosoft Learnを使って実際に触ってみましょう!ぜひご自身でも実施してみてください。

最後まで読んでいただきありがとうございました。

以上、やましー@データ活用クラウドエンジニア(@yamashi18041)でした。