사용하기 전에

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 클러스터 생성, 관리 및 사용 관련하여 아래 사용 가이드를 참고하실 수 있습니다.

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

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

    처리중...