Azure Antenna で開催されたData Lakeワークショップで、Azure Data Lakeに触れてきました。
触ってみた感想や手順等を残しておきます。
Azure Data Lakeってなに?
分析ツールである「Azure Data Lake Analytics」と、データ格納領域の「Azure Data Lake Store」から構成されます。
Azure Data Lake Analytics
- サーバレスの分析エンジン
- 親しみのあるSQLに近いU-SQL言語
- 柔軟なスケールで大量データ処理が得意
- ジョブ単位の課金
Azure Data Lake Store
- どんなフォーマットのデータでも無制限に格納できるストレージ
- 分散型で分散処理パフォーマンスが高い
- OSSとの親和性
ざっくり概要をまとめてみる
その名のとおり、ビッグデータにおけるデータレイクとしての活用が期待されるサービスですね。
Data Lake Storeにデータを溜めて、Data Lake Analyticsでクエリ投げて分析するといった感じです。
分析するか分からないけどとりあえずデータを入れておこう、分析が必要なら必要なデータだけクエリ発行して活用しよう。
という使い方になります。
Data Lake Storeはどんなフォーマットのデータでも格納できるというのがキモで、IISのログといったフラットファイルだけでなく、画像データなんかも格納できました。
ワークショップでは、画像データをData Lake Analytic + Face APIで、人物を検出して結果を出力するということをやってみました。
AWSではS3をデータレイクとして活用しますが、AzureではData Lake Storeを使うということのようですね。
RDBMSと違って、頻繁な読み書きや細かいデータの参照や書き込みには不向きです。
大量のデータに対して分析することに向いています。
グラフにしたりといった可視化の機能は持っていないので、そこはPower BIを活用することになります。
Power BIからData Lakeに直接接続してクエリ結果を可視化することができます。
現時点ではPower BIからクエリ投げることはできませんが、そのうち対応するんじゃないかとのこと。
スケジューリング機能は持っていないので、定期的にクエリ投げたいといった場合は、Automationを使ったり、Data Factoryのスケジューリング機能で実現する必要があります。
あと現時点で日本リージョンにはきていません。
Data Lake Storeにデータを格納するには?
- Azure Portal
ワークショップではAzure Portalからデータをアップロードしました。 こんな感じで、ローカルPCのファイルを選んでData Lake Storeにアップロードできます。
他にもPowerShell,CLI,SQL Database,SQL Data Warehouse,Event Hub,Data Factory等があるようです。
Data Factoryが使えるので、オンプレDBでもRedshiftでもS3でも、様々なデータをData Lakeに集約することができそうです。
また、Event HubのCapture機能でData Lake Storeに直接データを保存できるので、ストリーミングデータも対応できるようです。
U-SQLで分析してみた
インプットデータ準備
クエリ実行
- U-SQLを書きます。ここでは、IISログをスペース区切りで分割し、日付毎に、ヒット数、送信バイト、受信バイトを集計しています。
@log =
EXTRACT
date string,
time string,
client_ip string,
username string,
server_ip string,
port int,
method string,
stem string,
query string,
status string,
server_bytes int,
client_bytes int,
time_taken int,
user_agent string,
referrer string
FROM "/iislogs/2008-01.txt"
USING Extractors.Text(' ', silent:true);
@dailysummary =
SELECT
date,
COUNT(*) AS hits,
SUM(server_bytes) AS bytes_sent,
SUM(client_bytes) AS bytes_received
FROM @log
GROUP BY date;
OUTPUT @dailysummary
TO "/output/04_Daily_summary.csv"
ORDER BY date
USING Outputters.Csv(outputHeader:true);
まとめ
今回の例のようなログデータだけであれば、Log Analyticsでも同様のことができますが、Data Lakeはどんなデータでも扱えるというのが強みですね。
少量のデータだとクエリ実行時間が長いように感じましたが、データが増えれば増えるほど処理の早さに気付くそうです。大容量データに向いているとのこと。
日本リージョンでリリースされたらより流行りそうなサービスですね。