# 카운터 API


하둡은 맵리듀스 잡의 진행 상황을 모니터링할 수 있게 카운터(Counter)라는 API를 제공하며, 모든 잡은 다수의 내장 카운터를 가지고 있습니다.
내장 카운터는 맵, 리듀스, 콤바이너의 입출력 레코드 건수와 바이트를 확인할 수 있고, 몇 개의 맵 스크와 리듀스 태스크가 실행되고 실패했는지, 또 파일 시스템에서는 얼마나 많은 바이트를 일고 썼는가에 대한 정보를 제공합니다.
이러한 내장 카운터의 값은 잡을 실행하면 콘솔 화면에 출력되는 로그에 나타납니다.
아래 로그는 FileSystemCounters라는 카운터 그룹에서 네 개의 카운터가 갱신됐음을 나타냅니다.
----------------------------------------------------------------------------
13/05/15 11:09:23 INFO mapred.JobClient:   FileSystemCounters
13/05/15 11:09:23 INFO mapred.JobClient:     FILE_BYTES_READ=663185664
13/05/15 11:09:23 INFO mapred.JobClient:     HDFS_BYTES_READ=12029911999
13/05/15 11:09:23 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=1335865656
13/05/15 11:09:23 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=3635
----------------------------------------------------------------------------

맵리듀스 프레임워크는 개발자가 직접 카운터를 정의해서 사용할 수 있는 API를 제공합니다.
카운터의 숫자를 직접 증감시킬 수 있기 때문에 맵과 리듀스 로직의 동작을 체크할 때 유용하게 사용 할 수 있습니다.
System.out.println이나 log4j를 사용하면 로그 파일에서 일일이 로그를 찾아야 하는데, 카운터를 이용하면 job 실행 결과 메시지와 웹UI에서 간편하게 데이터를 확인할 수 있습니다.


# 사용자 정의 카운터 구현
사용자 정의 카운터는 자바의 enum 클래스를 이용해 구현하면 됩니다.
enum 클래스는 카운터 그룹 이름, enum 클래스의 필드는 카운터 이름이 됩니다.
아래 예제에서는 DelyCounters 라는 카운터 그룹이 여섯개의 카운터를 가지고 있습니다.


DelayCounters.java
package hadoop.chapter05;

public enum DelayCounters {
    not_available_arrival, scheduled_arrival, early_arrival, 
    not_available_departure, scheduled_departure, early_departure;
}


DelayCounters 라는 카운터 그룹을 별도의 클래스로 작성했지만 카운터가 필요한 클래스에서 아래와 같이 내부 변수로 선언해도 무방합니다.
public static enum DelayCounters {
    not_available_arrival, scheduled_arrival, early_arrival, 
    not_available_departure, scheduled_departure, early_departure;
}

# CLASS_PATH 설정 확인
[hadoop@master ~]$ vi ~/.bash_profile
HADOOP_CORE=/home/hadoop/hadoop-1.1.2/hadoop-core-1.1.2.jar
export HADOOP_CORE

HADOOP_COMMONS=/home/hadoop/hadoop/lib/commons-cli-1.2.jar
export HADOOP_COMMONS

export CLASS_PATH=.:$HADOOP_CORE:$HADOOP_COMMONS

# Java 파일


