사용하기 전에

Q. Ambari REST API 결과가 보이지 않습니다.

  • URI의 클러스터명은 대소문자를 구분하기 때문에, URI가 제대로 됐는지 확인합니다.
  • URI에 사용되는 IP 주소를 제대로 입력했는지 확인합니다.
    • API를 수행하는 서버가 네이버 클라우드 플랫폼[공공기관용] 내부 서버의 경우 사설 IP 주소 입력
    • API를 수행하는 서버가 네이버 클라우드 플랫폼[공공기관용] 외부 서버의 경우 공인 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를 수행하는 서버가 네이버 클라우드 플랫폼[공공기관용] 내부 서버인지, 외부 서버인지에 따라서 달라집니다.

내부 서버의 경우 사설 IP 주소를 사용하고, 외부 서버의 경우 공인 IP 주소를 사용해야 합니다. 상황에 맞게 사용할 IP 주소를 확인합니다.

  • 공인 IP 주소: 클러스터 관리 화면에서 확인할 수 있습니다.

  • 사설 IP 주소: Ambari 웹페이지의 Hosts에서 확인할 수 있습니다. m-001로 시작하는 호스트의 IP 주소를 사용합니다.

    chadoop-5-001

ACG 설정

Ambari REST API를 수행하는 응용 서버가 네이버 클라우드 플랫폼[공공기관용] 외부에 있을 경우, 클러스터 ACG에 8080 포트로 등록되어 있어야 REST API가 정상적으로 수행됩니다.

관리자 계정 확인

클러스터 생성 시 입력한 클러스터 관리자 계정 및 패스워드를 통해 Ambari REST API 인증을 합니다.

관리자 비밀번호를 잊어버렸을 경우 관리자 계정 패스워드를 초기화하여 다시 설정할 수 있습니다.

① 네이버 클라우드 플랫폼[공공기관용] 콘솔에서 Cloud Hadoop를 접속합니다.

chadoop-5-001

클러스터 관리 > 클러스터 관리자 패스워드 초기화 메뉴를 통해 클러스터 관리자 계정명을 확인합니다.

  • 패스워드를 잊어버렸을 경우, 패스워드를 다시 설정합니다.

chadoop-5-001

Ambari REST API의 URI

Ambari REST API의 URI는 API를 수행하는 서버가 네이버 클라우드 플랫폼[공공기관용] 내부 서버인지, 외부 서버인지에 따라서 달라집니다.

상황에 맞는 IP 주소를 사용하여 Ambari REST API의 URI를 작성합니다.

  • API를 수행하는 서버가 네이버 클라우드 플랫폼[공공기관용] 내부 서버이면 사설 IP 주소 사용(마스터 노드)
  • API를 수행하는 서버가 네이버 클라우드 플랫폼[공공기관용] 외부 서버이면 공인 IP 주소 사용

네이버 클라우드 플랫폼[공공기관용] 내부망에서는 서버끼리 사설 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 클러스터 생성, 관리 및 사용 관련하여 아래 사용 가이드를 참고하실 수 있습니다.

""에 대한 건이 검색되었습니다.

    ""에 대한 검색 결과가 없습니다.

    처리중...