MapReduce - 정렬 구현

Posted 05 18, 2013 10:58, Filed under: BigData/MapReduce


# 보조 정렬

보조 정렬은 키의 값들을 그룹핑하고, 그룹핑된 레코드에 순서를 부여하는 방식입니다.
보조 정렬은 다음과 같은 순서로 구현합니다.

1) 기존 키의 값들을 조합한 복합키(Composite Key)를 정의 합니다.
   이때 키의 값 중에서 어떤 키를 그룹핑 키로 사용할지 결정합니다.

2) 복합키의 레코드를 정렬하기 위한 비교기(Comparator)를 정의합니다.

3) 그룹핑 키를 파티셔닝할 파티셔너(Partitioner)를 정의합니다.

4) 그룹핑 키를 정렬하기 위한 비교기(Comparator)를 정의합니다.

이 프로그램은 이 복합키의 연도를 그룹키로 사용합니다.
그리고 연도별로 그룹핑된 데이터들은 월의 순서대로 정렬하게 됩니다.


# Java 파일






# Java 컴파일
[hadoop@master ~]$ javac -cp $CLASS_PATH -d sort sort/*.java

# 파일 조회
[hadoop@master ~]$ ls -R sort/
sort/:
DateKey.java            DelayCountMapperWithDateKey.java   DelayCountWithDateKey.java  GroupKeyPartitioner.java
DateKeyComparator.java  DelayCountReducerWithDateKey.java  GroupKeyComparator.java     hadoop

sort/hadoop:
chapter06

sort/hadoop/chapter06:
DateKey.class                                    DelayCountMapperWithDateKey.class   GroupKeyComparator.class
DateKeyComparator.class                          DelayCountReducerWithDateKey.class  GroupKeyPartitioner.class
DelayCountMapperWithDateKey$DelayCounters.class  DelayCountWithDateKey.class

# jar 파일 생성
[hadoop@master ~]$ jar -cvf DelayCountWithDateKey.jar -C sort/ .
Manifest를 추가함
추가하는 중: GroupKeyPartitioner.java(입력 = 398) (출력 = 220)(44%를 감소함)
추가하는 중: DateKey.java(입력 = 1522) (출력 = 522)(65%를 감소함)
추가하는 중: DelayCountMapperWithDateKey.java(입력 = 2535) (출력 = 825)(67%를 감소함)
추가하는 중: DelayCountReducerWithDateKey.java(입력 = 2159) (출력 = 636)(70%를 감소함)
추가하는 중: DateKeyComparator.java(입력 = 698) (출력 = 378)(45%를 감소함)
추가하는 중: GroupKeyComparator.java(입력 = 518) (출력 = 288)(44%를 감소함)
추가하는 중: hadoop/(입력 = 0) (출력 = 0)(0%를 저장함)
추가하는 중: hadoop/chapter06/(입력 = 0) (출력 = 0)(0%를 저장함)
추가하는 중: hadoop/chapter06/DateKeyComparator.class(입력 = 786) (출력 = 478)(39%를 감소함)
추가하는 중: hadoop/chapter06/GroupKeyComparator.class(입력 = 591) (출력 = 353)(40%를 감소함)
추가하는 중: hadoop/chapter06/DelayCountMapperWithDateKey$DelayCounters.class(입력 = 1465) (출력 = 665)(54%를 감소함)
추가하는 중: hadoop/chapter06/DateKey.class(입력 = 2097) (출력 = 942)(55%를 감소함)
추가하는 중: hadoop/chapter06/GroupKeyPartitioner.class(입력 = 789) (출력 = 428)(45%를 감소함)
추가하는 중: hadoop/chapter06/DelayCountMapperWithDateKey.class(입력 = 3174) (출력 = 1374)(56%를 감소함)
추가하는 중: hadoop/chapter06/DelayCountWithDateKey.class(입력 = 3216) (출력 = 1428)(55%를 감소함)
추가하는 중: hadoop/chapter06/DelayCountReducerWithDateKey.class(입력 = 3502) (출력 = 1362)(61%를 감소함)
추가하는 중: DelayCountWithDateKey.java(입력 = 2672) (출력 = 883)(66%를 ?

# Java 파일 실행
[hadoop@master bin]$ ./hadoop jar /home/hadoop/DelayCountWithDateKey.jar hadoop.chapter06.DelayCountWithDateKey data delay_count_sort

13/05/16 20:19:36 INFO input.FileInputFormat: Total input paths to process : 22
13/05/16 20:19:36 INFO util.NativeCodeLoader: Loaded the native-hadoop library
13/05/16 20:19:36 WARN snappy.LoadSnappy: Snappy native library not loaded
13/05/16 20:19:36 INFO mapred.JobClient: Running job: job_201305151032_0003
13/05/16 20:19:37 INFO mapred.JobClient:  map 0% reduce 0%
13/05/16 20:19:44 INFO mapred.JobClient:  map 1% reduce 0%
13/05/16 20:19:49 INFO mapred.JobClient:  map 2% reduce 0%
13/05/16 20:19:55 INFO mapred.JobClient:  map 3% reduce 0%
13/05/16 20:20:00 INFO mapred.JobClient:  map 4% reduce 0%
13/05/16 20:20:04 INFO mapred.JobClient:  map 5% reduce 0%
13/05/16 20:20:10 INFO mapred.JobClient:  map 6% reduce 0%
13/05/16 20:20:12 INFO mapred.JobClient:  map 6% reduce 1%
13/05/16 20:20:15 INFO mapred.JobClient:  map 6% reduce 2%
13/05/16 20:20:16 INFO mapred.JobClient:  map 7% reduce 2%
...
13/05/16 20:29:36 INFO mapred.JobClient:  map 100% reduce 97%
13/05/16 20:29:39 INFO mapred.JobClient:  map 100% reduce 98%
13/05/16 20:29:42 INFO mapred.JobClient:  map 100% reduce 99%
13/05/16 20:29:44 INFO mapred.JobClient:  map 100% reduce 100%
13/05/16 20:29:44 INFO mapred.JobClient: Job complete: job_201305151032_0003
13/05/16 20:29:44 INFO mapred.JobClient: Counters: 35
13/05/16 20:29:44 INFO mapred.JobClient:   hadoop.chapter06.DelayCountMapperWithDateKey$DelayCounters
13/05/16 20:29:44 INFO mapred.JobClient:     early_departure=44797706
13/05/16 20:29:44 INFO mapred.JobClient:     not_available_arrival=2587529
13/05/16 20:29:44 INFO mapred.JobClient:     not_available_departure=2302136
13/05/16 20:29:44 INFO mapred.JobClient:     scheduled_arrival=5214342
13/05/16 20:29:44 INFO mapred.JobClient:     early_arrival=57893927
13/05/16 20:29:44 INFO mapred.JobClient:     scheduled_departure=26416798

13/05/16 20:29:44 INFO mapred.JobClient:   Job Counters
13/05/16 20:29:44 INFO mapred.JobClient:     Launched reduce tasks=1
13/05/16 20:29:44 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=902208
13/05/16 20:29:44 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
13/05/16 20:29:44 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
13/05/16 20:29:44 INFO mapred.JobClient:     Launched map tasks=187
13/05/16 20:29:44 INFO mapred.JobClient:     Data-local map tasks=187
13/05/16 20:29:44 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=579476
13/05/16 20:29:44 INFO mapred.JobClient:   File Output Format Counters
13/05/16 20:29:44 INFO mapred.JobClient:     Bytes Written=0
13/05/16 20:29:44 INFO mapred.JobClient:   FileSystemCounters
13/05/16 20:29:44 INFO mapred.JobClient:     FILE_BYTES_READ=3959724708
13/05/16 20:29:44 INFO mapred.JobClient:     HDFS_BYTES_READ=12029911999
13/05/16 20:29:44 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=6126903726
13/05/16 20:29:44 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=7271
13/05/16 20:29:44 INFO mapred.JobClient:   File Input Format Counters
13/05/16 20:29:44 INFO mapred.JobClient:     Bytes Read=12029889933
13/05/16 20:29:44 INFO mapred.JobClient:   Map-Reduce Framework
13/05/16 20:29:44 INFO mapred.JobClient:     Map output materialized bytes=2157151122
13/05/16 20:29:44 INFO mapred.JobClient:     Map input records=123534991
13/05/16 20:29:44 INFO mapred.JobClient:     Reduce shuffle bytes=2157151122
13/05/16 20:29:44 INFO mapred.JobClient:     Spilled Records=305843646
13/05/16 20:29:44 INFO mapred.JobClient:     Map output bytes=1941435000
13/05/16 20:29:44 INFO mapred.JobClient:     Total committed heap usage (bytes)=82198200320
13/05/16 20:29:44 INFO mapred.JobClient:     CPU time spent (ms)=1187340
13/05/16 20:29:44 INFO mapred.JobClient:     Combine input records=0
13/05/16 20:29:44 INFO mapred.JobClient:     SPLIT_RAW_BYTES=22066
13/05/16 20:29:44 INFO mapred.JobClient:     Reduce input records=107857500
13/05/16 20:29:44 INFO mapred.JobClient:     Reduce input groups=44
13/05/16 20:29:44 INFO mapred.JobClient:     Combine output records=0
13/05/16 20:29:44 INFO mapred.JobClient:     Physical memory (bytes) snapshot=78397648896
13/05/16 20:29:44 INFO mapred.JobClient:     Reduce output records=0
13/05/16 20:29:44 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=139491659776
13/05/16 20:29:44 INFO mapred.JobClient:     Map output records=107857500
## RESULT:0

# 출력 파일 조회(출발 지연, 도착 지연)
[hadoop@master bin]$ ./hadoop fs -lsr
rwxr-xr-x   - hadoop supergroup          0 2013-05-16 20:29 /user/hadoop/delay_count_sort
-rw-r--r--   1 hadoop supergroup          0 2013-05-16 20:29 /user/hadoop/delay_count_sort/_SUCCESS
drwxr-xr-x   - hadoop supergroup          0 2013-05-16 20:19 /user/hadoop/delay_count_sort/_logs
drwxr-xr-x   - hadoop supergroup          0 2013-05-16 20:19 /user/hadoop/delay_count_sort/_logs/history
-rw-r--r--   1 hadoop supergroup     706294 2013-05-16 20:19 /user/hadoop/delay_count_sort/_logs/history/job_201305151032_0003_1368703176826_hadoop_DelayCountWithDateKey
-rw-r--r--   1 hadoop supergroup      45697 2013-05-16 20:19 /user/hadoop/delay_count_sort/_logs/history/job_201305151032_0003_conf.xml
-rw-r--r--   1 hadoop supergroup       3636 2013-05-16 20:27 /user/hadoop/delay_count_sort/arrival-r-00000
-rw-r--r--   1 hadoop supergroup       3635 2013-05-16 20:28 /user/hadoop/delay_count_sort/departure-r-00000
-rw-r--r--   1 hadoop supergroup          0 2013-05-16 20:27 /user/hadoop/delay_count_sort/part-r-00000

# 출발 지연 조회
[hadoop@master bin]$ ./hadoop fs -cat delay_count_sort/departure-r-00000 | head -12
1987,10 175568
1987,11 177218
1987,12 218858
1988,1  198610
1988,2  177939
1988,3  187141
1988,4  159216
1988,5  164107
1988,6  165596
1988,7  174844
1988,8  175591
1988,9  138322

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

# 도착 지연 조회
[hadoop@master bin]$ ./hadoop fs -cat delay_count_sort/arrival-r-00000 | head -12
1987,10 265658
1987,11 255127
1987,12 287408
1988,1  261810
1988,2  242219
1988,3  255083
1988,4  219288
1988,5  221071
1988,6  215385
1988,7  224274
1988,8  227943
1988,9  204558
[hadoop@master bin]$ ./hadoop fs -cat delay_count_sort/arrival-r-00000 | tail -12
2008,1  279427
2008,2  278902
2008,3  294556
2008,4  256142
2008,5  254673
2008,6  295897
2008,7  264630
2008,8  239737
2008,9  169959
2008,10 183582
2008,11 181506
2008,12 280493


출처 : 시작하세요! 하둡 프로그래밍


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


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

Leave a comment

« Previous : 1 : ... 116 : 117 : 118 : 119 : 120 : 121 : 122 : 123 : 124 : ... 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. prefab steel buildings prefab steel buildings %M
  2. Mysql - mysql 설치후 Character set... 멀고 가까움이 다르기 때문 %M

Calendar

«   09 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          

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 2683575 HIT
TODAY 409 HIT
YESTERDAY 438 HIT