✅ 개요
- hdfs 리밸런싱을 하기전에 각 노드의 디스크 사용률과 전체 디스크 평균 사용률을 보려고 했는데
- Ambari나 어디에도 전체 디스크 평균 사용률을 보여주는 곳이 없다.
- 그래서 내가 만들었다.
- 하둡의 버전은 2.6을 기준으로 코드를 작성하였다.
✅ 코드
import requests
import json
ambari_host = 'host'
ambari_port = '8080'
username = 'username'
password = 'pw'
cluster_url = f"http://{ambari_host}:{ambari_port}/api/v1/clusters"
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()
disk_usage_url = f"http://{ambari_host}:{ambari_port}/api/v1/clusters/{cluster_name}/hosts?fields=metrics/disk/disk_free,metrics/disk/disk_total"
response = requests.get(disk_usage_url, auth=(username, password))
total_disk_usage_percent = 0
node_count = 0
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}%")