Ambari REST API 사용
  • PDF

Ambari REST API 사용

  • PDF

Apache Ambari는 손쉬운 Web UI 및 REST API를 제공하여 Hadoop 클러스터의 관리 및 모니터링을 간소화합니다. 이 가이드에서는 Ambari REST API를 사용하는 방법에 대해 설명합니다. Ambari REST API의 더 자세한 정보는 Ambari API 참조 v1을 참고해 주십시오.

Ambari REST API의 URI 작성

Ambari REST API의 URI(Uniform Resource Identifier)는 API를 수행하는 서버가 네이버 클라우드 플랫폼의 내부 서버인지, 외부 서버인지에 따라서 달라집니다.

  • API를 수행하는 서버가 네이버 클라우드 플랫폼 내부 서버일 때: 사설(Private) IP 주소 사용 (마스터 노드)
  • API를 수행하는 서버가 네이버 클라우드 플랫폼 외부 서버일 때: DNS 사용

요청을 보내는 환경에 따라 다음과 같이 Ambari REST API의 URI를 작성해 주십시오.

  • AMBARI-ADDRESS: Public 도메인 입력
  • CLUSTER-NAME: 클러스터의 이름 (클러스터 이름은 대소문자를 구분하기 때문에 꼭 확인 필요)
http://<AMBARI-ADDRESS>:8080/api/v1/clusters/<CLUSTER-NAME>
주의

네이버 클라우드 플랫폼 내부망에서는 서버 간 사설 IP 주소를 통해 통신이 가능하고, 내부 통신은 과금 대상에서 제외됩니다. DNS를 통한 통신은 과금 대상이므로 꼭 필요한 경우에만 사용해 주십시오.

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)'

이 글이 도움이 되었나요?