# 컴파일
[hadoop@master ~]$ javac -cp $CLASS_PATH -d counter counter/*.java
[hadoop@master ~]$ ls -R counter/
counter/:
DelayCountMapperWithCounter.java  DelayCountWithCounter.java  DelayCounters.java  hadoop

counter/hadoop:
chapter05

counter/hadoop/chapter05:
DelayCountMapperWithCounter.class  DelayCountWithCounter.class  DepartureDelayCount.class
DelayCountReducer.class            DelayCounters.class          DepartureDelayCountMapper.class

# jar 파일 생성
[hadoop@master ~]$ jar -cvf DelyCountWitiCounter.jar -C counter/ .
Manifest를 추가함
추가하는 중: DelayCountWithCounter.java(입력 = 2253) (출력 = 707)(68%를 감소함)
추가하는 중: DelayCounters.java(입력 = 186) (출력 = 119)(36%를 감소함)
추가하는 중: DelayCountMapperWithCounter.java(입력 = 2676) (출력 = 844)(68%를 감소함)
추가하는 중: hadoop/(입력 = 0) (출력 = 0)(0%를 저장함)
추가하는 중: hadoop/chapter05/(입력 = 0) (출력 = 0)(0%를 저장함)
추가하는 중: hadoop/chapter05/DepartureDelayCount.class(입력 = 1769) (출력 = 889)(49%를 감소함)
추가하는 중: hadoop/chapter05/DelayCounters.class(입력 = 1186) (출력 = 610)(48%를 감소함)
추가하는 중: hadoop/chapter05/DelayCountWithCounter.class(입력 = 2593) (출력 = 1183)(54%를 감소함)
추가하는 중: hadoop/chapter05/DelayCountReducer.class(입력 = 1715) (출력 = 727)(57%를 감소함)
추가하는 중: hadoop/chapter05/DelayCountMapperWithCounter.class(입력 = 3573) (출력 = 1469)(58%를 감소함)
추가하는 중: hadoop/chapter05/DepartureDelayCountMapper.class(입력 = 2281) (출력 = 996)(56%를 감소

# 맵리듀스 잡 실행

사용자 정의 옵션(workType)
- departure : 출발 지연
- arrival   : 도착 지연

[hadoop@master bin]$ ./hadoop jar [jar 파일] [실행할 패키지경로.클래스] [-D 사용자 정의옵션] [분석 데이터 디렉토리] [출력할 디렉토리]

[hadoop@master bin]$ ./hadoop jar /home/hadoop/DelyCountWitiCounter.jar hadoop.chapter05.DelayCountWithCounter
                      -D workType=departure data departure_delay_count_counter
13/05/15 17:16:00 INFO input.FileInputFormat: Total input paths to process : 22
13/05/15 17:16:00 INFO util.NativeCodeLoader: Loaded the native-hadoop library
13/05/15 17:16:00 WARN snappy.LoadSnappy: Snappy native library not loaded
13/05/15 17:16:00 INFO mapred.JobClient: Running job: job_201305151032_0002
13/05/15 17:16:01 INFO mapred.JobClient:  map 0% reduce 0%
13/05/15 17:16:07 INFO mapred.JobClient:  map 1% reduce 0%
13/05/15 17:16:10 INFO mapred.JobClient:  map 2% reduce 0%
13/05/15 17:16:14 INFO mapred.JobClient:  map 3% reduce 0%
13/05/15 17:16:17 INFO mapred.JobClient:  map 4% reduce 0%
13/05/15 17:16:22 INFO mapred.JobClient:  map 5% reduce 0%
13/05/15 17:16:25 INFO mapred.JobClient:  map 6% reduce 0%
13/05/15 17:16:29 INFO mapred.JobClient:  map 7% reduce 2%
13/05/15 17:16:31 INFO mapred.JobClient:  map 8% reduce 2%
13/05/15 17:16:35 INFO mapred.JobClient:  map 9% reduce 2%
13/05/15 17:16:39 INFO mapred.JobClient:  map 10% reduce 2%
...
13/05/15 17:21:22 INFO mapred.JobClient:  map 100% reduce 32%
13/05/15 17:21:27 INFO mapred.JobClient:  map 100% reduce 33%
13/05/15 17:21:30 INFO mapred.JobClient:  map 100% reduce 68%
13/05/15 17:21:33 INFO mapred.JobClient:  map 100% reduce 76%
13/05/15 17:21:36 INFO mapred.JobClient:  map 100% reduce 84%
13/05/15 17:21:39 INFO mapred.JobClient:  map 100% reduce 92%
13/05/15 17:21:43 INFO mapred.JobClient:  map 100% reduce 100%
13/05/15 17:21:43 INFO mapred.JobClient: Job complete: job_201305151032_0002
13/05/15 17:21:43 INFO mapred.JobClient: Counters: 32
13/05/15 17:21:43 INFO mapred.JobClient:   hadoop.chapter05.DelayCounters     <<< 사용자 정의 카운터 출력
13/05/15 17:21:43 INFO mapred.JobClient:     early_departure=44797706
13/05/15 17:21:43 INFO mapred.JobClient:     not_available_departure=2302136
13/05/15 17:21:43 INFO mapred.JobClient:     scheduled_departure=26416798

13/05/15 17:21:43 INFO mapred.JobClient:   Job Counters
13/05/15 17:21:43 INFO mapred.JobClient:     Launched reduce tasks=1
13/05/15 17:21:43 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=609618
13/05/15 17:21:43 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
13/05/15 17:21:43 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
13/05/15 17:21:43 INFO mapred.JobClient:     Launched map tasks=187
13/05/15 17:21:43 INFO mapred.JobClient:     Data-local map tasks=187
13/05/15 17:21:43 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=321571
13/05/15 17:21:43 INFO mapred.JobClient:   File Output Format Counters
13/05/15 17:21:43 INFO mapred.JobClient:     Bytes Written=4145
13/05/15 17:21:43 INFO mapred.JobClient:   FileSystemCounters
13/05/15 17:21:43 INFO mapred.JobClient:     FILE_BYTES_READ=763222328
13/05/15 17:21:43 INFO mapred.JobClient:     HDFS_BYTES_READ=12029911999
13/05/15 17:21:43 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=1536007598
13/05/15 17:21:43 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=4145
13/05/15 17:21:43 INFO mapred.JobClient:   File Input Format Counters
13/05/15 17:21:43 INFO mapred.JobClient:     Bytes Read=12029889933
13/05/15 17:21:43 INFO mapred.JobClient:   Map-Reduce Framework
13/05/15 17:21:43 INFO mapred.JobClient:     Map output materialized bytes=763223426
13/05/15 17:21:43 INFO mapred.JobClient:     Map input records=123534991
13/05/15 17:21:43 INFO mapred.JobClient:     Reduce shuffle bytes=763223426
13/05/15 17:21:43 INFO mapred.JobClient:     Spilled Records=100036658
13/05/15 17:21:43 INFO mapred.JobClient:     Map output bytes=663185646
13/05/15 17:21:43 INFO mapred.JobClient:     Total committed heap usage (bytes)=82341658624
13/05/15 17:21:43 INFO mapred.JobClient:     CPU time spent (ms)=632620
13/05/15 17:21:43 INFO mapred.JobClient:     Combine input records=0
13/05/15 17:21:43 INFO mapred.JobClient:     SPLIT_RAW_BYTES=22066
13/05/15 17:21:43 INFO mapred.JobClient:     Reduce input records=50018329
13/05/15 17:21:43 INFO mapred.JobClient:     Reduce input groups=255
13/05/15 17:21:43 INFO mapred.JobClient:     Combine output records=0
13/05/15 17:21:43 INFO mapred.JobClient:     Physical memory (bytes) snapshot=77328027648
13/05/15 17:21:43 INFO mapred.JobClient:     Reduce output records=255
13/05/15 17:21:43 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=139453636608
13/05/15 17:21:43 INFO mapred.JobClient:     Map output records=50018329
## RESULT:0


# 맵리듀스 잡 관리자용 웹 화면에서 동일하게 DelayCounters 확인
사용자 삽입 이미지























# 출력 파일 디렉토리 조회
[hadoop@master bin]$ ./hadoop fs -ls departure_delay_count_counter
Found 3 items
-rw-r--r--   1 hadoop supergroup          0 2013-05-15 17:21 /user/hadoop/departure_delay_count_counter/_SUCCESS
drwxr-xr-x   - hadoop supergroup          0 2013-05-15 17:16 /user/hadoop/departure_delay_count_counter/_logs
-rw-r--r--   1 hadoop supergroup       4145 2013-05-15 17:21 /user/hadoop/departure_delay_count_counter/part-r-00000

# 출력 파일 조회
[hadoop@master bin]$ ./hadoop fs -cat departure_delay_count_counter/part-r-00000 | head -10
D,1987,10       175568
D,1987,11       177218
D,1987,12       218858
D,1988,1        198610
D,1988,10       162211
D,1988,11       175123
D,1988,12       189137
D,1988,2        177939
D,1988,3        187141
D,1988,4        159216

[hadoop@master bin]$ ./hadoop fs -cat departure_delay_count_counter/part-r-00000 | tail -10
D,2008,11       157278
D,2008,12       263949
D,2008,2        252765
D,2008,3        271969
D,2008,4        220864
D,2008,5        220614
D,2008,6        271014
D,2008,7        253632
D,2008,8        231349
D,2008,9        147061


참고 : 시작하세요! 하둡 프로그래밍


※ 위 내용은, 여러 자료를 참고하거나 제가 주관적으로 정리한 것입니다.
   잘못된 정보나 보완이 필요한 부분을, 댓글 또는 메일로 보내주시면 많은 도움이 되겠습니다.
05 15, 2013 17:40 05 15, 2013 17:40


Trackback URL : http://develop.sunshiny.co.kr/trackback/899

Leave a comment

« Previous : 1 : ... 117 : 118 : 119 : 120 : 121 : 122 : 123 : 124 : 125 : ... 648 : Next »

Recent Posts

  1. HDFS - Python Encoding 오류 처리
  2. HP - Vertica ROS Container 관련 오류...
  3. HDFS - Hive 실행시 System Time 오류
  4. HP - Vertica 사용자 쿼리 이력 테이블...
  5. Client에서 HDFS 환경의 데이터 처리시...

Recent Comments

  1. 안녕하세요^^ 배그핵
  2. 안녕하세요^^ 도움이 되셨다니, 저... sunshiny
  3. 정말 큰 도움이 되었습니다.. 감사합... 사랑은
  4. 네, 안녕하세요. 댓글 남겨 주셔서... sunshiny
  5. 감사합니다 많은 도움 되었습니다!ㅎㅎ 프리시퀸스

Recent Trackbacks

  1. church building construction church building construction %M
  2. wireless clocks transmitter wireless clocks transmitter %M
  3. how to build a metal building how to build a metal building %M
  4. builder builder %M
  5. social media management company social media management company %M

Calendar

«   12 2019   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Bookmarks

  1. 위키피디아
  2. MysqlKorea
  3. 오라클 클럽
  4. API - Java
  5. Apache Hadoop API
  6. Apache Software Foundation
  7. HDFS 생태계 솔루션
  8. DNSBL - Spam Database Lookup
  9. Ready System
  10. Solaris Freeware
  11. Linux-Site
  12. 윈디하나의 솔라나라

Site Stats

TOTAL 2781579 HIT
TODAY 1162 HIT
YESTERDAY 1360 HIT