2
0

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.

Cortana Intelligence Suiteを構築(第4回)- ビッグデータをAzure Data Lake Analyticsでクエリ処理してみる

Last updated at Posted at 2016-10-25

#背景
従来のデータ分析の世界では、一般的に、データウェアハウス等で加工(スキーマを定義)した状態のデータを利用し、キューブなどを構築するといった流れでデータ分析をしてきました。そして近年、ビッグデータを取り扱うようになり、必ず指定されたスキーマでデータウェアハウスに蓄積するアプローチではなく、生データから都度好きなデータを抽出するといったアプローチの方法も出てきました。Microsoft Azureでは、この後者のアプローチをAzure Data Lake、Azure HDInsightといったサービスで提供しています。
今回は、Azure Data Lakeの使い方と、独自言語のU-SQLを活用し、[「Cortana Intelligence Suiteを構築(第3回)」](URL http://qiita.com/taiki_yoshida/items/58cd5af970e24f2453de)までで構築し、データを蓄積してきた、Azure BLOBストレージのデータを分析してみます。

#事前に準備するもの

#設定手順

##Azure Data Lake Analyticsの準備
Azure Data Lake Analyticsを利用するために、まずはAzureポータルからAzure Data Lake Analyticsをデプロイする必要があります。

  1. 「新規」>「Intelligence + analytics」>「Data Lake Analytics」の順にクリックします。
    image

  2. 各項目を記入していきます。記入したら、「作成」をクリックします。
    現在、場所は米国東部2のリージョンのみ選択できます。
    価格レベルは従量課金制なので、クエリを実行した分のみ課金される仕組みとなっています。
    image

  3. デプロイが開始されます。1~3分ほどで完了します。
    デプロイが完了すると、以下のように表示されます。
    image

  4. 「その他サービス」>「データ + 分析」>「Data Lake Analytics」の順にクリックします。
    image

  5. (2)で記入した名前のData Lake Analyticsをクリックします。
    image

  6. これで、Azure Data Lake Analyticsの準備が整いました。
    image

##分析するための下準備
Data Lake Analyticsを利用するためには、U-SQLという新しい言語でクエリを作成します。
ざっくり言うと、普通のSQL言語のようでC#も含められてしまう、パワフルなクエリ言語です。ここではあまり詳しく触れませんが、必要最低限のところまでご紹介します。
今回は、JSON形式の生ファイルを読み込んで、それをクエリで集約したものをSQL Databaseへ書き込んでしまうということを実施してみようと思います。ですが、Azureポータルの画面でジョブを作成する画面からは、直接JSON形式のファイルは読み込めないんです。残念。
ということで、JSONを扱うためのアセンブリをVisual Studioから登録する流れとなります。

###アセンブリの登録
JSONを取り扱うには、事前にNewtosoft.Json.dll等のアセンブリーをAzure Data Lake上へ登録しておく必要があります。通常のC#プロジェクトなどとは違い、NuGetは利用できません。そのため、Newtonsoft.Json.dllをビルドして、ビルドしたものをAzure Data Lakeへアップロードします。

  1. Githubから[USQLのレポジトリ](URL https://github.com/Azure/usql)をダウンロードしておきましょう。ここには、JSONから読み込むためのサンプルコードなどが用意されており、非常に便利です。

  2. ダウンロードしたフォルダ内の、Examples/DataFormats/Microsoft.Analytics.Samples.Formatsにあるソリューションファイルを開きます。

  3. 開いたら、そのままビルドするだけです。
    image

  4. クラウドエクスプローラーから、Data Lake Analyticsを開き、Databases > master > Assembliesを右クリックし、「アセンブリの登録」をクリックします。
    image

  5. 「Load assembly from path」の「…」をクリックします。
    image

  6. 「Local」を選択し、「…」をクリックします。ポップアップで、先ほど(3)でビルドしたdllファイルを選択します。
    image

  7. 「Input Status」が「Ready」になっていれば、登録準備が完了です。
    image

  8. 一時的にファイルストレージを利用するといったメッセージが表示されます。ここは「Yes」を選択しましょう。
    image

  9. ステップ5~8までを、Microsoft.Analytics.Samples.Formats.dllに対しても行います。

###ストレージアカウントの関連付け
Azure Data Lake AnalyticsでAzureストレージアカウントを利用するために、関連付けをしておく必要があります。
それをすることで、アドレス形式で、Azureストレージアカウントをデータ元として指定できるようになります。

  1. Data Lake AnalyticsをAzureポータルから開き、「データソース」>「データソースの追加」をクリックします。
    image

  2. ストレージの種類を「Azure Storage」にし、メソッドの選択は「アカウントの選択」をクリックし、Azure Storageでは関連付けしたいストレージアカウントを指定します。あとは「追加」をクリックするだけです。
    image

  3. 正しく関連付けできたかどうかは、「データエクスプローラー」から、確認することができます。
    image

##クエリの作成

  1. 別のVisual Studioを開き、新しいU-SQLプロジェクトを作成します。
    image

  2. 以下のコードを利用します。 「wasb://」のアドレスは、事前に関連付けしたAzureストレージアカウントのアドレスです。{*}と入力することで、フォルダ内/ファイル名すべてを選択したことを意味します。

CREATE ASSEMBLY IF NOT EXISTS [Newtonsoft.Json] FROM "assemblies/Newtonsoft.Json.dll";
CREATE ASSEMBLY IF NOT EXISTS [Microsoft.Analytics.Samples.Formats] FROM "assemblies/Microsoft.Analytics.Samples.Formats.dll";

REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats]; 

//USE DATABASE [traindetail];

@json = 
   EXTRACT jsonString string FROM @"wasb://tyqiita@tyqiita/logs/{*}/{*}/{*}.json" USING Extractors.Text(delimiter:'\b', quoting:false);

@jsonify = SELECT Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(jsonString) AS rec FROM @json;

@columnized = SELECT 
           DateTime.Parse(rec["dc:date"]) AS date,
           rec["odpt:railway"] AS railway,
           rec["odpt:trainNumber"] AS trainnumber,
           Double.Parse((rec["odpt:delay"] ?? "0")) AS delay,
           rec["odpt:startingStation"] AS startingstation,
           rec["odpt:terminalStation"] AS terminalstation, 
           rec["odpt:fromStation"] AS fromstation, 
           rec["odpt:toStation"] AS tostation,
           rec["odpt:railDirection"] AS raildirection 
   FROM @jsonify;

OUTPUT @columnized
TO @"wasb://tyqiita@tyqiita/output/result.txt"
USING Outputters.Text();

##クエリを実行
Data Lake Analyticsでの実行処理を「ジョブ」と言います。
Visual Studioからジョブを発行することで、ジョブがData Lake Analytics内で実行されるようなイメージです。

  1. Visual Studioのソリューションエクスプローラーから、作成したUSQLを右クリックし、「Submit Script」をクリックします。
    image

  2. Submit Jobの画面が表示されます。ここで、Job Nameをわかりやすい名前に変更します。複数のData Lake Analyticsを作成している場合は、ジョブを実行するData Lake Analyticsのアカウントを選びます。Parallelismとは、この処理の並列実行数のことです。多ければ多いほど、並列で処理されるため、早くはなりますが、データ量が少ない場合は並列実行のためのオーバーヘッド(準備処理)の方が時間がかかるため、あまり差は感じられません。
    image

  3. 実行開始されると、以下のように進捗状況と、詳細のステップが視覚的に確認できます。
    image

  4. 画面左側の進捗が「Finalizing」まで進むと、完了したことを意味します。
    image

  5. 出力されたデータは、AzureポータルでData Lake Analyticsへアクセスし、「データエクスプローラー」または、「Microsoft Azure Storage Explorer」から確認/ダウンロードが可能です。
    image
    image

#リンク集
著者が作成する際に、参考にしたリンクです:
http://sqlblog.com/blogs/jorg_klein/archive/2016/06/27/use-adlcopy-to-generate-u-sql-jobs-that-copy-data-between-azure-blob-storage-and-azure-data-lake-store.aspx
https://azure.microsoft.com/en-us/documentation/articles/data-lake-analytics-manage-use-portal/
https://azure.microsoft.com/en-us/documentation/articles/data-lake-store-copy-data-azure-storage-blob/
http://www.rcloudnetwork.com/the-cloud-in-the-news/creating-big-data-pipelines-using-azure-data-lake-and-azure-data-factory/
https://github.com/Azure/usql
https://blogs.msdn.microsoft.com/robinlester/2016/01/04/an-introduction-to-u-sql-in-azure-data-lake/

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?