메뉴 건너뛰기

Cloudera, BigData, Semantic IoT, Hadoop, NoSQL

Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.


Hadoop Cacti로 Hadoop 모니터링 하기

구퍼 2013.03.12 15:22 조회 수 : 2732

Cacti로 Hadoop 모니터링 하기

설치된 하둡을 모니터링해보려고 한다.

일전에 설치해본 Cacti 가 모니터링 도구로써 좋은 듯 하여,
하둡도 가능한가 찾아보니 좋은 자료가 있다.
http://www.jointhegrid.com/hadoop/ 를 거의 그대로 따라해본다.

설치방법은 http://www.jointhegrid.com/svn/hadoop-cacti-jtg/trunk/doc/INSTALL.txt

하둡도 설치했고, HBase도 설치한 상태로 가정한다.

먼저 Hadoop 쪽 metrics 설정

# vi /usr/local/hadoop/conf/hadoop-metrics2.properties

#
# Setup all metrics objects to use NullContextWithUpdateThread. The period
# must match the period of your polling. For example my monitoring station
# polls at 5 minute intervals. Thus I have set period to 300(seconds).
#

dfs.class=org.apache.hadoop.metrics.spi.NullContextWithUpdateThread
dfs.period=300

jvm.class=org.apache.hadoop.metrics.spi.NullContextWithUpdateThread
jvm.period=300

