SlideShare a Scribd company logo
#azurejp
https://www.facebook.com/dahatake/
https://twitter.com/dahatake/
https://github.com/dahatake/
https://daiyuhatakeyama.wordpress.com/
https://www.slideshare.net/dahatake/
“Volume”
膨大
“Velocity”
スピード
“Variety”
多様性
社内の
資産
サーチや
ソーシャル
オープン
データ
コラボ可視化
Inbound
Data
Buffered
Ingest
(message bus)
Event 処理 Logic
Event Decoration
Spooling/Archiving
Hot
Store
Analytical
Store
Curation
Dashboards/Reports
Exploration
Interactive
Data Movement
/ Sync
取り込み
Modern Data Lifecycle
処理 保存 利用
キュレーション
取り込み
Modern Data Lifecycle
処理 保存 利用
Event Hubs
IoT Hubs
Service Bus
Kafka
HDInsight
ADLA
Storm
Spark
Stream Analytics
ADLS
Azure Storage
Azure SQL DB
Azure SQL DW
ADLS
Azure DW
Azure SQL DB
Hbase
Cassandra
Azure Storage
Power BI
キュレーション
Azure Data Factory Azure ML
Dashboards InteractiveExploration
API も考慮する必要あり
即、学べる
https://start.cortanaanalytics.com/
HDInsight Analytics Store
Hadoop as a Services
Big Data Query
as a Services
容量無制限
Raw Data
アクセスコントロー
ル
Azure Data Lake service
無限にデータをストア・管理
Row Data を保存
高スループット、低いレイテンシの分析ジョ
ブ
セキュリティ、アクセスコントロール Azure Data Lake store
HDInsight & Azure Data Lake Analytics
https://azure.microsoft.com/ja-jp/regions/services/#
ADL Analytics Account
Links to ADL Stores
ADL Store Account
(the default one)
Job Queue
キーの設置:
- Max Concurrent Jobs
- Max ADLUs per Job
- Max Queue Length
Links to Azure Blob Stores
U-SQL Catalog
Metadata
U-SQL Catalog Data
ADLAU = Azure Data Lake Analytics
Unit
Azure Datalake 大全
ON PREMISES CLOUD
Massive Archive
On Prem HDFS
インポート
Active Incoming
Data
継続更新
“Landing Zone”
Data Lake Store
AzCopy
でコピー
Data Lake
Store
Data Lake
Analytics
永続ストア箇所への移動
と
ジョブ実行により作成さ
れた
構造化データセットの保
存
DW (many
instances)
構造化データの作成。
CONSUMPTION
Machine
Learning
機械学習の実行、検証
Web Portals
Mobile Apps
Power BI
実験・検証
A/B テストや
顧客行動の変化の追跡
Jupyter
Data Science
Notebooks
HDInsight Analytics Store
Hadoop as a Services
Big Data Query
as a Services
容量無制限
Raw Data
アクセスコントロー
ル
すぐに使えるクラウド上の Hadoop / Spark です
 日本では東西両方のリージョンで利用可能
 豊富なクラスタータイプ
 Hadoop
 2.6.0 / 2.7.0 / 2.7.1
 HBase
 0.98.4 / 1.1.2
 Storm
 0.9.3 / 0.10.0
 Spark (プレビュー)
 1.5.2 / 1.6.0
 R Server on Spark (プレビュー)
 1.6.0
※ Premium プラン専用
Hortonworks と協業し、Windows 環境で Hadoop を提供します
 元々 Java で書かれたオープンソースプロジェクトである
Hadoop ですが、 Windows 環境でスムーズに動かすため
には
いくつか工夫が必要でした
 Microsoft は Hortonworks 社と協業し、 Hadoop の
Windows 環境への移植と最適化を行っています
 Hortonworks は Yahoo! で Apache Hadoop の
開発に携わっていたチームが独立して設立された企業で
す
 “Hortonworks Data Platform” (HDP) という
Hadoop ディストリビューションを開発しており、
これが HDInsight のコア部分です
http://jp.hortonworks.com/hdp/
HDFS
分散ファイルシステム“HDFS” (Hadoop Distributed File System)
 複数のコンピューターを束ねて、
一つの仮想的なファイルシステムを提供
 Hadoop クラスタに属する全ての
ノードが同じ名前空間を共有
 各ファイルは 64 MB ~ 256 MB 程度の
ブロックに分割されて、複数ノードに分散
 ブロックサイズが大きいのは、
シーケンシャルアクセスに特化している
ため
 各断片は最低 3 ノードに複製され、
ノード障害への耐性を持つ
 一つのファイルの複数の部分を、複数の
コンピューターで同時に処理することで、
処理を高速化することができる
断片 1 断片 2 断片 3 断片 4
断片 1 断片 2 断片 3 断片 4
ファイル 1 断片 1 断片 2 断片 3 断片 4
ファイル 4 断片 1 断片 2 断片 3 断片 4
分散プログラミングモデル “MapReduce”
2013-08-26 23:59:03 W3SVC1 192.168.0.1 GET /…
2013-08-26 23:59:05 W3SVC1 192.168.0.1 GET /…
2013-08-26 23:59:25 W3SVC1 192.168.0.1 GET /…
2013-08-27 00:01:02 W3SVC1 192.168.0.1 GET /…
2013-08-27 00:02:04 W3SVC1 192.168.0.1 GET /…
 名前は一見難しげですが、実際には単純です
(だからこそスケーラビリティがあります)
 例えば右のような Web のアクセスログがあるとして、
 伝統的なテキスト処理ツールによる集計はこのようなものですが、
$ grep /Login.aspx access_log | sort | uniq –c > output.txt
対象ファイルの全行を頭から舐めて
何らかの処理をする(この場合は検索)
中間結果を集計の
ためにソートする
ソートされたデータを
数え上げて結果を得る
MapReduce はこういった処理をクラスター上で並列分散実行する仕組みです
Map Reduce
Mapper
Reducer
 入力ファイルの1行が value に渡されてくる
(単なる文字列として!)
 左の例は、単語毎の出現回数を数える Map 処理。
StringTokenizerを使って自分で文字列を単語単位に
分解し、「いま、”・・・”という単語があった」と
記録(OutputCollectorに出力)していく
 「Hadoopは非構造化データの処理に向く」というのは、
「単なる文字列を全部自分で処理する」ということ!
 こちらは Reduce 処理
 Map 処理の出力は、Hadoopによってキー毎に集約され、
reduce メソッドに渡される。イメージとしては、
(“単語1”: [1,1,1])
(“単語2”: [1,1])
のような「キー:値」形式のデータ
 「“単語1”は値が3つ入っているので3回出現した」、
という感じで数えていく
そもそも別物であり「データ量が多いならHadoop」というわけでもありません
 Hadoopの根幹は
「フラットファイルに格納された大量のデータを
頭から順次走査して何らかの処理を行い、
結果をファイルへ出力する並列分散バッチ処理基
盤」
と考えておけばあまり間違っていません
 処理の対象は「データベース」ではなく「ファイル」で
す。
当然、スキーマやテーブルという概念はありません
 ということは、インデックスという考え方もありません。
大量のデータの中から特定の部分に素早くシークして
データを取り出すような操作は苦手です
 逆に得意なのは、シーケンシャルな全件処理です
 ランダムアクセスよりシーケンシャルアクセス
 レイテンシより、スループット優先
 インタラクティブな処理より、バッチ処理が得意
