Azure Databricksは高速で処理できる、Apache Spackベースの分析プラットフォームです。
様々なデータソースからデータを読み取って、Sparkで変換や分析ができます。
Sparkクラスターは自動スケーリングの設定や、一定時間アイドル状態だと終了するといった設定もでき、無駄なコストも省けます。
##クラスターとは・・・
Notebook とジョブを実行するための計算リソースと構成のセットです。
##Apache Sparkとは・・・
莫大なデータに対して分散処理をおこなうオープンソースのフレームワークで、大規模な分析ソリューションでは必ず検討されています。
分散処理でいうとHadoopがありますすが、もちろんSparkとの違いがあります。
フレームワーク | 言語 | 処理方法 |
---|---|---|
Spark | Scala | メモリにデータ保存(インメモリ) |
Hadoop | Java | 入出力のたびにストレージアクセス(MapResuce) |
Sparkはインメモリなので高速に処理できるので頻繁に入出力が発生する場合に力を発揮します。
##使いどころ
Azureソリューションは大きく分けて4つのフェーズに分かれますが、
- 取込み
- 保管
- 準備とトレーニング
- モデル化と提供
Databricksは「準備とトレーニング」フェーズで登場します。
データを抽出(Extract)して変換(Transform)して格納(Load)します。
俗に言う「ETL」です。
※DatabricksはETLの類になります。
##コンポーネント
- Spack SQL + DataFrames
構造化データを処理するSpark SQLと、分散型コレクションのデータフレームです。 - Streaming
リアルタイムのデータ処理と分析です。 - MLlib
Machine Learningライブラリです。 - GraphX
グラフおよびグラフ計算です。 - Spack Core API
下記の言語をサポートしています。- R
- SQL
- Python
- Scala
- Java
私はPythonを少し触れるのでPythonで書けるのは良いなーと思っていますが、処理速度が遅いことが課題に挙がっているようです。
※Scalaのほうが約10倍ほど速いそうです。
もともとSparkはScalaで書かれているので、Scalaを使うべきなのか悩みどころです。
サイエンティストはライブラリの豊富さからもPythonに馴染みがある人が多いと思いますが、実際のところPythonとScala、どっちを使うべきなんでしょう?
速度の観点からいうとScalaのほうが良さそうですが、扱いやすさだとPythonのほうが強そうです。(PySparkの登場でPythonもSparkにおいて盛り上がっているようです)
##良さそうなところ
Databricksには対話式で実行できるNotebookがあります。(jupyter notebookのようなもの)
このNotebookの特徴は複数の言語を使えるところだと思います。
「%scala」って頭に書けばScalaでコードが書けます。
私はPythonで形態素解析して文章の特徴を調べたりして遊んでいますが、もちろんすべてPythonで書いています。
データ量も大したことないので遅さに不満を感じていませんが、これがとてつもないデータ量だとしたらきっとストレスに感じてしまうかもしれません。
上で述べたとおり、分析に関して言えばPythonだと思いますが、処理速度はScalaが優勢です。
こんな時、たとえば形態素解析だけScalaに任すことができれば、形態素解析処理時間が短縮されて、結果、全体の処理時間も大幅に短縮できるかもしれません。
Notebookで作成した予測モデルをバッチスクリプトとして定期実行させることができるのも大変魅力的です。
しかも、Sparkクラスターのスペックなども設定できるので、処理実行時間に縛りがある場合などは高性能のSparkクラスターを設定して利用すれば実現できそうです。
ほかにも沢山の機能があり一度では伝えきれないので、また投稿しようと思います。
##実際にDatabricksを使用してみました(Scala編)
下記に、Databricksの作成からデータウェアハウスへの格納までの手順を備忘録としてまとめました。
【備忘録】Azure Databricksを使ってDataWarehouseにデータを書き出してみる