Azure で提供しているHDInsight Spark は、現在のところ 1.5.2、1.6.2、1.6.3、2.0.2、2.1.0 (プレビュー) がリリースされています。各ノードは全てLinux(Ubuntu)の仮想VMが使われておりSparkのバージョンにより、Ubuntu のバージョンは少しづつ異なります。なお対応する仮想VM はこちらのリンクHDInsight の価格を参照いただきたいのですが、注意点としまして、
デプロイ後は仮想VMの種類を変更することができない。
コスト削減のためにAシリーズの低価格のものを使用すると、パフォーマンスが出ない恐れがあるので、ヘッドノード・ワーカーノード共にデフォルト以上の性能の仮想VMを推奨します。(ここでデフォルトとはポータルでデプロイ時にあらかじめセットされているVMタイプのことを指します)
ちなみにデプロイすると、以下のような物理構成で環境が構築されます。
![hdispark-struture.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F168934%2Fa3c9d9f2-eb7d-a379-b304-f6fb803375d8.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=a991ad7ed96bd3d251aa6eb4454cacef)
以下にそれぞれの部分について説明をすると、
ヘッドノード
ヘッドノード(マスターノードとも言います)は、デフォルトで2重化されており、主にクラスタやSpark ジョブの管理・制御用のコンポーネントや、Jupyter のようなアプリケーションがインストールされています。それぞれのモジュールは様々にいろんな機能を提供しているので、ここでは詳細な説明を避けますが、主に以下のコンポーネントが含まれます。
- Resource Manager (YARN)
- NameNode(HDFS)
- Hive Metastore
- HiveServer2
- App Timeline Server
- History Server
- Ambari Metrics Collector / Metrics Monitor
- Thrift サーバ
- Jupyter
- Livy
- Oozie など。
ヘッドノードは2重化されているため、Resouce Manager やNameNode はActive/Stanby 構成を取っており冗長化しています。Hive Metastore と HiveServer2 は両方のノードでActive な状態で動作しています。またApp Timeline Server とHistory Server は両方のノードにインストールされていますが、Ambari Metrics Collector が動作している方のノードのみで動作するようになっています。
##ワーカーノード
ワーカーノードは実際にSpark ジョブが実際に動作する仮想VM なので、ジョブ実行に必要なものがインストールされており、ヘッドノードに比べると、以下のような必要最小限のコンポーネントのみが含まれます。
- NodeManager(YARN)
- DataNode(HDFS)
- Metrics Monitor(Ambari)
- Zookeeper
##Zookeeper
Zookeeper は、分散環境での設定情報の集中管理や、リソースの競合を防止するための機構を提供したり、自動フェイルオーバーの提供などを行います。上述のResouce Manager(YARN)やNameNode(HDFS)のActive/Stanby 構成はZookeeperによるものです。ちなみにZookeeperには、A シリーズの仮想VM が使用されているのですが、VM タイプをデプロイ時やデプロイ後に変更することができません。またデプロイすると3台のZookeeperが構築されますが、台数を増やすことも現状サポートされておりません。ちなみにSpark のZookeeper は課金対象となっていないです。
##ゲートウェイノード
Azure ポータルから確認することはできませんが、2台のGateway ノードというものが裏で存在しています。HDInsight Spark をデプロイすると各ノードの仮想VM は仮想ネットワーク上に構成されるようになり、それぞれのノードの通信は仮想ネットワークを介して行われることになります。ただしユーザは直接ノードにアクセスすることができず、Gateway を介してノードへのアクセスが許可されています。外部からのアクセスはデフォルトではヘッドノードへのSSH とAmbari のWEB UI へのアクセスのみが許可されていますが、アクセス時のユーザ認証やリクエストのフォワーディングはGateway によって自動制御されています。Gateway は外からは見えないためユーザは一切管理を行う必要がありません。
##Azure Blob ストレージ
Blob ストレージは、HDInsight Spark のデフォルトストレージとして使用されています。IFとしてはHDFS ですが中身がBlob ストレージとなっています。そのため、SSH でノードにログインしてhadoop コマンドでストレージの中身にアクセスすることも可能となっています。普通のSpark のようにHDFS を構築することも可能ではありますが、Azure 上での取り扱いの良さを考慮して、Blob ストレージがデフォルトとして採用されていると思われ、開発時などはAzure Storage Explorer が利用できることから非常に重宝しています。
##エッジノード
最後にエッジノード(任意で追加可能)というものがあります。例えばHDInsight のクラスターに作業用のLinux VM や何がしかのアプリを動作させるためのノードを追加したいことがあるかと思います。個別にLinux の仮想VM を立てても良いのですが、エッジノードとしてVM を追加すると、デフォルトで Spark2 Client やYARN Client などのクライアントツールが事前にインストールされたVM をクラスタへ追加することが可能になります。詳細はHDInsight での空のエッジ ノードの使用を参照ください。なおエッジノードを追加すると、下記のようにポータルやAmbari(赤枠内)からもノードの情報が見えるようになります。
![hdinodes2.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F168934%2F02e0dd86-c6a4-8800-7e17-598b19229f5b.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5e40c5e94cce377e1ece5ee07792840d)
![hdi-portal-nodes.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F168934%2Ffc7958e9-547e-c873-947f-06dd0032a80f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c0f9f26b98f43a4a03be45ebba14f13e)