HDInsightでSparkを使ってみる


2015年11月29日現在、AzureのHadoopサービスであるHDInsightはWindowベースのものしか無く、「うーん」という感じでしたが、一方、簡単に（sshトンネリング無しに）Zeppelinやjupyterが使えるということで、ならば、コンソールいらないな・・・と思い試して見ました。

##やりたいこと

* HDInsightでSparkの使い方を調べる
* Zeppelinを使ってみる
* jupyterを使ってみる
* Power BI（MSのBIツール）との連携を確認する

せっかくAzureなので、PowerBIと連携を確認してみます。

###参考

基本、下記の記事を参考にしました。最近のMSの記事はまとも。やっと開発者が書くようになったからでしょう。

* [HDInsightでのSpark](https://azure.microsoft.com/ja-jp/documentation/articles/hdinsight-apache-spark-zeppelin-notebook-jupyter-spark-sql/)
* [SparkとPowerBIとの連携](https://azure.microsoft.com/ja-jp/documentation/articles/hdinsight-apache-spark-use-bi-tools/)

##準備

[Azureのアカウントの取得](https://azure.microsoft.com/ja-jp/pricing/free-trial/)が必要ですが、省きます。
「Azureなんか使えるか！」っていう方はこの機会にどうぞ。

##Sparkクラスターの構築

Sparkクラスタの構築は簡単です。が、個人的には難が2つ。

* Windowsベースであること
* 他のサービスを標準で共存できない？こと（PowerShellとかで確認すると動くのかな？）

早くLinuxベースのが欲しい（Linuxはメールくれたら使わせてやる的なメッセージがあったので期待）。

![spark](http://www.bluecode.jp/qiita/spark/spark001.png)


createを押してしばらく待ちます。


##Sparkの利用


###Sparkクラスタの管理画面
20分くらいでプロビジョニングが完了します（Linuxと変わらない）。
作成したサービスを選択しURLをクリックするとsparkの画面に移動します（LinuxだとここでAmbariベースの管理画面に移動します）。


![spark](http://www.bluecode.jp/qiita/spark/spark002.png)


###Sparkの画面へ


いろいろメニューがりますが、Notebooksを選択します。

![spark](http://www.bluecode.jp/qiita/spark/spark003.png)


###Notebooks

標準でjubyterとZeppelinが利用できます。素晴らしい！Notebookとは新しい概念だが、使ってみればわかる。
まあ、Hueの高度版みたいな。

![spark](http://www.bluecode.jp/qiita/spark/spark004.png)

##Zeppelin


###Zeppelin TOP

ZeppelinのTop。なんとMacのSafariではおそらくJSのエラーか何かでConnectedになりませんでした！ChromeはOK。
いつもはChromeなので問題はりませんが。。。

![spark](http://www.bluecode.jp/qiita/spark/spark005.png)

###Notebookの作成

新しいNotebookを作成します。

![spark](http://www.bluecode.jp/qiita/spark/spark006.png)


###Notebookへのアクセス

作成したNotebookには、+Create New noteのメニューからアクセスします。。

![spark](http://www.bluecode.jp/qiita/spark/spark007.png)

###スクリプトを書く（テーブル定義）

標準で表示されているコンソール行に実行したスクリプトを書きます。今回は、[ここ](https://azure.microsoft.com/ja-jp/documentation/articles/hdinsight-apache-spark-zeppelin-notebook-jupyter-spark-sql/)のコードを利用させてもらいました。

テストデータを元にテーブルの定義をやります。

![spark](http://www.bluecode.jp/qiita/spark/spark008.png)


###スクリプトを書く（SparkSQLを書く）

次にSparkSQLを実行してみる。
いろいろな形式で結果を見ることができる。

Notebookはこのように分析のブロセス（コード）＋結果を保存しておける。今風。

![spark](http://www.bluecode.jp/qiita/spark/spark009.png)

##jupyter

###jupyter TOP

次にjubyter。基本的にZeppelinと概念は同じだが、その名の通りpythonを利用する。
グラフ表示とかはできない。新規Notebookを作成します。

![spark](http://www.bluecode.jp/qiita/spark/spark010.png)

Power BIとの連携の元データを作りたいので、[ここ](https://azure.microsoft.com/ja-jp/documentation/articles/

###Notebook

hdinsight-administer-use-management-portal/)を参考に進めます。
基本コピペ。Hive Tableとして保存しておくとPower BIからアクセスできるようです。

![spark](http://www.bluecode.jp/qiita/spark/spark011.png)

##Power BI


###Power BIサイトへのログイン

[Power BIのサイト](https://powerbi.microsoft.com/ja/)のアクセスし、アカウントを取得します。

![spark](http://www.bluecode.jp/qiita/spark/spark012.png)

###データ取得先の選択 1

Sparkにアクセスするには「データの取得」を選択します。普通はダッシュボードの左下にあるはずです。

![spark](http://www.bluecode.jp/qiita/spark/spark013.png)


###データ取得先の選択 2


データのインポートまたは接続からデータベースを選択します。

>どうやらフリー版ではSparkにアクセスできないようです。今回はProの60日無償期間というのを利用してみました。

![spark](http://www.bluecode.jp/qiita/spark/spark014.png)


###Sparkサーバの指定


最初に管理画面でみたURLを入力します。

![spark](http://www.bluecode.jp/qiita/spark/spark015.png)


###ID, PWの入力

クラスタ設定の時に入力したIDとPasswordを入力します。標準のIDはadminでした。

![spark](http://www.bluecode.jp/qiita/spark/spark016.png)


###読み込み完了

しばらく待つとデータセットにsparkが読み込まれ？ます。

![spark](http://www.bluecode.jp/qiita/spark/spark017.png)


###読み込みテーブルの確認


右ペインのフィールドにテーブルが読み込まれています。

![spark](http://www.bluecode.jp/qiita/spark/spark018.png)


###レポートの作成


可視化してみます。

![spark](http://www.bluecode.jp/qiita/spark/spark019.png)

一通り試せました。

##その他

###Webアプリケーションからクエリを投げたい

いくつか方法があるようですが、まだ調べきれていません。誰か教えて。

###パフォーマンスチェック

自分のデータでSparkのパフォーマンスチェックをしてみたい。特にHive, Impalaとの比較。