使用前に

Q. Ambari REST API 結果が表示されません。

  • URIのクラスタ名は大小文字を区別するため、URIが正確であるかを確認します。
  • URIに使用されるIPアドレスを正確に入力したか確認します。
    • APIを実行するサーバがNAVERクラウドプラットフォーム内部サーバの場合、プライベートIPアドレスを入力
    • APIを実行するサーバがNAVERクラウドプラットフォーム外部サーバの場合、パブリックIPアドレスを入力
  • 外部サーバでAPIを実行する場合、クラスタACGに8080ポートで登録されたか確認します。
    • 内部サーバでAPIを実行する場合は設定しなくても結構です。

Ambari REST APIを通じた管理

Apache Ambariは簡単なウェブUI及びREST APIを提供してHadoopクラスタの管理及びモニタリングを簡素化します。このガイドではAmbari REST APIを使用する方法について説明します。

Ambari REST APIのより詳しい情報は Ambari API 参照書 v1をご参照ください。

事前作業

ユーティリティの設置

Ambari REST APIを使用する自分のアプリケーションサーバに以下のユーティリティが設置されていなければなりません。

  • CURL: コマンドラインでRUL形態のリソースをリクエスト/レスポンスするツールです。Ambari REST APIと通信するのに使われます。
  • JQ: コマンドラインでJSON文書を使用するためのツールです。定型化されたJSONデータから必要な結果を探したりデータを分けたり、変換するのに使用できます。

IPアドレスの確認

Ambari REST APIのURIはAPIを実行するサーバがNAVERクラウドプラットフォーム内部サーバか、外部サーバかによって異なります。

内部サーバの場合はプライベートIPアドレスを使い、外部サーバの場合はパブリックIPアドレスを使わなければなりません。状況に応じて使用するIPアドレスを確認します。

  • パブリックIPアドレス:クラスタ管理画面から確認できます。

  • プライベートIPアドレス: Ambari ウェブページの Hostsで確認できます。m-001で始まるホストのIPアドレスを使用します。

    chadoop-5-001

ACG 設定

Ambari REST APIを実行するアプリケーションサーバがNAVERクラウドプラットフォーム外部にある場合、クラスタACGに8080ポートで登録されているとREST APIが正常に実行されます。

管理者アカウントの確認

クラスタ生成の際に入力したクラスタ管理者アカウント及びパスワードで Ambari REST API 認証を行います。

管理者パスワードを忘れた場合、管理者アカウントパスワードを初期化して再度設定できます。

① NAVERクラウドプラットフォームコンソールでCloud Hadoopにアクセスします。

chadoop-5-001

クラスタ管理 > クラスタ管理者パスワードの初期化 メニューを通じてクラスタ管理者アカウント名を確認します。

  • パスワードを忘れた場合、パスワードを再度設定します。

chadoop-5-001

Ambari REST APIのURI

Ambari REST APIのURIはAPIを実行するサーバがNAVERクラウドプラットフォーム内部サーバか、外部サーバかによって異なります。

状況に応じたIPアドレスを使用してAmbari REST APIのURIを作成します。

  • APIを実行するサーバがNAVERクラウドプラットフォーム内部サーバであればプライベートIPアドレスを使用(マスターノード)
  • APIを実行するサーバがNAVERクラウドプラットフォーム外部サーバであればパブリックIPアドレスを使用

NAVERクラウドプラットフォーム内部ネットワークではサーバ同士でプライベートIPアドレスを通じて通信でき、内部通信は請求の対象から除外されます。

注意 パブリックIPアドレスを通じた通信は請求の対象ですので必ず必要な場合のみ使用します。

http://(IP_ADDRESS):8080/api/v1/clusters/(CLUSTERNAME)
  • IP_ADDRESSには状況に応じてクラスタプライベートIPアドレスまたはパブリックIPアドレスを使用します。CLUSTERNAMEはクラスタ名です。
  • クラスタ名は大小文字を区別するので、必ず確認してください。

以下はパブリックIPアドレスを使用してURIを作成する例です。

chadoop-5-001

上のクラスタのURIはhttp://10.10.10.10:8080/api/v1/clusters/test-sparkです。

Ambari REST APIのURIを実行

応用サーバからcurlを利用してAmbari REST APIにGETリクエストを実行します。

