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
© Copyright 2024 ExpyDoc