Azureアーキテクチャガイドまとめ 7 【ビッグデータアーキテクチャ】

## はじめに
[**Azureクラウドアプリケーションアーキテクチャガイド**](https://azure.microsoft.com/ja-jp/campaigns/cloud-application-architecture-guide/)より、**ビッグデータアーキテクチャ**に関してまとめます。

#### 連載目次
[Azureアーキテクチャガイドまとめ 1 【はじめに】](https://qiita.com/Catetin0310/items/74249f333d9fbfccd543)
[Azureアーキテクチャガイドまとめ 2【N層】](https://qiita.com/Catetin0310/items/1ab0ae1130f767d770d3)
[Azureアーキテクチャガイドまとめ 3 【Webキューワーカー】](https://qiita.com/Catetin0310/items/fe0729549faeee843e8a)
[Azureアーキテクチャガイドまとめ 4 【マイクロサービス】](https://qiita.com/Catetin0310/items/06ab890a04baa161cac6)
[Azureアーキテクチャガイドまとめ 5 【CQRS】](https://qiita.com/Catetin0310/items/d0e8b489f6501e4da90b)
[Azureアーキテクチャガイドまとめ 6 【イベントドリブンアーキテクチャ】](https://qiita.com/Catetin0310/items/58f65242a7b71620825b)
Azureアーキテクチャガイドまとめ 7 【ビッグデータアーキテクチャ】 → 本記事
[Azureアーキテクチャガイドまとめ 8 【ビッグコンピューティングアーキテクチャ】](https://qiita.com/Catetin0310/items/eebd754637dcda8ad14d)



## ビッグデータの背景と最近の流れ
まずはビッグデータが発生した背景と、それを取り巻く近年の流れを整理します。

以下に挙げる変化により、そのままの形では解析に要する計算資源の確保が現実的でないほどに大きなデータセットの蓄積が可能になりました。

- ストレージコストの低下
- データ収集手段の増加
- データ収集のスピードアップ

これに応じて、データを**分割**し、**並列処理**を行い、最終的にそれらを**統合**して分析結果を出力する、というアーキテクチャの要請が強くなっていきます。**Hadoop**や**Apache Spark**は、そんな中開発されたオープンソースフレームワークの代表選手です。

以前はこれらを使いこなすために高いスキルが必要でしたが、現在はハードルを数段下げてくれるAIサービスが揃ってきています。Azureサービスで代表的なものは以下の3種類。

- **Machine Learning Services**: 専門家向け分析基盤
- **Databricks**: 非専門家にも扱いやすい分析基盤
- **Cognitive Services**: AIのアプリ実装のためのAPI

以下のように自身のスキルや要件に応じて選ぶのが良さそうです。

![03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/a38e5455-6ed6-7c6d-1d7b-e95c40d5ba06.jpeg)

## 概要
スタイルの説明に入ります。従来のデータベースシステムにとって、**大きすぎる/複雑すぎるデータ**の処理や分析を行うのに適したアーキテクチャです。例えば以下のようなケース。

- 保管中のビッグデータソースの**バッチ処理**
- 伝送中のビックデータの**リアルタイム処理**
- ビックデータの**対話的な調査**
- **予測分析**
- **機械学習**


## コンポーネント
ほとんどのビックデータアーキテクチャには次のコンポーネントの一部、またはすべてが含まれます。

- **データソース**
    - アプリケーションデータストア (RDBなど)
    - 静的ファイル (ログファイルなど)
    - リアルタイムデータソース (IoTデバイスなど)
- **ストレージ**
    - 一般にデータレイクと呼ばれる
    - 分散型ファイルストア
    - 様々な形式の大規模ファイルを大量に保存
- **バッチ処理**
    - データセットが非常に大きいため、バッチ処理が必要
- **リアルタイムのメッセージ取り込み**
    - キャプチャして保存する手段をアーキテクチャに取り込む
    - メッセージ取り込みストア
- **ストリーム処理**
- **分析データストア**
- **分析とレポート作成**
- **オーケストレーション**

データを集めるところから含めると、ざっくりと以下のような流れになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/cb98ce71-d06b-fe4f-1cb3-86e20a7e495f.png)

## 対応するAzureサービス
**データの保存や中継点に使用するサービス**、Hadoopベースのテクノロジスタックである**HDInsight**に加えて、よりマネージドな分析環境構築が可能な**AIサービス群**もまとめます。

### [Machine Learning Service](https://azure.microsoft.com/ja-jp/services/machine-learning-service/)

- **モデルの構築**
- クラウドからエッジまで**場所を選ばないデプロイ**
- デスクトップからオンデマンドでの**スケーリング**
- 自動化された特徴量エンジニアリング、アルゴリズム選択、ハイパーパラメータスイープ
- ドラッグアンドドロップ対応の**ビジュアルインターフェイス**あり
- **MLOps** (機械学習用のDevOpcs) 
    - 学習のライフサイクル全体の管理
    - パイプラインの構築・効率化
    - デプロイ済モデルのパフォーマンス管理
- 各種データサイエンス向けフレームワーク及びライブラリサポート



### [Azure Databricks](https://azure.microsoft.com/ja-jp/services/databricks/)
- 高速で最適化された**Apache Spark環境**を数分でセットアップ
- Azure Machine Learningが**ネイティブ統合**
- **自動でスケーリング**
- GitHubとAzure DevOpsで容易に**ノートブックのバージョン管理**
- 各種データサイエンス向けフレームワーク及びライブラリサポート
- 多種の言語サポート
    - Python
    - Scala
    - R
    - Java
    - SQL
- データの取得から**分析から可視化までのシームレスな連携**
![2019-08-05_16h41_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/45178af1-9e0f-a9c5-0b5a-ee2af432e2e0.png)

### [Cognitive Services](https://azure.microsoft.com/ja-jp/services/cognitive-services/)
以下5つのカテゴリで、学習済AIのAPIが用意されています。本当に数多くのサービスがあるので、[**こちら**](https://azure.microsoft.com/ja-jp/services/cognitive-services/directory/)をチェックしてみてください。プレビューを見てみるだけでも面白いですよ。

- **視覚**
- **音声**
- **言語**
- **決定**
- **検索**



### **データの保存や中継点に使用するサービス**
分析基盤のコアサービス周辺を支えるサービス群です。

- [Azure Data Factory](https://azure.microsoft.com/ja-jp/services/data-factory/)
- [Azure Data Lake Storage](https://azure.microsoft.com/ja-jp/services/storage/data-lake-storage/)
- [Azure Data Lake Analytics](https://azure.microsoft.com/ja-jp/services/data-lake-analytics/)
- [Azure Data Warehouse](https://azure.microsoft.com/ja-jp/services/sql-data-warehouse/)
- [Azure Stream Analytics](https://azure.microsoft.com/ja-jp/services/stream-analytics/)
- [Azure Event Hub](https://azure.microsoft.com/ja-jp/services/event-hubs/)
- [Azure IoT Hub](https://azure.microsoft.com/ja-jp/services/iot-hub/?&OCID=AID2000091_SEM_OM1DnTCj&MarinID=OM1DnTCj_324635775278_azure%20iot%20hub_e_c__63449910935_aud-394034018570:kwd-309269694655&lnkd=Google_Azure_Brand&dclid=CjkKEQjwvo_qBRDr2Y-w1dLj69wBEiQALL9FRsKiUo9ShCzU6UtmFIQA8x93rtGr6vpLT3oKCU3psLfw_wcB)
![02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/b91cf0cd-5bef-d662-3984-d4d6320ff552.jpeg)

### [**HDInsight**](https://azure.microsoft.com/ja-jp/services/hdinsight/)
Apache Hadoopのオープンソース分析プラットフォーム各種を統合的に使えるようにしたサービスが**HDInsight**です。
![01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/83844321-5d27-3570-aacd-b5e935960ea0.jpeg)


## 利点
- AzureマネージドサービスとApacheテクノロジを混在させ、**既存のスキルや投資を活用**
- 並列処理による**ハイパフォーマンス**
- スケールアウトプロビジョニングによる**柔軟な拡張性**
- 既存のソリューションとの**相互運用性**


## 課題
- 複雑性
    - 複数の処理が必要になるので、**複雑なアーキテクチャ**になる
    - 構築、テスト、トラブルシューティングが困難な作業になりやすい
    - パフォーマンス最適化のために多数の構成設定を使用する必要がある場合あり

- スキルセット
    - 高度に専門的で他のアプリケーションアーキテクチャでは一般的でないフレームワークや言語
    - 一方で普及している言語に基づいた**新しいAPI**も生まれている
- テクノロジの成熟度
    - テクノロジの多くは**現在も進化中**
    - Sparkのような新しいテクノロジの場合、**新リリースのたびに大幅な変更や機能拡張**も
    - **マネージドサービスも今後進化**していく可能性が高い
- セキュリティ
    - データはデータレイクに集中的に保存
    - この**データへのアクセス保護**に困難が伴う場合も




## ベストプラクティス
本アーキテクチャのベストプラクティスは以下の通り。AIサービスの活用によって、かなりのパートがカバーされます。

- 並列処理
    - 静的データファイルを**分割可能な形式で作成・保存**
    - 複数のクラスターノードの**並列実行**でジョブ時間の短縮

- データの分割
    - データファイルとテーブルなどの**データ構造を分割**
    - クエリで用いられる**テーブルの分割**
    - データ取り込みやジョブスケジューリングの簡略化

- データレイクの使用
    - 「収集 → 蓄積 → 処理 → 分析・ビジュアライズ」の順になるような分析基盤
    - データは処理の前にスキーマを適用
    - アーキテクチャに柔軟性が生まれ、データ取り込みのボトルネックを防げる
- 適所でのデータ処理
    - データを分散データストアで処理し、必要な構造に変換して分析へ
    - 変換 → 抽出 → 読み込みの順
- 使用率と時間コストのバランス
    - クラスターの処理時間、個数、単価を考慮
    - 最も費用対効果の高い構成にする
- クラスターリソースの分割
    - ワークロードに応じて分割することでパフォーマンスを向上
- データ取り込みの調整・オーケストレーション
    - Azure Data Factoryやオーケストレーションワークフロー、パイプラインを使用
- 機密データの除外
    - データ取り込みの早い段階で機密性の高いデータを除外し、データレイクに保存されないようにする


## まとめ
ビッグデータアーキテクチャの特徴と使用されるサービスについて見ていきました。次回は最後の一つ、ビッグコンピューティングアーキテクチャについてまとめます。お楽しみに！

## 参考リンク
[**Azureアーキテクチャセンター**](https://docs.microsoft.com/ja-jp/azure/architecture/)
[**Azureクラウドアプリケーションアーキテクチャガイド ダウンロードページ**](https://azure.microsoft.com/ja-jp/campaigns/cloud-application-architecture-guide/)
[**ビッグデータアーキテクチャ**](https://docs.microsoft.com/ja-jp/azure/architecture/data-guide/big-data/)