curl -u 管理者アカウント -G "http://IP_ADDRESS:8080/api/v1/clusters/CLUSTERNAME"

REST API認証情報はクラスタ生成の際に入力したクラスタ管理者アカウント及びパスワードです。 状況に適したIPアドレスとクラスタ名を確認してURIを生成してAPIを呼び出します。

上のクラスタ情報を使ってREST APIを実行すると以下のような JSON 文書が表示されます。

##curl 実行
curl -u obj -G "http://10.10.10.10:8080/api/v1/clusters/test-spark"

##JSON 結果
  "href" : "http://10.10.10.10:8080/api/v1/clusters/test-spark",
  "Clusters" : {
    "cluster_id" : 2,
    "cluster_name" : "SPARK",
    "health_report" : {
      "Host/stale_config" : 0,
      "Host/maintenance_state" : 0,
      "Host/host_state/HEALTHY" : 3,
      "Host/host_state/UNHEALTHY" : 0,
      "Host/host_state/HEARTBEAT_LOST" : 0,
      "Host/host_state/INIT" : 0,
      "Host/host_status/HEALTHY" : 3,
      "Host/host_status/UNHEALTHY" : 0,
      "Host/host_status/UNKNOWN" : 0,
      "Host/host_status/ALERT" : 0
....

JSONデータ文の分析

JQを用いてREST API結果に表示されるJSON 文書を一部フィルタリングしたり変換できます。

以下はJQを通じて JSON結果の中、Clustersの health_report 情報のみフィルタリングした例です。

## curl 結果 JSONをjqでフィルタリング
curl -u 管理者アカウント -G "http://IP_ADDRESS:8080/api/v1/clusters/CLUSTERNAME"
| jq '.Clusters.health_report'

## フィルタリングされたJSONの結果
{
  "Host/stale_config": 0,
  "Host/maintenance_state": 0,
  "Host/host_state/HEALTHY": 4,
  "Host/host_state/UNHEALTHY": 0,
  "Host/host_state/HEARTBEAT_LOST": 0,
  "Host/host_state/INIT": 0,
  "Host/host_status/HEALTHY": 4,
  "Host/host_status/UNHEALTHY": 0,
  "Host/host_status/UNKNOWN": 0,
  "Host/host_status/ALERT": 0
}

REST APIの例

全てのノードFQDN(正規化されたドメイン名) を得る

curl -u 管理者アカウント -G "http://IP_ADDRESS:8080/api/v1/clusters/CLUSTERNAME/hosts" | jq '.items[].Hosts.host_name'

マスターノードFQDN を得る

curl -u 管理者アカウント -G "http://IP_ADDRESS:8080/api/v1/clusters/CLUSTERNAME/services/HDFS/components/NAMENODE" | jq '.host_components[].HostRoles.host_name'

作業机ノードFQDNを得る

curl -u 管理者アカウント -G "http://IP_ADDRESS:8080/api/v1/clusters/CLUSTERNAME/services/HDFS/components/DATANODE" | jq '.host_components[].HostRoles.host_name'

クラスタノード内部のIPアドレスを得る

IPアドレスを探すためにはクラスタ内部のFQDNを知る必要があります。まず、AmbariをクエリしてホストノードのFQDNを得た後に、再度Ambariをクエリして各ホストのIPアドレスを探します。

curl -u 管理者アカウント -G "http://IP_ADDRESS:8080/api/v1/clusters/CLUSTERNAME/hosts/HOSTFQDN" | jq '.Hosts.ip'

defalt.FS を得る

Cloud Hadoopは基本保存所としてObject Storageを使用しており、当該APIの結果値は s3a://ObjectStorageバケット名で表示されます。

curl -u 管理者アカウント -G "http://IP_ADDRESS:8080/api/v1/clusters/CLUSTERNAME/configurations/service_config_versions?service_name=HDFS&service_config_version=1" | ./jq-linux64 '.items[].configurations[].properties["fs.defaultFS"] | select(. != null)'

Ambari REST APIに関する詳しい情報は Ambari API 参照 v1をご参照ください。

関連情報へショートカット

Hadoopクラスタの生成、管理及び使用については以下の使用ガイドをご参照ください。

に対する検索結果は~件です。 ""

    に対する検索結果がありません。 ""

    処理中...