Documentation Index

Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt

Use this file to discover all available pages before exploring further.

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のインストールを行います。

$ sudo yum install -y epel-release
$ sudo -s
$ yum -y install jq			# jqのインストール
$ jq --help					# jqのインストール有無を確認

以下は 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)'