다음은 HBase에서 JMX 사용하기 위해 설정한다.
HBase Metrics (http://hbase.apache.org/metrics.html) 참조

HBase 쪽 metrics 설정

# vi /usr/local/hbase/conf/hadoop-metrics.properties

# Configuration of the “hbase” context for null
# hbase.class=org.apache.hadoop.metrics.spi.NullContext
hbase.class=org.apache.hadoop.metrics.spi.NullContextWithUpdateThread
hbase.period=300

# Configuration of the “jvm” context for null
# jvm.class=org.apache.hadoop.metrics.spi.NullContext
jvm.class=org.apache.hadoop.metrics.spi.NullContextWithUpdateThread
jvm.period=300

# Configuration of the “rpc” context for null
# rpc.class=org.apache.hadoop.metrics.spi.NullContext
rpc.class=org.apache.hadoop.metrics.spi.NullContextWithUpdateThread
rpc.period=300

이제는 다시 Hadoop 으로 와서 JMX Remote Access 설정을 하자.

jmxremote.passwd 파일 생성 후 설정

# vi /usr/local/hadoop/conf/jmxremote.passwd

monitorRole monitorpass
controlRole controlpass

퍼미션 600으로 변경

# chmod 600 /usr/local/hadoop/conf/jmxremote.passwd

jmxremote.access 파일 생성 후 설정

# vi /usr/local/hadoop/conf/jmxremote.access

monitorRole readonly
controlRole readwrite

hadoop-env.sh 에 JMX 관련 설정

# vi /usr/local/hadoop/conf/hadoop-env.sh

export HADOOP_JMX_BASE=”-Dcom.sun.management.jmxremote.ssl=false”
export HADOOP_JMX_BASE=”$HADOOP_JMX_BASE -Dcom.sun.management.jmxremote.password.file=/usr/local/hadoop/conf/jmxremote.password”
export HADOOP_JMX_BASE=”$HADOOP_JMX_BASE -Dcom.sun.management.jmxremote.access.file=/usr/local/hadoop/conf/jmxremote.access”

# Command specific options appended to HADOOP_OPTS when specified
export HADOOP_NAMENODE_OPTS=”$HADOOP_JMX_BASE -Dcom.sun.management.jmxremote.port=10001″
export HADOOP_SECONDARYNAMENODE_OPTS=”$HADOOP_JMX_BASE -Dcom.sun.management.jmxremote.port=10002″
export HADOOP_DATANODE_OPTS=”$HADOOP_JMX_BASE -Dcom.sun.management.jmxremote.port=10003″
export HADOOP_BALANCER_OPTS=”$HADOOP_JMX_BASE -Dcom.sun.management.jmxremote.port=10004″
export HADOOP_JOBTRACKER_OPTS=”$HADOOP_JMX_BASE -Dcom.sun.management.jmxremote.port=10005″

다시 HBase로 와서 유사하게 작업한다.

jmxremote.passwd 와 jmxremote.access 는 동일하니 Hadoop 에서 복사해오자.

# cp /usr/local/hadoop/conf/jmxremote.* /usr/local/hbase/conf/

hbase-env.sh 에 JMX 관련 설정을 하자

# vi /usr/local/hbase/conf/hbase-env.sh

HBASE_JMX_OPTS=”-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false”
HBASE_JMX_OPTS=”$HBASE_JMX_OPTS -Dcom.sun.management.jmxremote.password.file=/usr/local/hbase/conf/jmxremote.passwd”
HBASE_JMX_OPTS=”$HBASE_JMX_OPTS -Dcom.sun.management.jmxremote.access.file=/usr/local/hbase/conf/jmxremote.access”

export HBASE_MASTER_OPTS=”$HBASE_JMX_OPTS -Dcom.sun.management.jmxremote.port=10101″
export HBASE_REGIONSERVER_OPTS=”$HBASE_JMX_OPTS -Dcom.sun.management.jmxremote.port=10102″

HBase 의 bin 디렉토리에 있는 hbase 스크립트를 수정한다.

# vi /usr/local/hbase/bin/hbase

elif [ "$COMMAND" = "master" ] ; then
CLASS=’org.apache.hadoop.hbase.master.HMaster’
elif [ "$COMMAND" = "regionserver" ] ; then
CLASS=’org.apache.hadoop.hbase.regionserver.HRegionServer’

이 부분을 아래처럼…

elif [ "$COMMAND" = "master" ] ; then
CLASS=’org.apache.hadoop.hbase.master.HMaster’
if [ "$1" != "stop" ] ; then
HBASE_OPTS=”$HBASE_OPTS $HBASE_MASTER_OPTS”
fi
elif [ "$COMMAND" = "regionserver" ] ; then
CLASS=’org.apache.hadoop.hbase.regionserver.HRegionServer’
if [ "$1" != "stop" ] ; then
HBASE_OPTS=”$HBASE_OPTS $HBASE_REGIONSERVER_OPTS”
fi

하지만.. 이미 그렇게 되어있다.. 버전이 올라가면서 수정되었나보다.

Hadoop 과 HBase 가 작동 중이었다면, 모두 재가동한다.

이제, hadoop-cacti-jtg 를 설치하자.

자바는 설치되어 있을 것이고, 추가적으로 svn 과 ant 가 설치되어 있어야 한다.

# yum install subversion
# yum install ant

# cd /usr/local/src
# svn co http://www.jointhegrid.com/svn/hadoop-cacti-jtg/trunk/ hadoop-cacti-jtg
# cd hadoop-cacti-jtg
# ant jar

ant 빌드가 성공했다면, 새로 생성된 dist 디렉토리가 있을 것이다.
그 안에 있는 hadoop-cacti-jtg.jar 를 cacti 의 scripts 디렉토리로 복사한다.
또한 scripts 안에 있는 것들도 다 복사한다.

# cp dist/hadoop-cacti-jtg.jar /usr/local/cacti/scripts/
# cp -Rf scripts/* /usr/local/cacti/scripts/

다음은 테스트를 하는 방법이다.
Cacti 의 scripts 아래 0_20 디렉토리로 이동하자.

# cd /usr/local/cacti/scripts/0_20
# sh namenode/FSNamesystemState.sh service:jmx:rmi:///jndi/rmi://127.0.0.1:10001/jmxrmi controlRole controlpass Hadoop:service=NameNode,name=FSNamesystemState

결과가 아래와 같은 형식으로 떨어지면 O.K.

여기서 Object명으로 들어가는 Hadoop:service=NameNode,name=FSNamesystemState 에서 Hadoop을 예제처럼 hadoop으로 하면, 에러남.. 대문자 H 로..

BlocksTotal:37 CapacityRemaining:186764750848 CapacityTotal:304364347392 CapacityUsed:372736 FSState:Operational FilesTotal:81 PendingReplicationBlocks:0 ScheduledReplicationBlocks:0 TotalLoad:1 UnderReplicatedBlocks:0 numLiveDataNodes:1
numDeadDataNodes:0

자.. 이제.. /usr/local/src/hadoop-cacti-jtg/cacti_templates 디렉토리에 가면,
0_19, 0_20 디렉토리에 xml 파일들이 있다. 이 파일들을 Cacti 웹 관리도구로 가서 import 하자

왼쪽 메뉴에 Import/Export 메뉴 아래에 Import Templates 를 선택한다.

Devices 에서 Add 를 해서 새로 등록 후 Create 클릭

Template 를 Hadoop 20 – NameNode 로 해서. 관련된 그래프가 자동으로 등록. Save

Create Graphs for this Host 클릭하여 등록

호스트명 및 비밀번호 설정값을 변경해주고 Save
여기서도 object 명에 hadoop: 으로 된거 Hadoop:으로.. 대문자 H

Graph Tree 에서 Tree 추가 후

Tree Items 추가

Data Sources 에서 정보 설정

그래프가 스믈스믈 그려진다..

번호 제목 날짜 조회 수
27 namenode오류 복구시 사용하는 명령 2016.04.01 584
26 "java.net.NoRouteToHostException: 호스트로 갈 루트가 없음" 오류시 확인및 조치할 사항 2016.04.01 3359
25 CentOS의 서버 5대에 yarn(hadoop 2.7.2)설치하기-ResourceManager HA/HDFS HA포함, JobHistory포함 2016.03.29 1258
24 hortonworks에서 제공하는 메모리 설정값 계산기 사용법 file 2015.06.14 869
23 Error: Could not find or load main class nodemnager 가 발생할때 해결하는 방법 2015.06.05 1226
22 Nodes of the cluster (unhealthy)중 1/1 log-dirs are bad: 오류 해결방법 2015.05.17 1178
21 java.lang.IllegalArgumentException: Does not contain a valid host:port authority: master 오류해결방법 2015.05.06 600
20 hadoop 2.6.0 기동(에코시스템 포함)및 wordcount 어플리케이션을 이용한 테스트 2015.05.05 3906
19 Hadoop - 클러스터 세팅및 기동 2015.04.28 941
18 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable원인 2015.04.27 1148
17 bananapi 5대(ubuntu계열 리눅스)에 yarn(hadoop 2.6.0)설치하기-ResourceManager HA/HDFS HA포함, JobHistory포함 2015.04.24 19507
16 hadoop의 data디렉토리를 변경하는 방법 2014.08.24 1127
15 access=WRITE, inode="staging":ubuntu:supergroup:rwxr-xr-x 오류 2014.07.05 1846
14 org.apache.hadoop.security.AccessControlException: Permission denied: user=hadoop, access=WRITE, inode="":root:supergroup:rwxr-xr-x 오류 처리방법 2014.07.05 2989
13 banana pi에(lubuntu)에 hadoop설치하고 테스트하기 - 성공 file 2014.07.05 2865
12 hadoop및 ecosystem에서 사용되는 명령문 정리 2014.05.28 3890
11 hadoop설치시 오류 2013.12.18 2731
» Cacti로 Hadoop 모니터링 하기 file 2013.03.12 2732
9 org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-root/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible. 2013.03.11 14910
8 hadoop설치시 참고사항 2013.03.08 2549
위로