RDBMS
想定する
データ操作
小さなデータの
ランダムな参照、更
新
大きなデータの
挿入・参照。
更新はない
レスポンスタイ
ム
速い 遅い
拡張性の方向 スケールアップ スケールアウト
データ構造 構造化データ 準構造化データ
「Hadoop徹底入門 第2版 オープンソース分散処理環境の構築 」より
http://www.amazon.co.jp/dp/479812964X
Hive, Impala, Presto...
 ちょっとした検索処理の度に、毎回Javaプログラムを書くのはさすがに面倒です
 そこで、SQL(的な)クエリでHadoopに対する処理を行うことのできる関連プロジェクトがいくつかあります
 おそらく一番歴史が長くて有名なのが、Facebookによって開発された”Hive”です。(https://hive.apache.org/)
 “Hive QL”というSQL的な言語でクエリを記述すると、MapReduce ジョブに変換して実行してくれます
2013-08-26 23:59:03 W3SVC1 192.168.0.1 GET /…
2013-08-26 23:59:05 W3SVC1 192.168.0.1 GET /…
2013-08-26 23:59:25 W3SVC1 192.168.0.1 GET /…
2013-08-27 00:01:02 W3SVC1 192.168.0.1 GET /…
2013-08-27 00:02:04 W3SVC1 192.168.0.1 GET /…
こういうテキストファイルを
date time sitename s-ip method uri
2013-08-26 23:59:03 W3SVC1 192.168.0.1 GET /...
2013-08-26 23:59:05 W3SVC1 192.168.0.1 GET /...
2013-08-26 23:59:25 W3SVC1 192.168.0.1 GET /...
2013-08-26 00:01:02 W3SVC1 192.168.0.1 GET /...
2013-08-26 00:02:04 W3SVC1 192.168.0.1 GET /...
こんなテーブルだと思ってクエリを投げられます
 Hive は非常に便利で広く使われていますが、「基本的にはバッチ処理、素早いレスポンスは期待できない」という点は変
わっていません
 その欠点を補うべく、Cloudera の Impala, Facebook の Presto といった新しいプロジェクトが生まれています
Hadoop Common
Hadoop HDFS
Hadoop MapReduce
主要な関連プロジェクト
Hive
Ambari
HBase
Mahout
Azure Datalake 大全
HDInsight
その他の
Hadoop on Azure
Windows 版
Linux 版
CDH
(Cloudera)
HDP
(Hortonworks)
“WASB”
ブロック BLOB を
ダイレクトに使う
“HDFS on BLOB”
Azure 仮想マシンの
データディスクを
束ねて HDFS を構成
http://jp.hortonworks.com/wp-content/uploads/2013/05/H1H2Tez.png
 Twitter 分析を行っていた BackType 社が開発
 Twitter が BackType を買収したことで
Twitter から OSS として公開される
 その後、2014年9月に
ASFのトップレベル プロジェクトとなる
スケーラブルな分散 CEP 基盤
 Storm 専用のクラスターを
作成可能です。
 2015年2月にGA済み。
 HDInsight のバージョンは
3.1 と 3.2 を選択可能
ですが、3.2をオススメ
(理由は後述)
http://azure.microsoft.com/ja-jp/updates/general-availability-apache-storm-on-hdinsight/
大量の
蓄積
された
今まさに
発生中の
データに
対する
バッチ
リアル
タイム
処理
ログファイル
センサ
データ
モバイル
デバイス HDInsight
Storm
on
HDInsight
Azure
Event Hubs
Power BI
ダッシュボード
Lightning-fast cluster computing
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
ヘッドノードに
SSH でログイン
Livy による
REST API を
呼び出す
使いやすい
Jupyter Notebook
でお手軽に
項目 2013 年の記録
Hadoop
Spark 100 TB
(2014年)
Spark 1 PB
(2014年)
データ サイズ 102.5TB 100 TB 1 PB (≒1000 TB)
処理時間 72 分 23 分 234 分
ノード数 2100 206 190
コア数 50,400 6,592 6,080
0
20
40
60
80
100
120
1 2
Series1
Azure Datalake 大全
スケールに制限なし
全てのデータの種類を
そのネイティブ フォーマットで保
存
クラウド上でのWebHDFS
企業利用のためのセキュリティ、
アクセス制御、暗号化など
分析用に最適化
Azure Data Lake
Store
Big Data 分析のための
ハイパースケールな
データリポジトリ
Map reduce
Hbase
トランザクショ
ン
HDFS アプリケーションHive クエリ
Azure HDInsight
Hadoop WebHDFS クライアント
Hadoop WebHDFS クライアント
WebHDFS
エンドポイント
WebHDFS
REST API
WebHDFS
REST API
ADL Store file ADL Store file ADL Store file ADL Store fileADL Store file
Azure Data Lake Store
Local
ADL Store
 Azure Portal
 Azure PowerShell
 Azure CLI
 Data Lake Tools for Visual Studio
 Azure Data Factory
 AdlCopy ツール
Azure Stream Analytics
Azure HDInsight Storm
Azure Data Factory
Apache Sqoop
 Apache DistCp
 Azure Data Factory
 AdlCopy ツール
個々のファイルとディレクトリは、
オーナーとグループに紐づく
ファイル、ディレクトリは、オー
ナー、グループのメンバー、他の
ユーザーに対して、
read(r), write(w), execute(x)の
パーミッションを持つ
きめ細かなACLs(アクセス管理リス
ト)のルールにより、ユーザー名や
グループ名を
指定して管理ができる
Azure Data Lake Store file
…Block 1 Block 2 Block 2
Backend Storage
Data node Data node Data node Data node Data nodeData node
Block Block Block Block Block Block
Azure Data Lake Store Azure BLOB ストレージ
目的
ビッグ データ分析ワークロードに
最適化されたストレージ
さまざまなストレージ シナリオに対応する
汎用オブジェクト ストア
ユース ケース
バッチ、対話型、ストリーミング分析、
および機械学習データ
(ログ ファイル、IoT データ、
クリック ストリーム、大規模なデータセット等)
あらゆる種類のテキスト データまたは
バイナリ データ
(アプリケーション バックエンド、
バックアップ データ、ストリーミング用
メディア ストレージ、汎用データなど)
Structure 階層型ファイル システム フラットな名前空間を使用するオブジェクト ストア
サーバー側 API WebHDFS 互換の REST API Azure BLOB ストレージ REST API
データ操作 - 承認
POSIX アクセス制御リスト (ACL)。
Azure Active Directory ID に基づく ACL :
ファイルおよびフォルダー レベルで設定可能。
アカウントレベルの承認:アカウント アクセス キー
アカウント、コンテナー、BLOB の承認:Shared
Access Signature キー
データ操作 - 認証 Azure Active Directory ID
共有シークレット (アカウント アクセス キーと
Shared Access Signature キー)
サイズ制限
アカウント サイズ、ファイル サイズ、
ファイル数に制限なし
あり
(https://docs.microsoft.com/ja-jp/azure/azure-
subscription-service-limits#storage-limits)
AdlCopy /Source <Blob source> /Dest <ADLS destination>
/SourceKey <Key for Blob account> /Account <ADLA account>
/Units <Number of Analytics units>
hadoop distcp
wasb://<container_name>@<storage_account_name>.blob.core.windows.net/example/data/gutenberg
adl://<data_lake_store_account>.azuredatalakestore.net:443/myfolder
sqoop-import --connect "jdbc:sqlserver://<sql-database-server-name>.database
.windows.net:1433;username=<username>@<sql-database-server-name>;password=
<password>;database=<sql-database-name>“ --table Table1 --target-dir adl://
<data-lake-store-name>.azuredatalakestore.net/Sqoop/SqoopImportTable1
Azure Datalake 大全
スケールに制限なし
U-SQL, SQLのメリットにC#のパワーを加えた新
しい言語
Data Lake Store に最適化
Azure データサービスへの FEDERATED QUERY
企業利用のためのセキュリティ、
アクセス制御、暗号化など
ジョブ単位での課金とスケール設定
Azure Data Lake
Analytics
全てのどんなサイズのデータ
でも処理できる
Apache YARNベースの
分析サービス
HDInsight
Java, Eclipse, Hive, etc.
フルマネージド の
Hadoop クラスタ
Data Lake Analytics
C#, SQL & PowerShell
フルマネージド の
分散管理処理クラスタ
DryAd ベース
U-SQL
ジョブ
ストレージ
ADL
Analytics
サービス
1
Azure
ポータルへ
ログイン
ADL Analytics ア
カウントを作成2
3
U-SQL
スクリプトを書き、
ADL Analytics ア
カウントへ
サブミット
4
U-SQL ジョブが
データセットを
読み書き
• ADL Store
• Azure Storage Blob
• …
Azure Datalake 大全
U-SQL
Query
Result
Query
Azure
Storage Blobs
Azure SQL
in VMs
Azure
SQL DB
Azure Data
Lake Analytics
Azure Datalake 大全
Management
Operations
Java C++.NET Node.js
Data
Operations WebHDFS Client LibWebHDFS
Management
Operations
Java C++.NET Node.js
U-SQL
Extensibility
Management
Data Lake Analytics アカウント
Jobs
U-SQL job
Catalog
カタログ(メタデータ)
Management
Data Lake Store アカウント
File System
Upload, download, list, delete, rename,
append
(WebHDFS)
Analytics Store
Azure Active Directory
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
#azurejp
#azurejp
string subscriptionId = "83daeeec-f16c-47f8-9dc4-6ff1ebf9feb3";
var adlaClient = new DataLakeAnalyticsAccountManagementClient(tokenCreds);
adlaClient.SubscriptionId = subscriptionId;
#azurejp
多くの SQL & .NET DEVELOPERS
宣言型言語の SQL と
逐次実行型である C# のパワーを融合
構造化、一部構造化、非構造化データの融合
全てのデータに分散クエリの実施
U-SQL
Big Data のための新しい言語
#azurejp
@rows =
EXTRACT
name string,
id int
FROM “/data.csv”
USING Extractors.Csv( );
OUTPUT @rows
TO “/output.csv”
USING Outputters.Csv();
Rowsets
EXTRACT for files
OUTPUT
Schema
Types
Inputs & Outputs
Keywords are UPPERCASE
#azurejp
REFERENCE ASSEMBLY WebLogExtASM;
@rs =
EXTRACT
UserID string,
Start DateTime,
End DateTime,
Region string,
SitesVisited string,
PagesVisited string
FROM "swebhdfs://Logs/WebLogRecords.csv"
USING WebLogExtractor ();
@result = SELECT UserID,
(End.Subtract(Start)).TotalSeconds AS Duration
FROM @rs ORDER BY Duration DESC FETCH 10;
OUTPUT @result TO "swebhdfs://Logs/Results/top10.txt"
USING Outputter.Tsv();
• 型定義は C# の型定義と同じ
• データをファイルから抽出・読
み込み
するときに、スキーマを定義
Data Lake Store のファイ
ル独自形式を解析するカスタム
関数
C# の関数
行セット:
(中間テーブ
ルの概念に近
い)
TSV形式で読み取る関数
DECLARE @endDate DateTime = DateTime.Now;
DECLARE @startDate DateTime = @endDate.AddDays(-7);
@orders =
EXTRACT
OrderId int,
Customer string,
Date DateTime,
Amount float
FROM "/input/orders.txt"
USING Extractors.Tsv();
@orders = SELECT * FROM @orders
WHERE Date >= startDate AND Date <= endDate;
@orders = SELECT * FROM @orders
WHERE Customer.Contains(“Contoso”);
OUTPUT @orders
TO "/output/output.txt"
USING Outputters.Tsv();
U-SQL
Basics
(1) DECLARE C# の式で変数宣言
(2) EXTRACT ファイル読み込み時に
スキーマを決定し、結果を RowSet
に
(3) RowSet 式を使ってデータを再定
義
(4) OUTPUT データをファイルへ出
力
1
2
3
4
CREATE ASSEMBLY OrdersDB.SampleDotNetCode
FROM @"/Assemblies/Helpers.dll";
REFERENCE ASSEMBLY OrdersDB.Helpers;
@rows =
SELECT
OrdersDB.Helpers.Normalize(Customer) AS Customer,
Amount AS Amount
FROM @orders;
@rows =
PROCESS @rows
PRODUCE OrderId string, FraudDetectionScore double
USING new OrdersDB.Detection.FraudAnalyzer();
OUTPUT @rows
TO "/output/output.dat"
USING OrdersDB.CustomOutputter();
U-SQL
.NET Code 利用
(1) CREATE ASSEMBLY アセンブ
リーをU-SQL Catalog へ登録
(2) REFERENCE ASSEMBLY アセン
ブリーへの参照宣言
(3) U-SQL 式の中で、C# メソッドの
呼び出し
(4) PROCESS User Defined Operator
を使って、行ごとの処理を実行
(5) OUTPUT 独自のデータ形式で出
力
1
2
3
4
5
Azure Datalake 大全
#azurejp
// WASB (requires setting up a WASB DataSource
in ADLS)
@rows =
EXTRACT name string, id int
FROM “wasb://…/data..csv”
USING Extractors.Csv( );
// ADLS (absolute path)
@rows =
EXTRACT name string, id int
FROM “adl://…/data..csv”
USING Extractors.Csv( );
// ADLS (relative to default ADLS for an ADLA
account)
@rows =
EXTRACT name string, id int
FROM “/…/data..csv”
USING Extractors.Csv( );
Default Extractors
Extractors.Csv( )
Extractors.Tsv( )
#azurejp
@rows =
EXTRACT name string, id int
FROM
“/file1.tsv”,
“/file2.tsv”,
“/file3.tsv”
USING Extractors.Csv( );
#azurejp
@rows =
EXTRACT name string, id int
FROM “adl://…/data..csv”
USING Extractors.Csv();
OUTPUT @rows
TO “/data.tsv”
USING Outputters.Csv();
Default Outputters
Outputters.Csv( )
Outputters.Tsv( )
#azurejp
@rows =
EXTRACT
Name string,
Id int,
FROM “/file.tsv”
USING Extractors.Tsv(skipFirstNRows:1);
OUTPUT @data
TO "/output/docsamples/output_header.csv"
USING Outputters.Csv(outputHeader:true);
スキップする行数を指
定
#azurejp
https://msdn.microsoft.com/ja-jp/library/azure/mt621320.aspx
Azure Datalake 大全
Azure Datalake 大全
#azurejp
@rows =
EXTRACT <schema>
FROM “adl://…/data..csv”
USING Outputters.Csv();
DECLARE @inputfile string = “adl://…/data..csv”
@rows =
EXTRACT <schema>
FROM @inputfile
USING Outputters.Csv();
#azurejp
DECLARE @a string = "Hello World";
DECLARE @b int = 2;
DECLARE @c dateTime = System.DateTime.Parse("1979/03/31");
DECLARE @d dateTime = DateTime.Now;
DECLARE @e Guid = System.Guid.Parse("BEF7A4E8-F583-4804-9711-7E608215EBA6");
DECLARE @f byte [] = new byte[] { 0, 1, 2, 3, 4};
@変数名 で定義
Azure Datalake 大全
#azurejp
@departments =
SELECT * FROM
(VALUES
(31, "Sales"),
(33, "Engineering"),
(34, "Clerical"),
(35, "Marketing")
) AS
D( DepID, DepName );
Azure Datalake 大全
#azurejp
@output =
SELECT
Start,
Region,
Duration + 1.0 AS Duration2
FROM @searchlog;
#azurejp
@output =
SELECT
Start,
Region,
Duration
FROM @searchlog
WHERE Region == "en-gb";
#azurejp
#azurejp
@output =
SELECT
Start,
Region,
Duration
FROM @searchlog;
@output =
SELECT *
FROM @output
WHERE Region == "en-gb";
Azure Datalake 大全
#azurejp
@output =
SELECT Start, Region, Duration
FROM @searchlog
WHERE (Duration >= 60) OR NOT (Region == "en-gb");
// NOTE: && and || perform short-circuiting
@output =
SELECT Start, Region, Duration
FROM @searchlog
WHERE (Duration >= 60) || !(Region == "en-gb");
#azurejp
@output =
SELECT Start, Region, Duration
FROM @searchlog
WHERE
Start >= DateTime.Parse("2012/02/16")
AND Start <= DateTime.Parse("2012/02/17");
#azurejp
@rs =
SELECT
FirstName,
LastName,
JobTitle
FROM People
WHERE
JobTitle IN ("Engineer", "Designer“, “Writer”);
Azure Datalake 大全
#azurejp
@output =
SELECT
Region,
COUNT() AS NumSessions,
SUM(Duration) AS TotalDuration,
AVG(Duration) AS AvgDwellTtime,
MAX(Duration) AS MaxDuration,
MIN(Duration) AS MinDuration
FROM @searchlog
GROUP BY Region;
#azurejp
// NO GROUP BY
@output =
SELECT
SUM(Duration) AS TotalDuration
FROM @searchlog;
// WITH GROUP BY
@output =
SELECT
Region,
SUM(Duration) AS TotalDuration
FROM searchlog
GROUP BY Region;
#azurejp
// find all the Regions where the total dwell time is > 200
@output =
SELECT
Region,
SUM(Duration) AS TotalDuration
FROM @searchlog
GROUP BY Region
HAVING TotalDuration > 200;
#azurejp
// Option 1
@output =
SELECT
Region,
SUM(Duration) AS TotalDuration
FROM @searchlog
GROUP BY Region;
@output2 =
SELECT *
FROM @output
WHERE TotalDuration > 200;
// Option 2
@output =
SELECT
Region,
SUM(Duration) AS TotalDuration
FROM @searchlog
GROUP BY Region
HAVING SUM(Duration) > 200;
Azure Datalake 大全
#azurejp
// List the sessions in increasing order of Duration
@output =
SELECT *
FROM @searchlog
ORDER BY Duration ASC
FETCH FIRST 3 ROWS;
// This does not work (ORDER BY requires FETCH)
@output =
SELECT *
FROM @searchlog
ORDER BY Duration ASC;
#azurejp
OUTPUT @output
TO @"/Samples/Output/SearchLog_output.tsv"
ORDER BY Duration ASC
USING Outputters.Tsv();
Azure Datalake 大全
#azurejp
 LEFT OUTER JOIN
 LEFT INNER JOIN
 RIGHT INNER JOIN
 RIGHT OUTER JOIN
 FULL OUTER JOIN
 CROSS JOIN
 LEFT SEMI JOIN
 RIGHT SEMI JOIN
 EXCEPT ALL
 EXCEPT DISTINCT
 INTERSECT ALL
 INTERSECT DISTINCT
 UNION ALL
 UNION DISTINCT
Azure Datalake 大全
#azurejp
@rs1 =
SELECT
ROW_NUMBER() OVER ( ) AS RowNumber,
Start,
Region
FROM @searchlog
ORDER BY Start;
以下の一連のクエリは、中間の行セットの @irs を必要とする
User Id Region Duration
A$A892 en-us 10500
HG54#A en-us 22270
YSD78@ en-us 38790
JADI899 en-gb 18780
YCPB(%U en-gb 17000
BHPY687 en-gb 16700
BGFSWQ en-bs 57750
BSD805 en-fr 15675
BSDYTH7 en-fr 10250
@rs =
EXTRACT
UserID string,
Start DateTime,
End DateTime,
Region string,
SitesVisited string,
PagesVisited string
FROM "swebhdfs://Logs/WebLogRecords.txt"
USING WebLogExtractor();
@irs = SELECT UserID, Region,
(End.Subtract(Start)).TotalSeconds AS Duration
FROM @rs;
WebLogRecords.txt
Azure Data Lake
#azurejp
[SUM = 207715]
UserId Region Duration
A$A892 en-us 10500
HG54#A en-us 22270
YSD78@ en-us 38790
JADI899 en-gb 18780
YCPB(%U en-gb 17000
BHPY687 en-gb 16700
BGFSWQ en-bs 57750
BSD805 en-fr 15675
BSDYTH7 en-fr 10250
UserId TotalDuration
A$A892 207715
HG54#A 207715
YSD78@ 207715
JADI899 207715
YCPB(%U 207715
BHPY687 207715
BGFSWQ 207715
BSD805 207715
BSDYTH7 207715
全行のウィンドウを通じて
期間をサマリーする
@result =
SELECT UserID,
SUM(Duration) OVER() AS TotalDuration
FROM @irs;
@irs @result
ユーザーIDと、ウェブサイトにおける全ユーザーの滞在時間の総計をリストする
#azurejp
UserId Region Duration
A$A892 en-us 10500
HG54#A en-us 22270
YSD78@ en-us 38790
JADI899 en-gb 18780
YCPB(%U en-gb 17000
BHPY687 en-gb 16700
BGFSWQ en-bs 57750
BSD805 en-fr 15675
BSDYTH7 en-fr 10250
UserId Region RegionTotal
A$A892 en-us 71560
HG54#A en-us 71569
YSD78@ en-us 71560
JADI899 en-gb 52480
YCPB(%U en-gb 52480
BHPY687 en-gb 52480
BGFSWQ en-bs 57750
BSD805 en-fr 25925
BSDYTH7 en-fr 25925
@irs @total2
@total2 =
SELECT UserId, Region,
SUM(Duration)
OVER( PARTITION BY Region )
AS RegionTotal FROM @irs;
リージョンのウィンドウを通じて
期間をサマリーする
ユーザーIDと、リージョンとリージョンごとのウェブサイトにおける滞在時間の総計
をリストする
#azurejp
UserId Region Duration
A$A892 en-us 10500
HG54#A en-us 22270
YSD78@ en-us 38790
JADI899 en-gb 18780
YCPB(%U en-gb 17000
BHPY687 en-gb 16700
BGFSWQ en-bs 57750
BSD805 en-fr 15675
BSDYTH7 en-fr 10250
UserId Region CountByRegion
A$A892 en-us 3
HG54#A en-us 3
YSD78@ en-us 3
JADI899 en-gb 3
YCPB(%U en-gb 3
BHPY687 en-gb 3
BGFSWQ en-bs 1
BSD805 en-fr 2
BSDYTH7 en-fr 2
@irs @result
リージョンごとのユーザー数をカウントする
@result =
SELECT UserId, Region,
COUNT(*)
OVER( PARTITION BY Region) AS
CountByRegion
FROM @irs;
リージョンごとのユーザー数のリストする
#azurejp
UserId Region Duration
A$A892 en-us 10500
HG54#A en-us 22270
YSD78@ en-us 38790
JADI899 en-gb 18780
YCPB(%U en-gb 17000
BHPY687 en-gb 16700
BGFSWQ en-bs 57750
BSD805 en-fr 15675
BSDYTH7 en-fr 10250
UserId Region Rank
YSD78@ en-us 1
HG54#A en-us 2
JADI899 en-gb 1
YCPB(%U en-gb 2
BGFSWQ en-bs 1
BSD805 en-fr 1
BSDYTH7 en-fr 2
@irs @result
@result =
SELECT UserId, Region,
ROW_NUMBER()
OVER(PARTITION BY Vertical
ORDER BY Duration) AS Rank
FROM @irs
GROUP BY Region
HAVING RowNumber <= 2;
各リージョンで最も滞在時間の長いユーザー2人を見つける
Azure Datalake 大全
#azurejp
@a = SELECT Region, Urls FROM @searchlog;
@b = SELECT
Region,
SqlArray.Create(Urls.Split(';')) AS UrlTokens
FROM @a;
@c = SELECT
Region,
Token AS Url
FROM @b
CROSS APPLY EXPLODE (UrlTokens) AS r(Token);
@a
@b
@c
CROSS APPLY EXPLODE
ARRAY TYPE
#azurejp
@d = SELECT Region,
ARRAY_AGG<string>(Url).ToArray() AS UrlArray
FROM @c
GROUP BY Region;
@e = SELECT Region,
string.Join(";", UrlArray) AS Urls
FROM @c;
@c
@e
@d
Azure Datalake 大全
log_2015_10_01.txt
log_2015_10_02.txt
log_2015_10_03.txt
log_2015_10_04.txt
log_2015_10_05.txt
log_2015_10_06.txt
log_2015_10_07.txt
log_2015_10_08.txt
log_2015_10_09.txt
log_2015_10_10.txt
log_2015_10_11.txt
Azure Datalake 大全
#azurejp
suffix
{suffix}
ファイル名が値として登録
される
#azurejp
date
{date:yyyy} {date:MM} {date:dd}
書式パターンからデータを読み込
む
4文字
Year
2文字
month
2文字
day
#azurejp
date
suffix
{date:yyyy} {date:MM} {date:dd} {suffix}
C#式でファイルセット
の
フィルター実施
Azure Datalake 大全
それぞれの Catalog は
N個の Database を持つ
Tables
Table-Valued
Functions
Assemblies
#azurejp
CREATE TABLE Customers(
id int,
key int,
Customer string,
Date DateTime,
Amount float,
INDEX index1
CLUSTERED (id)
PARTITIONED BY (date)
DISTRIBUTED BY HASH (key) INTO 4
); /catalog/…/tables/Guid(T)/
Guid(T.p1).ss Guid(T.p2).ss Guid(T.p3).ss
論理構造
物理構造
@date1 @date2 @date3
ID1
H1
ID1
H1
ID1
H1
ID2 ID2
ID3ID3 ID4
H2
ID4
H2
ID5
ID5 ID6 H3
ID6
H2ID6
H3
ID7
H4
ID7
ID8 ID7
ID9 ID8
Clustering -> データの近さ
Partition -> ライフサイクル管理
Distribution -> データの近さ + 分
散性
U-SQL Table が
構造化されたデータとして
管理
Files under “/catalog/database”
Catalog フォルダーを
直接読み書きしない
#azurejp
CREATE FUNCTION MyDB.dbo.
RETURNS @rows TABLE
(
Name string,
Id int
)
AS
BEGIN
@rows =
EXTRACT
Name string,
Id int,
FROM “/file.tsv”
USING Extractors.Tsv();
RETURN;
END;
結果を返す RowSet
Schema
定義された RowSet
A Single concept that replaces Scope
views & functions
-Discoverable
-Schematized
#azurejp
CREATE FUNCTION MyDB.dbo.
RETURNS @rows AS
BEGIN
@rows =
EXTRACT
Name string,
Id int,
FROM “/file.tsv”
USING Extractors.Tsv();
RETURN;
END;
RowSet からスキーマ定
義
#azurejp
// A Table
@rs = SELECT * FROM MyDB.dbo.Customers;
// A Table valued Function
@rs = SELECT * FROM MyDB.dbo.GetData();
Azure Datalake 大全
#azurejp
@output =
SELECT
Region.ToUpper() AS NewRegion
FROM @searchlog;
@output=
SELECT
Start,
Region,
Start.DayOfYear AS StartDayOfYear
FROM @searchlog;
#azurejp
@output=
SELECT
Start,
Region,
((double) Duration) AS DurationDouble
FROM @searchlog;
#azurejp
// User-defined code is not supported
DECLARE myName string = MyHelper.GetMyName();
#azurejp
#azurejp
REFERENCE ASSEMBLY MyCode;
@rows =
SELECT
OrdersDB.Helpers.Normalize(Customer) AS CustN,
Amount AS Amount
FROM @orders;
CREATE ASSEMBLY MyCode
FROM @"/DLLs/Helpers.dll";
CREATE ASSEMBLY で
参照設定
アセンブリーをCateLogに事
前アップロード。その後
CREATE ASSEMBLY
読み込み
Azure Datalake 大全
Query
Azure
Storage Blobs
Azure SQL
in VMs
Azure
SQL DB
Azure Data
Lake Analytics
U-SQL Query
Azure
SQL Data Warehouse
Azure
Data Lake Storage
ADLA Account
youradlaaccount
SQL Server
yoursqlserver
SQL DB/DW
AdventureW
orksLT
U-SQL DB
AdventureWorksLT_External
DB
Credential
AdventureWorksLT_Creds
External DataSource
AdventureWorksLT_Creds
Table
Customers
External Table
CustomersExternal External Tableに
スキーマ定義済
みのクエリ実行
スキーマ指定
せずにクエリ
実行
# If you have the username & password as strings
$username = "username"
$passwd = ConvertTo-SecureString "password" -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential($username, $passwd)
# Prompt user for credentials
$creds = Get-Credential
OR
New-AdlCatalogCredential
-Account "youradlaaccount" `
-DatabaseName "AdventureWorksLT_ExternalDB" `
-DatabaseHost “yoursqlserver.database.windows.net" `
-Port 1433 `
-CredentialName "AdventureWorksLT_Creds" `
-Credential $creds
USE DATABASE [AdventureWorksLT_ExternalDB];
CREATE DATA SOURCE IF NOT EXISTS AdventureWorksLT_DS
FROM AZURESQLDB WITH
( PROVIDER_STRING =
"Database=AdventureWorksLT;Trusted_Connection=False;Encrypt=True",
CREDENTIAL = AdventureWorksLT_Creds,
REMOTABLE_TYPES = (bool, byte, sbyte, short, ushort, int, uint, long, ulong,
decimal, float, double, string, DateTime)
);
Remotable types
USE DATABASE [AdventureWorksLT_ExternalDB];
@customers =
SELECT *
FROM EXTERNAL AdventureWorksLT_DS LOCATION "[SalesLT].[Customer]";
OUTPUT @customers
TO @"/SalesLT_Customer.csv"
USING Outputters.Csv();
USE DATABASE [AdventureWorksLT_ExternalDB];
CREATE EXTERNAL TABLE IF NOT EXISTS
dbo.CustomersExternal
(
CustomerID int?,
NameStyle bool,
Title string,
FirstName string,
MiddleName string,
LastName string,
Suffix string,
CompanyName string,
SalesPerson string,
EmailAddress string,
Phone string,
PasswordHash string,
PasswordSalt string,
Rowguid Guid,
ModifiedDate DateTime?
)
FROM AdventureWorksLT_DS LOCATION
"[SalesLT].[Customer]";
USE DATABASE
[AdventureWorksLT_ExternalDB];
@customers =
SELECT *
FROM dbo.CustomersExternal;
OUTPUT @customers
TO @"/SalesLT_Customer.csv"
USING Outputters.Csv();
External Table からの読み取り
#azurejp
CREATE CREDENTIAL IF NOT EXISTS dahatakeAdmin
WITH USER_NAME ="dahatake", IDENTITY = "dahatakeSec";
CREATE DATA SOURCE IF NOT EXISTS pubsSource
FROM AZURESQLDB
WITH
(
PROVIDER_STRING = "Initial Catalog=pubs;Encrypt=True",
CREDENTIAL = dahatakeAdmin
);
@result = SELECT * FROM EXTERNAL pubsSource
EXECUTE @"SELECT * FROM dbo.employee";
OUTPUT @result TO "/output/employee.csv"
USING Outputters.Csv();
Install-Module AzureRM
Install-AzureRM
Login-AzureRmAccount
Get-AzureRmSubscription
Set-AzureRmContext -SubscriptionId
“<subscription ID>"
$passwd = ConvertTo-SecureString “<password>"
-AsPlainText -Force
$mysecret = New-Object
System.Management.Automation.PSCredential("dah
atakeSec", $passwd)
New-AzureRmDataLakeAnalyticsCatalogSecret -
DatabaseName "master" -AccountName
"dahatakeadla" -Secret $mysecret
-Host "dahatakesql.database.windows.net" -Port
1433
資格情報オブジェクト: https://msdn.microsoft.com/ja-jp/library/azure/mt621327.aspx
Azure Datalake 大全
ビルトインの
演算子、関数、
集合関数
C# 式 (SELECT 文の中)
ユーザー定義の集合関数 (UDAGG)
ユーザー定義の関数 (UDF)
ユーザー定義の演算子 (UDO)
• ユーザー定義の Extractor
• ユーザー定義の Outputter
• ユーザー定義の Processor
• 1行読み込み、1行作成
• パススルー vs. 変換
• ユーザー定義の Applier
• 1行読み込み、0行以上を生成
• OUTER/CROSS APPLY とともに使用
• ユーザー定義の Combiner
• 行セットの結合 (ユーザー定義のジョインのように)
• ユーザー定義の Reducer
• n 行読み込み、 m 行生成 (通常は m<n)
• UDO インスタンスを使う明示的な U-SQL シンタクス
でスケールアウト (実行の一部として作成):
• EXTRACT
• OUTPUT
• PROCESS
• COMBINE
• REDUCE
Azure Datalake 大全
Input Data
(K, A, B, C, D)
REDUCE ON K
Partition
K0
Partition
K1
Partition
K2
REDUCER
Python/R
REDUCER
Python/R
REDUCER
Python/R
Output for
K0
Output for
K0
Output for
K0
Extensions の追加
REFERENCE ASSEMBLY [ExtPython]
REFERENCE ASSEMBLY [ExtR]
特別な Reducers によって Python or R code
を分散実行
• Extension.Python.Reducer
• Extension.R.Reducer
Standard DataFrame を Reducerの入出力とし
て使える
NOTE: Reducer は、Aggregate を含んでいな
い
REFERENCE ASSEMBLY [ExtPython];
DECLARE @myScript = @"
def get_mentions(tweet):
return ';'.join( ( w[1:] for w in tweet.split() if w[0]=='@' ) )
def usqlml_main(df):
del df['time']
del df['author']
df['mentions'] = df.tweet.apply(get_mentions)
del df['tweet']
return df
";
@t =
SELECT * FROM
(VALUES
("D1","T1","A1","@foo Hello World @bar"),
("D2","T2","A2","@baz Hello World @beer")
) AS
D( date, time, author, tweet );
@m =
REDUCE @t ON date
PRODUCE date string, mentions string
USING new Extension.Python.Reducer(pyScript:@myScript);
Python Extensions
U-SQLを並列分散処理に使用する
Python code を多くのノード上で実
行
NumPy、Pandasのような、Python
の標準ライブラリが利用できる
顔の解析
画像へのタグ付け
感情分析
OCR
テキストからの重要語句の抽出
テキストの感情分析
Azure Data Lake における Cognitive 機
能
REFERENCE ASSEMBLY ImageCommon;
REFERENCE ASSEMBLY FaceSdk;
REFERENCE ASSEMBLY ImageEmotion;
REFERENCE ASSEMBLY ImageTagging;
REFERENCE ASSEMBLY ImageOcr;
@imgs =
EXTRACT FileName string, ImgData byte[]
FROM @"/images/{FileName:*}.jpg"
USING new Cognition.Vision.ImageExtractor();
// Extract the number of objects on each image and tag them
@objects =
PROCESS @imgs
PRODUCE FileName,
NumObjects int,
Tags string
READONLY FileName
USING new Cognition.Vision.ImageTagger();
OUTPUT @objects
TO "/objects.tsv"
USING Outputters.Tsv();
Imaging
REFERENCE ASSEMBLY [TextCommon];
REFERENCE ASSEMBLY [TextSentiment];
REFERENCE ASSEMBLY [TextKeyPhrase];
@WarAndPeace =
EXTRACT No int,
Year string,
Book string, Chapter string,
Text string
FROM @"/usqlext/samples/cognition/war_and_peace.csv"
USING Extractors.Csv();
@sentiment =
PROCESS @WarAndPeace
PRODUCE No,
Year,
Book, Chapter,
Text,
Sentiment string,
Conf double
USING new Cognition.Text.SentimentAnalyzer(true);
OUTPUT @sentinment
TO "/sentiment.tsv"
USING Outputters.Tsv();
Text Analysis
• オブジェクト認識 (タグ)
• 顔認識、感情認識
• JOIN処理 – 幸せな人は誰なのか?
REFERENCE ASSEMBLY ImageCommon;
REFERENCE ASSEMBLY FaceSdk;
REFERENCE ASSEMBLY ImageEmotion;
REFERENCE ASSEMBLY ImageTagging;
@objects =
PROCESS MegaFaceView
PRODUCE FileName, NumObjects int, Tags string
READONLY FileName
USING new Cognition.Vision.ImageTagger();
@tags =
SELECT FileName, T.Tag
FROM @objects
CROSS APPLY
EXPLODE(SqlArray.Create(Tags.Split(';')))
AS T(Tag)
WHERE T.Tag.ToString().Contains("dog") OR
T.Tag.ToString().Contains("cat");
@emotion_raw =
PROCESS MegaFaceView
PRODUCE FileName string, NumFaces int, Emotion string
READONLY FileName
USING new Cognition.Vision.EmotionAnalyzer();
@emotion =
SELECT FileName, T.Emotion
FROM @emotion_raw
CROSS APPLY
EXPLODE(SqlArray.Create(Emotion.Split(';')))
AS T(Emotion);
@correlation =
SELECT T.FileName, Emotion, Tag
FROM @emotion AS E
INNER JOIN
@tags AS T
ON E.FileName == T.FileName;
Images
Objects Emotions
filter
join
aggregate
2015/08/23
Azure Datalake 大全
#azurejp
#azurejp
#azurejp
#azurejp
#azurejp
#azurejp
#azurejp
#azurejp
#azurejp
#azurejp
#azurejp
#azurejp
#azurejp
#azurejp
#azurejp
https://docs.microsoft.com/ja-
jp/azure/data-lake-
analytics/data-lake-analytics-u-
sql-programmability-guide
Azure Datalake 大全
Batch
Streaming
Machine Learning
処理読み込み 保存
INSERT
OUTPUT
OUTPUT
SELECT…
FROM…
WHERE…
EXTRACT
EXTRACT
SELECT
SELECT
Azure
Data
Lake
Azure
Data
Lake
Azure
SQL
DB
Azure
Storage
Blobs
Azure
Storage
Blobs
RowSet RowSet
Job Front End
Job Scheduler Compiler Service
Job Queue
Job Manager
U-SQL Catalog
YARN
Job 投入
Job 実行
U-SQL Runtime vertex 実行
U-SQL C# user code
C++ system code
Algebra
other files
(system files, deployed resources)
managed dll
Unmanaged dll
Input
script
Compilation output (in job folder)
Files
Meta
Data
Service
Deployed to vertices
Compiler & Optimizer
ジョブはVertexに分割
Vertex が実行単位
Input
Output
Output
6 ステージ
8 Vertex
Vertexはステージに展開
– 同じステージのVertexは、
同じ処理をする
– 前段階のステージのVertexに
依存する
– 1つのVertexのジョブ実行は5時間まで
acyclic graph (循環のないグラフ)
Preparing
Queued
Running
Finalizing
Ended
(Succeeded, Failed,
Cancelled)
New
Compiling
Queued
Scheduling
Starting
Running
Ended
画面上
状態
ADLAU の
空を確認
進捗
統計情報
各四角形 = “Vertex”
全体の一部を表す
各SuperVertex (別名 “Stage”)
におけるVertexは同じデー
タの異なる部分に対し同様
の操作を行う
ジョブグラフとして
可視化
並列度の要求= 1
(1度に1つの vertex を動かす)
並列度の要求 = 4
(1度に4つの vertex を動かす)
次のステー
ジは、前の
ステージが
完了する前
に開始可能 ステージ中にすべ
ての予約された処
理を並列して行う
のは不可
252 個の処理
Vertex の平
均実行時間
43 億行
データの読み込みと
書き込み
失敗した vertex … しか
し自動的にリトライ
ステージ全体が成功
で完了
下の vertex が上の vertex
の出力に依存
クリティカルパス:
ジョブを最後まで実行し
続けるVertexの依存関係
チェーン。
Azure Datalake 大全
Vertex の実行ビュー
どの Vertex を表示す
るか
全ての Vertex
クリティカルパス
Azure Datalake 大全
Azure Datalake 大全
Data Lake Tools for VS Azure Portal PowerShell
Azure Datalake 大全
Clicking on that
button will copy the
Job Link to the
Clipboard
Azure Datalake 大全
Clicking on that
button will copy the
Job Link to the
Clipboard
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Here’s the ###
the problem is near the
###
Azure Datalake 大全
USER CODE (99.9%)
• There’s something about what the
developer did that is causing the
problem
• The issue may be related to the …
• Input data
• Existence
• Size
• Format
• Key Distribution (“Data Skew”)
• C# code
• C# expressions in a U-SQL Script
• C# UDFs
• Code in Libraries the script uses
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Developer Box
VS Project
ADLA Account
Failed Job
Visual Studio Failed
vertex
Visual Studio
Failed
vertex
C# Project
(Local Vertex Debug
Project)
Job Resources
U-SQL Runtime
Data Read by
Vertex
Case #1 Local Vertex Debug works
GREAT and SEAMLESSLY
Case #2 and Case #3 – Use the same
techniques in these cases as for
debugging a C# program
We are going to make Case #2 easier
in the future.
You can Launch the Exception Settings window via
• Keyboard Shortcut: Ctrl + Alt + E
• Debug > Windows > Exception Settings
• Search for “Exception Settings” in the VS Search
box. Select the item under “Menus”
If failed to read an input.
• Do the inputs exist?
• Do you have permissions to read the
inputs?
• Verify that the you can access the inputs
from the portal.
Did the U-SQL code ever work?
If YES:
• Provide a previous job link.
• Examine the job diff
If possible and depending on the issue,
construct the smallest possible repro
(script and dataset) that lets others
examine the problem.
Did a Vertex Fail because of User Code?
Debug the vertex locally.
GO THROUGH THE CHECKLIST FIRST
Provide the ..
• Job Link (job url)
• Job Link to a previous run where the script
worked
• ADLA Account Name
• Azure Region of the ADL Account
• Top Level Error + inner errors
• Error Codes
• Error text
IF POSSIBLE
Depending on the issue, construct the
smallest possible repro (script and
dataset) that lets others examine the
problem.
IF WILLING
• Attach the job graph as an image
• Attach the script.
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Allocating 10 AUs
for a 10 minute job.
Cost
= 10 min * 10 AUs
= 100 AU minutes
Time
Blue line: Allocated
Consider using fewer AUs
You are paying for the area under the
blue line
You are only using the area under the
red line
Time
Blue line: Allocated
Red line: Running
Over Allocated != Bad
Time
Consider using more Aus
“Under allocated” jobs are Efficient!
Blue line: Allocated
Red line: Running
Under Allocated != Bad
Allocation Efficiency =
(Compute hours) / (AUs * duration)
Example Job
= 192.3 hours / (200 AUs * 1.1 hours)
= 192.3 hours / 220 AUHours
= 0.874
= 87.4% Efficiency very very good!
Efficient != What you always want
/catalog/…/tables/Guid(T)/
Guid(T.p1).ss Guid(T.p2).ss Guid(T.p3).ss
TABLE T (
…
INDEX i
CLUSTERED BY (id)
DISTRIBUTED BY HASH (key) INTO 4
PARTITIONED BY (date)
)
LOGICAL
PHYSICAL
@date1 @date2 @date3
ID1
H1
ID1
H1
ID1
H1
ID2 ID2
ID3ID3 ID4
H2
ID4
H2
ID5
ID5 ID6 H3
ID6
H2ID6
H3
ID7
H4
ID7
ID8 ID7
ID9 ID8
Clustering ->Data Locality
Partition -> Data lifecycle
management. Partition elimination
Distribution -> Data Locality +
distribution elimination
FB
WH
CNN
Partition2
FB
WH
CNN
Partition3
FB
WH
CNN
Partition1
File:
Keys (Domain) are scattered across
the partitions
Read Read
Write Write Write
Read
Filter Filter Filter
PARTITION 1 PARTITION 2 PARTITION 3
Because “CNN” could be anywhere,
all extents must be read.
@output = SELECT *
FROM @clickstream
WHERE domain == “CNN”;
WH
WH
WH
Partition2
CNN
CNN
CNN
Partition3
FB
FB
FB
Partition1
U-SQL Table partitioned on Domain
Rows with the same keys are on the
same partition.
Read
Write
Filter
PARTITION 1 PARTITION 2 PARTITION 3
Thanks to “Partition
Elimination” and the U-SQL
Table, the job only reads from
the extent that is known to
have the relevant key
@output = SELECT *
FROM @clickstream
WHERE domain == “CNN”;
@output =
SELECT domain, SUM(clicks) AS total
FROM @clickstream
GROUP BY domain;
Read Read
Partition Partition
Full Agg
Write
Full Agg
Write
Full Agg
Write
Read
Partition
Partial Agg Partial Agg Partial Agg
PARTITION 1 PARTITION 2 PARTITION 3
Read Read
Full Agg Full Agg
Write Write
Read
Full Agg
Write
PARTITION 1 PARTITION 2 PARTITION 3
Azure Datalake 大全
SessionID Domain Clicks
3 cnn.com 9
1 whitehouse.gov 14
2 facebook.com 8
3 reddit.com 78
2 microsoft.com 1
1 facebook.com 5
3 microsoft.com 11
FB
WH
CNN
Extent 2
FB
WH
CNN
Extent 3
FB
WH
CNN
Extent 1
File:
Keys (Domain) are scattered across
the extents
WH
WH
WH
Extent 2
CNN
CNN
CNN
Extent 3
FB
FB
FB
Extent 1
U-SQL Table partitioned on Domain
The keys are now physically in the
same place on disk (extent)
CREATE TABLE SampleDBTutorials.dbo.ClickData
(
SessionId int,
Domain string,
Clinks int,
INDEX idx1 //Name of index
CLUSTERED (Domain)
PARTITIONED BY HASH (Domain)
);
INSERT INTO SampleDBTutorials.dbo.ClickData
SELECT *
FROM @clickdata;
// Using a File
@ClickData =
SELECT
Session int,
Domain string,
Clicks int
FROM “/clickdata.tsv”
USING Extractors.Tsv();
@rows = SELECT *
FROM @ClickData
WHERE Domain == “cnn.com”;
OUTPUT @rows
TO “/output.tsv”
USING Outputters.tsv();
// Using a U-SQL Table partitioned by Domain
@ClickData =
SELECT *
FROM MyDB.dbo.ClickData;
@rows = SELECT *
FROM @ClickData
WHERE Domain == “cnn.com”;
OUTPUT @rows
TO “/output.tsv”
USING Outputters.tsv();
Read Read
Write Write Write
Read
Filter Filter Filter
CNN,
FB,
WH
EXTENT 1 EXTENT 2 EXTENT 3
CNN,
FB,
WH
CNN,
FB,
WH
Because “CNN” could be anywhere,
all extents must be read.
Read
Write
Filter
FB
PARTITION 1 PARTITION 2 PARTITION 3
WH CNN
Thanks to “Partition Elimination” and
the U-SQL Table, the job only reads
from the extent that is known to
have the relevant key
File U-SQL Table Partitioned by Domain
@rows = SELECT
Domain,
SUM(Clicks) AS TotalClicks
FROM @ClickData
GROUP BY Domain;
Read Read
Partition Partition
Full Agg
Write
Full Agg
Write
Full Agg
Write
Read
Partition
Partial Agg Partial Agg Partial Agg
CNN,
FB,
WH
EXTENT 1 EXTENT 2 EXTENT 3
CNN,
FB,
WH
CNN,
FB,
WH
U-SQL Table Partitioned by Domain
Read Read
Full Agg Full Agg
Write Write
Read
Full Agg
Write
FB
PARTITION 1
WH
PARTITION 2
CNN
PARTITION 3
Expensive!
/catalog/…/tables/Guid(T)/
Guid(T.p1).ss Guid(T.p2).ss Guid(T.p3).ss
TABLE T (
…
INDEX i
CLUSTERED (id)
PARTITIONED BY (date)
DISTRIBUTED BY HASH (key) INTO 4
)
LOGICAL
PHYSICAL
@date1 @date2 @date3
ID1
H1
ID1
H1
ID1
H1
ID2 ID2
ID3ID3 ID4
H2
ID4
H2
ID5
ID5 ID6 H3
ID6
H2ID6
H3
ID7
H4
ID7
ID8 ID7
ID9 ID8
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
Extent 1
Region = “en-us”
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
Extent 2
Region = “en-gb”
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
Extent 3
Region = “en-fr”CREATE TABLE
LogRecordsTable
(UserId int,
Start DateTime,
Region string,
INDEX idx CLUSTERED
(Region ASC)
PARTITIONED BY HASH
(Region));
インサート時に、
“Region” カラムに基
づき、3つの範囲に
渡って
ハッシュ分散される
INSERT INTO LogRecordsTable
SELECT UserId, Start, End, Region FROM @rs
パーティションが
分かれている
@rs = SELECT * FROM LogRecordsTable
WHERE Region == “en-gb”
1
2
3
Full agg
Region ごとにクラスタ化されたテーブル
Read Read Read Read
Full agg Full agg Partial agg Partial agg
Extent 1 Extent 2 Extent 3 Extent 4
Sort Sort
Top 100 Top 100 Sort
Top 100
Top 100
Read Read Read Read
非構造化データ
Partial agg Partial agg Partial agg Partial agg
Full agg Full agg Full agg
Sort Sort Sort
Top 100 Top 100 Top 100
Extent 1 Extent 2 Extent 3 Extent 4
Partition Partition Partition Partition
@rs1 =
SELECT Region,
COUNT() AS Total
FROM @rs
GROUP BY Region;
@rs2 =
SELECT TOP 100
Region, Total
FROM @rs1
ORDER BY Total;
高コストな処理
0
5,000,000
10,000,000
15,000,000
20,000,000
25,000,000
30,000,000
35,000,000
40,000,000
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
31
33
35
37
39
41
43
45
47
49
51
州ごとの人口
0
5,000,000
10,000,000
15,000,000
20,000,000
25,000,000
30,000,000
35,000,000
40,000,000
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
Population by State
U-SQL Table partitioned on Domain
Relatively even distribution
Partition 2 Partition 3
WH
CNNFB
Partition 1
U-SQL Table partitioned on Domain
Skewed Distribution
Partition 2 Partition 1
WH CNNFB
Partition 1
Azure Datalake 大全
@rows =
SELECT
Gender,
AGG<MyAgg>(Income) AS Result
FROM
@HugeInput
GROUP BY Gender;
大量の
入力
Vertex 0 Vertex 1
性別=男 性別=女
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Launch as
Administrator!
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
Azure Datalake 大全
1 2 3 4 5 6 7 8 36
全ての行は一つのVertexへ
1 2 3
6
4 5 6 7 8
36
15 15
データは複数のVertexに送ることができる
// THIS CODE IS SCOPE -> NEEDS TO BE UPDATED TO U-SQL
public class SampleNonRecursiveReducer: Reducer
{
public override bool IsRecursive { get { return true; } }
public override Schema Produces(string[] columns, string[] args, Schema input)
{
…
}
public override IEnumerable<Row> Reduce(RowSet input, Row output, string[] args)
{
…
}
}
#ENDCS
Distributed data reduction
SELECT Gender, SUM(…) AS Result
FROM HugeInput
GROUP BY Gender;
This job will succeeded even if the input is huge.
• But not all Reducers Can be recursive
− Median
− Percentile
Azure Datalake 大全
Azure Datalake 大全
ジョブの進捗の
表示や再実行
クエリ
パフォーマンスの
チューニング
U-SQL クエリの
実行プランの表示
メタデータ
カタログの
参照
U-SQL スクリプト
(C# コード)の
作成
メタデータ
オブジェクトの
作成
U-SQL ジョブの
サブミットと
キャンセル
U-SQL と
C# コードの
デバッグ
U-SQL に拡張されたC#のコードは、U-SQL Studioで直接コーディン
グ・実行が可能
カスタム
プロセッサー
 行セットの観点でも
可視化され、変更が
適用
• ADL Analytics はメタデータ・オブジェクトを作成し、メタデータ サービスに
よって維持されるカタログに保存
• DDL ステートメントによって作成されるテーブルや TVF (CREATE TABLE …)
• メタデータ オブジェクトは Server Explorer で直接作成可能
Azure Data Lake Analytics アカウント
• データベース
– テーブル
– Table valued functions
– ジョブ
– スキーマ
• Linked storage
ADLA Account/Catalog
Database
Schema
[1,n]
[1,n]
[0,n]
tables views TVFs
Clustered
Index
partitions
C# Assemblies
C# Extractors
Data
Source
C# Reducers
C# Processors
C# Combiners
C# Outputters
Ext. tables Procedures
Credentials
C# Applier
Table Types
Statistics
C# Fns C# UDAggC# UDTs
Visual Studio の Server
Explorer でメタデータ
カタログが閲覧可能
Server Explorer で可能:
1. テーブル、スキーマ、データ
ベースの作成
2. アセンブリの登録
© 2016 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a
commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

More Related Content

PDF
アサヒのデータ活用基盤を支えるデータ仮想化技術
PDF
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
PDF
JenkinsとCodeBuildとCloud Buildと私
PDF
MongoDB〜その性質と利用場面〜
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
PDF
ビッグデータ処理データベースの全体像と使い分け
PPTX
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PDF
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(前編)
アサヒのデータ活用基盤を支えるデータ仮想化技術
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
JenkinsとCodeBuildとCloud Buildと私
MongoDB〜その性質と利用場面〜
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
ビッグデータ処理データベースの全体像と使い分け
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(前編)

What's hot (20)

PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PDF
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
PDF
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
PDF
ここが良かったDatadog
PPTX
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PDF
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
PDF
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
PDF
MongoDB概要:金融業界でのMongoDB
PPTX
Spring CloudとZipkinを利用した分散トレーシング
PPTX
はじめてのElasticsearchクラスタ
PPTX
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
PPTX
MongoDBが遅いときの切り分け方法
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
CloudFrontのリアルタイムログをKibanaで可視化しよう
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PDF
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
PDF
【de:code 2020】 カスタムコネクタ入門 : Power Platform と既存システムをつなげるカスタムコネクタ
PPT
Cassandraのしくみ データの読み書き編
PPTX
マイクロサービスにおける 結果整合性との戦い
PDF
噛み砕いてKafka Streams #kafkajp
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
[B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
ここが良かったDatadog
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
MongoDB概要:金融業界でのMongoDB
Spring CloudとZipkinを利用した分散トレーシング
はじめてのElasticsearchクラスタ
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
MongoDBが遅いときの切り分け方法
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
CloudFrontのリアルタイムログをKibanaで可視化しよう
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
【de:code 2020】 カスタムコネクタ入門 : Power Platform と既存システムをつなげるカスタムコネクタ
Cassandraのしくみ データの読み書き編
マイクロサービスにおける 結果整合性との戦い
噛み砕いてKafka Streams #kafkajp
Ad

Similar to Azure Datalake 大全 (20)

PPTX
Azure Data Platform
PDF
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
PPTX
Azure DataLake 大全
PDF
Azure Antenna はじめての Azure Data Lake
PDF
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
PDF
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
PDF
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
PDF
MapReduce解説
PPTX
1,000,000 foot view of Hadoop-like parallel data processing systems
PDF
CloudSpiral 2014年度 ビッグデータ講義
PPTX
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
PPT
Hadoop ~Yahoo! JAPANの活用について~
PPT
Asakusa Enterprise Batch Processing Framework for Hadoop
PDF
Dat009 クラウドでビック
PDF
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [実践編]
PDF
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
PPTX
A 2-3ゾウ使いへの第一歩 hadoop on azure 編
PPTX
ゾウ使いへの第一歩
PDF
マイニング探検会#10
PPT
Googleの基盤クローン Hadoopについて
Azure Data Platform
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
Azure DataLake 大全
Azure Antenna はじめての Azure Data Lake
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
[DI07] あらゆるデータに価値がある! アンチ断捨離ストのための Azure Data Lake
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
MapReduce解説
1,000,000 foot view of Hadoop-like parallel data processing systems
CloudSpiral 2014年度 ビッグデータ講義
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
Hadoop ~Yahoo! JAPANの活用について~
Asakusa Enterprise Batch Processing Framework for Hadoop
Dat009 クラウドでビック
【ウェブ セミナー】AI / アナリティクスを支えるビッグデータ基盤 Azure Data Lake [実践編]
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
A 2-3ゾウ使いへの第一歩 hadoop on azure 編
ゾウ使いへの第一歩
マイニング探検会#10
Googleの基盤クローン Hadoopについて
Ad

More from Daiyu Hatakeyama (20)

PPTX
ChatGPT Impact - その社会的/ビジネス価値を考える -
PPTX
Ethics of AI - AIの倫理-
PPTX
郡山 Connect 2022 ハッカソン 基調講演 - Hackathon からサービスインになったらデータを扱いましょう
PPTX
テクノアカデミー郡山 現役ソフトウェアエンジニアが語る。IT の今と未来
PPTX
Webサイトの最適化
PPTX
DXのための内製化のススメ
PPTX
JDMC Azureアプリ開発入門
PPTX
JAZUG12周年 俺の Azure Cosmos DB
PPTX
Microsoft の変革
PPTX
データ分析概略
PPTX
法政大学 MBA 中小企業向けITとの付き合うコツ
PPTX
明治大学 データサイエンス・AIに関するオムニバス授業 エバンジェリストというキャリア
PPTX
Green Software Foundation Global Summit 2022 Tokyo グリーンソフトウェアとは?
PPTX
コミュニケーション戦略を前提にしたOutlookやTeams活用
PPTX
Python に行く前に Excel で学ぶデータ分析のいろは
PPTX
AI の光と影
PPTX
東京大学 メディアコンテンツ特別講義 Sustainability
PPTX
Wiz国際情報工科自動車大学校 特別講演 Teams活用しよう!
PPTX
Wiz国際情報工科自動車大学校_特別講演_ITの織り成す未来
PPTX
東洋経済 製造業DXフォーラム 2022: 製造業のための Sustainability との 向き合い方
ChatGPT Impact - その社会的/ビジネス価値を考える -
Ethics of AI - AIの倫理-
郡山 Connect 2022 ハッカソン 基調講演 - Hackathon からサービスインになったらデータを扱いましょう
テクノアカデミー郡山 現役ソフトウェアエンジニアが語る。IT の今と未来
Webサイトの最適化
DXのための内製化のススメ
JDMC Azureアプリ開発入門
JAZUG12周年 俺の Azure Cosmos DB
Microsoft の変革
データ分析概略
法政大学 MBA 中小企業向けITとの付き合うコツ
明治大学 データサイエンス・AIに関するオムニバス授業 エバンジェリストというキャリア
Green Software Foundation Global Summit 2022 Tokyo グリーンソフトウェアとは?
コミュニケーション戦略を前提にしたOutlookやTeams活用
Python に行く前に Excel で学ぶデータ分析のいろは
AI の光と影
東京大学 メディアコンテンツ特別講義 Sustainability
Wiz国際情報工科自動車大学校 特別講演 Teams活用しよう!
Wiz国際情報工科自動車大学校_特別講演_ITの織り成す未来
東洋経済 製造業DXフォーラム 2022: 製造業のための Sustainability との 向き合い方

Azure Datalake 大全