で個々のファイルはブロックに分割される

https://www.facebook.com/dahatake/
https://twitter.com/dahatake/
https://github.com/dahatake/
https://daiyuhatakeyama.wordpress.com/
• HDInsight は、本セッションでは扱いません
1. エンドユーザーの求めるレポートと分析内容を特定
2. 関連するデータベースのスキーマとクエリを定義
3. 必要なデータ・ソースを特定
4. ETL パイプラインを作成し、必要なデータを抽出(キュレーション)
対象のスキーマに合わせて変換 (‘schema-on-write’)
5. レポートを作成し、データを分析
ETL 専用ツール (e.g. SSIS)
Relational
LOB
Applications
クエリ
ETL パイプライン
スキーマの定義
結果
直ちに必要でないデータは、全て捨てられるか、アーカイブされている
全てのデータに価値がある
全てのデータに価値のある可能性
データの貯蔵
スキーマの定義なし— ネイティブのフォーマットのまま保存
スキーマは必要だが、変換はクエリ実行時 (schema-on-read)
アプリケーションとユーザーは、自分にフィットする形でデータを解釈
繰り返し
あらゆるデータソースからの
データ収集
制限のない保存
分析
結果の参照
Azure Data Lake service
無限にデータをストア・管理
Row Data を保存
高スループット、低いレイテンシの分析ジョブ
セキュリティ、アクセスコントロール
HDInsight & Azure Data Lake Analytics
Azure Data Lake store
Azure Data Lake
Store
Big Data 分析のための
ハイパースケールな
データリポジトリ
スケールに制限なし
全てのデータの種類をそのネイティブフォーマットで保存
クラウド上でのHDFS
企業利用のためのセキュリティ、
アクセス制御、暗号化など
分析用に最適化
Map reduce
Hive クエリ
HBaseトランザク
ション
HDFS アプリケーション
Azure HDInsight
Hadoop WebHDFS クライアント
WebHDFS
エンドポイント
WebHDFS
Hadoop WebHDFS クライアント
WebHDFS
REST API
REST API
Azure Data Lake Store
ADL Store file
ADL Store file
ADL Store file
ADL Store file
ADL Store file
Local




Azure Portal
Azure PowerShell
Azure CLI
Data Lake Tools for Visual Studio
Azure Data Factory
Apache Sqoop
 Azure Data Factory
 AdlCopy ツール
Azure Stream Analytics
Azure HDInsight Storm
ADL Store
 Apache DistCp
 Azure Data Factory
 AdlCopy ツール
