메뉴 건너뛰기

Bigdata, Semantic IoT, Hadoop, NoSQL

Bigdata, Hadoop ecosystem, Semantic IoT등의 프로젝트를 진행중에 습득한 내용을 정리하는 곳입니다.
필요한 분을 위해서 공개하고 있습니다. 문의사항은 gooper@gooper.com로 메일을 보내주세요.


Hadoop Cacti로 Hadoop 모니터링 하기

구퍼 2013.03.12 15:22 조회 수 : 2367

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 에서 정보 설정

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

번호 제목 글쓴이 날짜 조회 수
130 [Impala] alter table구문수행시 "WARNINGS: Impala does not have READ_WRITE access to path 'hdfs://nameservice1/DATA/Temp/DB/source/table01_ccd'" 발생시 조치 gooper 2024.04.26 0
129 [CDP7.1.7, Hive Replication]Hive Replication진행중 "The following columns have types incompatible with the existing columns in their respective positions " 오류 gooper 2023.12.27 7
128 [CDP7.1.7]Oozie job에서 ERROR: Kudu error(s) reported, first error: Timed out: Failed to write batch of 774 ops to tablet 8003f9a064bf4be5890a178439b2ba91가 발생하면서 쿼리가 실패하는 경우 gooper 2024.01.05 7
127 [CDP7.1.7]impala-shell수행시 간헐적으로 "-k requires a valid kerberos ticket but no valid kerberos ticket found." 오류 gooper 2023.11.16 11
126 임시 테이블에서 데이터를 읽어서 partitioned table에 입력하는 impala SQL문 예시 gooper 2023.11.10 16
125 [impala]insert into db명.table명 select a, b from db명.table명 쿼리 수행시 "Memory limit exceeded: Failed to allocate memory for Parquet page index"오류 조치 방법 gooper 2023.05.31 22
124 not leader of this config: current role FOLLOWER 오류 발생시 확인방법 총관리자 2022.01.17 23
123 kudu table와 impala(hive) table정보가 틀어져서 테이블을 읽지 못하는 경우(Error Loading Metadata) 조치방법 gooper 2023.11.10 25
122 [CDP7.1.7]Impala Query의 Memory Spilled 양은 ScratchFileUsedBytes값을 누적해서 구할 수 있다. gooper 2022.07.29 29
121 [Cloudera 6.3.4, Kudu]]Service Monitor에서 사용하는 metric중에 일부를 blacklist로 설정하여 모니터링 정보 수집 제외하는 방법 gooper 2022.07.08 31
120 Failed to write to server: (no server available): 총관리자 2022.01.17 32
119 AnalysisException: Incomplatible return type 'DECIMAL(38,0)' and 'DECIMAL(38,5)' of exprs가 발생시 조치 총관리자 2021.07.26 34
118 spark에서 hive table을 읽어 출력하는 예제 소스 총관리자 2017.03.09 35
117 [TLS/SSL]Kudu Tablet Server설정 총관리자 2022.05.13 35
116 spark에서 hive table을 읽어 출력하는 예제 소스 총관리자 2017.03.09 37
115 [KUDU] kudu tablet server여러가지 원인에 의해서 corrupted상태가 된 경우 복구방법 gooper 2023.03.28 37
114 [CDP7.1.7]impala-shell을 이용하여 kudu table에 insert/update수행시 발생하는 오류(Transport endpoint is not connected (error 107)) 발생시 확인할 내용 gooper 2023.11.30 44
113 spark 온라인 책자링크 (제목 : mastering-apache-spark) 총관리자 2016.05.25 51
112 [hive] hive.tbls테이블의 owner컬럼값은 hadoop.security.auth_to_local에 의해서 filtering된다. 총관리자 2022.04.14 55
111 [Impala jdbc]CDP7.1.7환경에서 java프로그램을 이용하여 kerberized impala cluster에 접근하여 SQL을 수행하는 방법 gooper 2023.08.22 56

A personal place to organize information learned during the development of such Hadoop, Hive, Hbase, Semantic IoT, etc.
We are open to the required minutes. Please send inquiries to gooper@gooper.com.

위로