Azure Databricks の紹介 #Microsoft #Azure #DataBricks #spark
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
こんにちは。こちらではご無沙汰しております。木内です。
今日はまだ日本でもあまり知られていない Azure Databricks について簡単にご紹介したいと思います。
Azure Databricks とは?
Microsoft社の公式ページには「迅速、簡単で協調的な Apache Spark ベースの分析プラットフォーム」という説明があります。「はて。Sparkを使いたいのであれば既に HDInsight があるのでは・・・」と思われる方もいると思います。
実際ニュースでも取り上げられているのですが、イマイチ HDInsight との違いがピンとこない方もいたのではないかと思います。
Spark はもともとSQLや機械学習ライブラリなどをビルトインで持っており、一種のソフトウェアスイートになっています。従って Spark に手慣れた人であれば Hadoop ディストリビューションが持っているような Hive や、Mahout といったフレームワークを必要とせず、データサイエンスワークの相当部分を完結させることができます。
また最近ではETL元のデータレイクにAzure Storage Blobのようなオブジェクトストレージを使用する例も多く、Hadoopが自前で用意しているHDFSのようなストレージが不要になるケースもあります。そのような環境ではオブジェクトストレージにアクセスでき、スケールする処理フレームワークを簡単に使用することができれば、Hadoop ディストリビューションが提供する各種フレームワークは却っていろいろ含まれすぎていて、扱いづらいかもしれません。
そもそも
そもそも Azure Databricks はその前身となるサービスがあり、Databricks社(Sparkの開発元のひとつ)が提供していた "Databricks" というサービス(わかりにくい!)がそれになります。必要に応じでAWS上でSparkクラスタを作成して作業をすることができます。Azure Databricks はその Azure 版と言ってよいでしょう。
重要な点ですが、Azure Databricksはまだ日本では提供されていないことを注意してください(2018年4月現在)。今回の記事は東南アジアリージョンを使用して行っています。
Azure Databrick が向いている人
つまり、Azure Databricks が適するのは以下のような人物像になるかと思います。
- データは Storage Blob に入れていて、データマートに Azure Database for MySQL などを使用している
- 日ごろからApache Sparkを使用して業務をしている
- Hadoopの管理がしんどい
- 複数のメンバーで作業していて Notebook の共有などをしたい
では、やってみましょう
Azureポータルから "すべてのサービス" - "Azure Databricks" を選択します
選択直後は何も作成されていないので、 "Azure Databricksの作成" をクリックします。
まずワークスペースの作成を行います。今回は Standard レベルのワークスペースを作成します。Premium レベルのワークスペースになると、ODBC/JDBC経由でTableauなどのBIツールと接続してSQLクエリを受け付けられるようになります。
おおよそ3分ほどでワークスペースができました。ワークスペースを作成するだけでは課金は発生しません。実際にSparkクラスタを作成すると課金が発生します。
では実際に作成されたワークスペースを開きます。作成したワークスペース名をクリックしてから、 "Launch Workspace" をクリックすると作成されたワークスペースに自動的にリダイレクションされます。
左側のメニューバーから各種機能にアクセスすることができます。いくつかの機能はクラスタを作成しないと有効になりません。
クラスタの作成
では実際に Spark クラスターを作成してみましょう。左側メニューの "Clusters" ボタンをクリックします。
"+Create Cluster" ボタンを押すと、各種設定の入力画面に遷移します。今回は以下のように値をセットしてみました。
項目名 | 値 | 備考 |
---|---|---|
Cluster Type | Standard | |
Cluster Name | mkscluster | ここは任意の名前になります |
Databricks Runtime Version | 3.5 LTS(includes Apache Spark 2.2.1, Scala 2.11) | 2018年4月現在では最新の4.0, Spark 2.3.0 も利用できるようですが、今回はデフォルトの 3.5 LTS, Spark 2.2.1 にしてみました) |
Python Version | 3 | デフォルトは2ですが、データ分析の世界ではPython3を使用することが一般的ですので3にしました |
Driver Type | Same as Worker | Spark Driver(詳細はここでは割愛しますが、ジョブを投入する元ホストと思ってください)に割り当てるコア数、メモリ量を指定することができます。Sparkに詳しくない方はデフォルト値を選択しておけば無難でしょう |
Worker Type | Standard_DS3_v2 | ここは要件に応じて変更します。一般的にはDS3v2が有する14GBのメモリでほとんどのワークロードは効率的に処理することが可能です |
Min Workers, Max Workers, Enable Autoscaling | Min=2, Max=8, Enable Autoscaling=checked | 処理をオートスケールさせる場合の最小VM数、最大VM数、オートスケールの有効/無効を切り替えます。もしコストが気になるようであれば最大VM数を絞ります |
Auto Termination | checked(Auto Termination | クラスタの自動破棄)の有効/無効を切り替えます |
Terminate after | 120 seconds of inactivity | Auto Terminationの閾値に、アイドル秒数を指定します。ジョブの性格によっては時間を長くしてもいいかもしれません。後述しますがクラスタは迅速に起動するため、クラスタを常にライブにしておく必要はあまりありません |
Spark Config | 空欄 | ジョブ実行時の設定を追加する場合はここに記述します。 |
Tags | 初期値 | Azureのリソースに割り当てるタグを指定することができます |
Logging | 初期値 | クラスタのイベントログを保管するストレージを指定することができます |
全てセットしたら "Create Cluster" ボタンを押します。
5分程度でクラスタの作成が完了します
1つNotebookを作成してみる
クラスタが作成できると Jupyter Notebook を使用してプログラムを作成できるようになります。1つ作ってみましょう。左側のメニューバーの "Azure Databricks" をクリックしてトップ画面に戻り、左下の "New" - "Notebook" をクリックします。
できました。簡単なものですが少しコマンドを実行してみます。
日常的に使いそうなライブラリは既にあるようですね。
価格について
今回はここまでですが、最後に価格について触れておきましょう。Azure Databricksの価格体系はクラスタのVMそのものにかかる費用と、"DBU(Databricks Units)"の費用両方にかかります。詳細は価格に関するページを参照ください。概ねVMそのものの1.5倍ほどの料金になっています。価格を見比べる限り、HDInsightよりも少し高めに設定されているようです。
上記で記述した通り、Azure Databricksクラスタは Auto Termination の機能を持っているため、使用されなくなると自動的に Terminate されます。Azure的な用語でいうと、VMは停止ではなく、削除されます。使用していたストレージアカウントなどは残ります。費用を抑えるために積極的に使っていった方がよいでしょう。
用途としては、ETLのようなバッチ処理に使用するようなユースケースが向いているように思われます。逆にデータサイエンティストチームが共用するような、動かしっぱなしの用途には向かなさそうです。その場合には Data Science VM を使用した方がよいでしょう。
さいごに
簡単に Azure Databricks の内容を見てみました。最後に弊社の独自サービス、千京も Azure Databricks とかなり似た内容ですので、ご興味があればぜひ見てみてください。
Azure Databricksについてもっと知りたい方はぜひフィードバックをお願いします。今後の記事の作成の参考にいたします。
では!