LoginSignup
11
9

More than 5 years have passed since last update.

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にアップロードできます。

image.png

他にも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で分析してみた

インプットデータ準備

  • IISのログをAzure PortalからData Lake Storeにアップロードします。
  • こんな感じのログ数万行です。
    image.png

クエリ実行

  • 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);
  • クエリを実行し完了されるまで待ちます。
    image.png

  • こんな感じで集計されました。
    image.png

まとめ

今回の例のようなログデータだけであれば、Log Analyticsでも同様のことができますが、Data Lakeはどんなデータでも扱えるというのが強みですね。
少量のデータだとクエリ実行時間が長いように感じましたが、データが増えれば増えるほど処理の早さに気付くそうです。大容量データに向いているとのこと。
日本リージョンでリリースされたらより流行りそうなサービスですね。

11
9
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
11
9