Ambari에 연결하여 hdfs 평균 디스크 사용률 계산

Q·2023년 6월 23일
0

✅ 개요

  • hdfs 리밸런싱을 하기전에 각 노드의 디스크 사용률전체 디스크 평균 사용률을 보려고 했는데
  • Ambari나 어디에도 전체 디스크 평균 사용률을 보여주는 곳이 없다.
  • 그래서 내가 만들었다.
  • 하둡의 버전은 2.6을 기준으로 코드를 작성하였다.

✅ 코드

import requests
import json


ambari_host = 'host'
ambari_port = '8080'
username = 'username'
password = 'pw'

# 클러스터 이름을 가져오는 URL
cluster_url = f"http://{ambari_host}:{ambari_port}/api/v1/clusters"

# Ambari REST API를 호출하여 클러스터 이름을 가져옵니다.
response = requests.get(cluster_url, auth=(username, password))

# 클러스터 이름을 변수에 저장
if response.status_code == 200:
    data = json.loads(response.text)
    cluster_name = data['items'][0]['Clusters']['cluster_name']
else:
    print(f"Error fetching cluster name: {response.status_code}")
    exit()

# 각 DataNode의 디스크 사용률을 가져오는 URL
disk_usage_url = f"http://{ambari_host}:{ambari_port}/api/v1/clusters/{cluster_name}/hosts?fields=metrics/disk/disk_free,metrics/disk/disk_total"

# Ambari REST API를 호출하여 각 DataNode의 디스크 사용률을 가져옵니다.
response = requests.get(disk_usage_url, auth=(username, password))

# 각 DataNode의 디스크 사용률을 출력 및 평균 계산을 위한 변수 초기화
total_disk_usage_percent = 0
node_count = 0

# 각 DataNode의 디스크 사용률을 출력
if response.status_code == 200:
    data = json.loads(response.text)
    for item in data['items']:
        host_name = item['Hosts']['host_name']
        disk_free = item['metrics']['disk']['disk_free']
        disk_total = item['metrics']['disk']['disk_total']
        disk_usage_percent = (1 - (disk_free / disk_total)) * 100
        print(f"{host_name} - Disk Usage: {disk_usage_percent:.2f}%")

        # 평균 계산을 위한 누적 합계 및 노드 수 업데이트
        total_disk_usage_percent += disk_usage_percent
        node_count += 1
else:
    print(f"Error fetching disk usage: {response.status_code}")

# 평균 디스크 사용률 출력
average_disk_usage_percent = total_disk_usage_percent / node_count
print(f"Average Disk Usage across DataNodes: {average_disk_usage_percent:.2f}%")
profile
Data Engineer

0개의 댓글