https://www.microsoft.com/en-us/download/details.aspx?id=50358
<Blob source>
<ADLS destination>
<Key for Blob account>
<ADLA account>
<Number of Analytics units>
https://azure.microsoft.com/ja-jp/documentation/articles/data-lake-store-copy-data-azure-storageblob/
<container_name> <storage_account_name>
<data_lake_store_account>
https://azure.microsoft.com/ja-jp/documentation/articles/data-lake-store-copy-datawasb-distcp/
ロールベース・アクセス
個々のファイルとディレクトリは、
オーナーとグループに紐づく
ファイル、ディレクトリは、オーナー、グループの
メンバー、他のユーザーに対して、
read(r), write(w), execute(x)の
パーミッションを持つ
きめ細かなACLs(アクセス管理リスト)の
ルールにより、ユーザー名やグループ名を
指定して管理ができる
ADL Storeで個々のファイルはブロックに分割される
ブロックはバックエンドのストレージにおいて
複数のノードに分散配置される
Azure Data Lake Store file
Block 1
ストレージはAzure上で稼働し、
事実上無制限のリソースを持つ
メタデータは個々のファイルごとに保存される。
メタデータにも制限なし
Block
Data node
Block
Data node
Block 2
Block
Data node
…
Block
Data node
Backend Storage
Block 2
Block
Data node
Block
Data node
読み込み処理
並列処理により、ADL Storeは
高いスループットで動作する
Azure Data Lake Store file
Block 1
ADL Store上のファイルの読み込み処理は、
バックエンドの複数ノードに分散したストレージに対して
並列に実行される
Block
Data node
Block
Data node
Block 2
Block
Data node
…
Block
Data node
Backend Storage
Block 2
Block
Data node
Block
Data node
スケールに制限なし
Azure Data Lake
Analytics
全てのどんなサイズのデータ
でも処理できる
Apache YARNベースの
分析サービス
U-SQL, SQLのメリットにC#のパワーを加えた新しい言語
Data Lake Store に最適化
Azure データサービスへの FEDERATED QUERY
企業利用のためのセキュリティ、
アクセス制御、暗号化など
ジョブ単位での課金とスケール設定
Azure Data Lake Analytics
Azure SQL
Data Warehouse
Azure
SQL Database
Azure
Data Lake Store
Azure
Blob Storage
SQL DB
on Azure VM
多くの SQL & .NET DEVELOPERS
U-SQL
Big Data のための新しい言語
宣言型言語の SQL と 逐次実行型であるC#のパワーの
融合
構造化、一部構造化、非構造化データの融合
全てのデータに分散クエリの実施
一般的なパターン
読み込み
Azure
Storage
Blobs
Azure
SQL
DB
Azure
Data
Lake
処理
保存
EXTRACT
SELECT
EXTRACT
SELECT
OUTPUT
RowSet
SELECT…
FROM…
WHERE…
Azure
Storage
Blobs
RowSet
OUTPUT
INSERT
Azure
Data
Lake
Query 1
期間(終了時間 - 開始時間)を意味する10行のログレコードを、期間の降順で表示する
REFERENCE ASSEMBLY WebLogExtASM;
行セット: U-SQLはステートメント
間でデータを受け渡しする
(中間テーブルの概念に近い)
@rs =
EXTRACT
UserID string,
Start
DateTime,
End
DatetTime,
Region string,
SitesVisited
string,
PagesVisited
string
FROM "swebhdfs://Logs/WebLogRecords.txt"
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();
• U-SQL における型定義は C# の型定義
と同じ
• データをファイルから抽出・読み込みする
ときに、スキーマが必要
(schema-on-read)
入力はADLのファイルからの読み込み
入力ファイルを読み込むためのカスタム関数
C# の構文
出力はADLのファイルとして保存
TSV形式で出力するためのビルトイン
(あらかじめ用意されている)関数
ジョブはいくつかの Vertexに分割される
Vertexはそれぞれ実行する必要がある
Vertexはステージに展開される
– それぞれのステージにおけるVertexは、
同じデータに同じ処理をする
– あるステージのVertexは、前段階のステージの
Vertexに依存する
Input
6 ステージ
8 Vertex
ステージ自体は acyclic graph
(循環のないグラフ)によって展開される
Output
Output
ジョブがサブミットされたら、
ステージを渡ってゆくジョブ
実行の進捗が表示され、
継続的に更新される
ジョブに関する重要な統計
も表示され、継続的に
更新される
デバッグとパフォーマンスの
問題を助けるため、診断
情報が表示される
Query 2
リージョンごとにユーザー数をカウントする、総期間のAVG, MAX, MINを算出する
カスタムの集合関数で
拡張可能
@tmp1 = SELECT Region, (End.Subtract(Start)).TotalSeconds
AS Duration FROM @rs;
@rs1 = SELECT
COUNT() AS NumUsers,
Region,
SUM (Duration) AS TotalDuration,
AVG (Duration) AS AvgDuration,
MAX (Duration) AS MaxDuration,
MIN (Duration) AS MinDuration
FROM @tmp1
GROUP BY Region;
ビルトインのaggregation 関数
NumUsers
Region
TotalDuration AvgDuration MaxDuration MinDuration
1
1
“en-ca”
24
24
24
24
2
1
“en-ch”
10
10
10
10
3
1
“en-fr”
241
241
241
241
4
2
“en-gb”
688
344
614
74
5
1
“en-gr”
305
305
305
305
6
1
“en-mx”
422
422
422
422
7
16
“en-us”
8291
518
1270
30
• AVG
• MAX
• ARRAY_AGG
• MIN
• COUNT
• STDEV
• FIRST
• SUM
• LAST
• VAR
• MAP_AGG
Query 3
クエリのパフォーマンス改善
CREATE TABLE LogRecordsTable(UserId int, Start DateTime, End Datetime, Region string
INDEX idx CLUSTERED (Region ASC)
WebLogRecords.txt
PARTITIONED BY
HASH
必要な項目だけ
SELECTしてデータ移行
INSERT INTO LogRecordsTable
SELECT UserId, Start, End ,
Region
FROM @rs;
(Region));
テーブルに対して
直接のクエリ実行
Top10.Tsv
Azure Data Lake
@result =
SELECT UserID, (End.Subtract(Start)).TotalSeconds AS
Duration
FROM LogRecordsTable
ORDER BY Duration DESC FETCH 10;
OUTPUT @result TO “swebhdfs://Logs/Results/Top10.Tsv”
USING Outputters.Tsv();
パフォーマンス改善
2
INSERT INTO LogRecordsTable
SELECT UserId, Start, End, Region FROM @rs
1
CREATE TABLE
LogRecordsTable
(UserId int,
Start DateTime,
Region string,
INDEX idx CLUSTERED
(Region ASC)
PARTITIONED BY HASH
(Region));
Extent 1
Region = “en-us”
Extent 2
Region = “en-gb”
Extent 3
Region = “en-fr”
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
<><><><>
3
@rs = SELECT * FROM LogRecordsTable
WHERE Region == “en-gb”
インサート時に、
“Region” カラムに基づき、
3つの範囲に渡って
ハッシュ分散される
パーティションが
分かれている
‘範囲のまたがり’ を避けたパフォーマンス改善
非構造化データ
@rs1 =
SELECT Region, COUNT()
AS Total
FROM @rs
GROUP BY Region;
@rs2 =
SELECT TOP 100 Region,
Total
FROM @rs1
ORDER BY Total;
リージョンごとにクラスタ化されたテーブル
Extent 1
Extent 2
Extent 3
Extent 4
Extent 1
Extent 2
Extent 3
Extent 4
Read
Read
Read
Read
Read
Read
Read
Read
Partial agg
Partial agg
Partial agg
Partial agg
Full agg
Full agg
Partial agg
Partial agg
Sort
Sort
Full agg
Top 100
Top 100
Sort
Partition
Partition
Partition
Partition
高コストな処理
Full agg
Full agg
Top 100
Full agg
Top 100
Sort
Sort
Sort
Top 100
Top 100
Top 100
Query 4
全ての社員データをCSV出力する
T-SQL クエリ
Results
(C# types)
パススルー
T-SQL クエリ
ADL
Analytics Service
Results
(C# types)
購入発注
テーブル
Azure SQL DB
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("dahatakeSec",
$passwd)
New-AzureRmDataLakeAnalyticsCatalogSecret -DatabaseName "master" -AccountName
"dahatakeadla" -Secret $mysecret
-Host "dahatakesql.database.windows.net" -Port 1433
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();
資格情報オブジェクト: https://msdn.microsoft.com/ja-jp/library/azure/mt621327.aspx