Hadoop의 HDFS를 사용하다보면 현재 HDFS의 사용량을 여러가지 방법들로 확인합니다. 예를 들어 NameNode의 Web UI를 접속해 확인하거나 Ambari와 같은 배포판 관리 시스템에서도 쉽게 확인할 수 있습니다. 그런데 만약 모니터링 시스템을 직접 개발해서 사용한다면 코드 상에서 어떻게 HDFS의 정보를 가져올 수 있을까요? 이 방법에 대해 소개해드리겠습니다.
NameNode Web UI
우리가 흔히 원하는 HDFS 정보들은 NameNode Web UI에서 모두 제공을 하고있습니다. 보통 NameNode의 50070 포트로 쉽게 접속할 수 있습니다. ( http://{NameNode}:50070 )
NameNode JMX
위의 NameNode Web UI는 HDFS 정보들을 어디서 가져오는 것일까요? 구글링을 여러가지 키워드로 검색해봤지만 원하는 답을 알 수 없었습니다. 그래서 결국 NameNode Web 소스 코드를 확인해봤습니다.
위의 GUI에서 제가 원하는 정보인 "DFS Used"를 Hadoop Github에서 검색해 html 파일을 찾았습니다.
https://github.com/apache/hadoop
dfshealth.html
{#nn}
<table class="table table-bordered table-striped">
<tr><th> Configured Capacity:</th><td>{Total|fmt_bytes}</td></tr>
<tr><th> Configured Remote Capacity:</th><td>{ProvidedCapacity|fmt_bytes}</td></tr>
<tr><th> DFS Used:</th><td>{Used|fmt_bytes} ({PercentUsed|fmt_percentage})</td></tr>
<tr><th> Non DFS Used:</th><td>{NonDfsUsedSpace|fmt_bytes}</td></tr>
<tr><th> DFS Remaining:</th><td>{Free|fmt_bytes} ({PercentRemaining|fmt_percentage})</td></tr>
<tr><th> Block Pool Used:</th><td>{BlockPoolUsedSpace|fmt_bytes} ({PercentBlockPoolUsed|fmt_percentage})</td></tr>
<tr><th> DataNodes usages% (Min/Median/Max/stdDev): </th>
<td>{#NodeUsage.nodeUsage}{min} / {median} / {max} / {stdDev}{/NodeUsage.nodeUsage}</td></tr>
{/nn}
dfshealth.html 파일에서 해당 값을 사용하는 것을 확인했습니다. 그리고 html 파일이 있는 경로에 비슷한 이름으로 dfshealth.js 파일을 발견했습니다. 그래서 dfshealth.js 파일을 확인한 결과 HDFS 정보를 가져오는 출처를 알 수 있어습니다.
dfshealth.js
$.get(
'/jmx?qry=Hadoop:service=NameNode,name=NameNodeInfo',
guard_with_startup_progress(function (resp) {
var data = workaround(resp.beans[0]);
....
dfshealth.js에서 JMX 호출을 통해 NameNode의 metric 값을 가져오는 것을 확인할 수 있었습니다. 그래서 해당 주소로 제가 사용하는 NameNode에 접근해봤습니다. 결과는 원하는 정보를 문제없이 불러올 수 있었습니다.
위의 Metric에서 현재 HDFS의 전체 용량, 사용량, 사용률, node별 사용 현황 등 여러가지 값들을 받을 수 있습니다.
NameNodeInfo라는 이름의 Metric 값을 불러왔는데 다른 Metric 값은 없을까하는 궁금증이 생겼습니다. 그래서 위의 주소 값에서 jmx만 남겨두고 확인을 해봤습니다.
그 결과 HDFS의 여러 Metric 값들을 모두 확인할 수 있었습니다. 만약 웹이나 여러 프로그래밍 코드에서 해당 HDFS 정보를 이용하고 싶다면 JMX Metric 값들을 호출해서 HTTP response로 활용할 수 있을 것 같습니다.
'Hadoop Ecosystem > Hadoop' 카테고리의 다른 글
[Hadoop] YARN Capacity scheduler 특징 및 Queue 옵션 (0) | 2022.04.22 |
---|---|
[Hadoop] HDFS NameNode의 Metadata 관리와 Failover 상세 과정 (0) | 2022.02.15 |
[Hadoop] YARN - Yet Another Resource Negotiator (0) | 2021.06.12 |
[Hadoop] MapReduce - Simplified Data Processing on Large Clusters (0) | 2021.03.25 |
[Hadoop] HDFS - The Hadoop Distributed File System (0) | 2021.03.14 |