Ambari REST API を使用する

Prev Next

最新のコンテンツが反映されていません。早急にアップデート内容をご提供できるよう努めております。最新のコンテンツ内容は韓国語ページをご参照ください。

VPC環境で利用できます。

Apache Ambariは、簡単な Web UIと REST APIを提供し、Hadoopクラスタの管理とモニタリングを簡素化します。本ガイドでは、Ambari REST APIの使用方法について説明します。Ambari REST APIの詳細情報は、Ambari API参照 v1をご参照ください。

Ambari REST APIの URI作成

次のように Ambari REST APIの URIを作成します。

  • AMBARI-ADDRESS: クラスタに割り当てられたドメインアドレスを入力
  • CLUSTER-NAME: クラスタ名(クラスタ名は大文字と小文字を区別するため、必ず確認が必要)
http://<AMBARI-ADDRESS>:8080/api/v1/clusters/<CLUSTER-NAME>

Ambari REST APIリクエスト

Curlを利用し、Ambari REST APIに GETリクエストを実行します。

  • example/pass123!@#: Ambariの管理者アカウント
curl -u "example:pass123!@#" -G "http://pub-68u67.hadoop.ntruss.com:8080/api/v1/clusters/test-spark"

上記のクラスタ情報を使用して REST APIを実行すると、以下のような JSONドキュメントが返されます。

# curlの実行
curl -u obj -G "http://pub-68u67.hadoop.ntruss.com:8080/api/v1/clusters/test-spark"
{
  "href" : "http://pub-68u67.hadoop.ntruss.com: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
....

jqコマンドでリターン値をパース

jqを利用して REST APIの結果として返される JSONドキュメントを一部フィルタリングしたり、変換できます。以下は jqを通じて JSON結果のうち Clustersの health_report 情報のみをフィルタリングする例です。

curl -u "example:pass123!@#" -G "http://pub-68u67.hadoop.ntruss.com:8080/api/v1/clusters/test-spark" | jq ".Clusters.health_report"
{
  "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
}

ユースケース

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

curl -u "example:pass123!@#" -G "http://pub-68u67.hadoop.ntruss.com:8080/api/v1/clusters/test-spark/hosts" | jq ".items[].Hosts.host_name"

マスターノードの FQDNを取得する

curl -u "example:pass123!@#" -G "http://pub-68u67.hadoop.ntruss.com:8080/api/v1/clusters/test-spark/services/HDFS/components/NAMENODE" | jq ".host_components[].HostRoles.host_name"

ワーカーノードの FQDNを取得する

curl -u "example:pass123!@#"-G "http://pub-68u67.hadoop.ntruss.com:8080/api/v1/clusters/test-spark/services/HDFS/components/DATANODE" | jq ".host_components[].HostRoles.host_name"

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

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

curl -u "example:pass123!@#" -G "http://pub-68u67.hadoop.ntruss.com:8080/api/v1/clusters/test-spark/hosts/d-002-test-spark-36m-hd" | jq ".Hosts.ip"

default.FSを取得する

Cloud Hadoopは基本保存場所として Object Storageを使用しており、その APIの結果値は hdfs://<クラスタ名(namespace名)>で返されます。

curl -u "example:pass123!@#" -G "http://pub-68u67.hadoop.ntruss.com:8080/api/v1/clusters/test-spark/configurations/service_config_versions?service_name=HDFS&service_config_version=1" | jq '.items[].configurations[].properties["fs.defaultFS"] | select(. != null)'