Giter VIP home page Giter VIP logo

mywordcount's Introduction

WordCount 예제에서 변형시킨 것.

1. WordCount에서 모든 문자를 소문자화 시켜서 count 될 수 있도록 변경

2. 대부분의 특수문자들을 제거하고 순수 word만 count 될 수 있도록 변경

3. 사용자로부터 단어를 입력받아 그 단어만을 search, count 할 수 있도록 기능 추가

4. Combiner를 Reducer Class를 그대로 사용하여 적용


환경 및 사용법

환경

- Java 1.8
- Pseudo-distributed Mode
- Using Ubuntu By Docker

사용법

./bin/hadoop jar mywordcount.jar wordcount <input> <output> <finding word>

예시 결과

실행 : ./bin/hadoop jar mywordcount.jar wordcount input.txt output enim

결과 : enim	5

Combiner 적용 전 후 비교

<Combiner 적용 전>

21/01/29 01:12:36 INFO mapred.JobClient: Map-Reduce Framework
21/01/29 01:12:36 INFO mapred.JobClient: Spilled Records=10
21/01/29 01:12:36 INFO mapred.JobClient: Map output materialized bytes=61
21/01/29 01:12:36 INFO mapred.JobClient: Reduce input records=5
21/01/29 01:12:36 INFO mapred.JobClient: Map input records=11
21/01/29 01:12:36 INFO mapred.JobClient: SPLIT_RAW_BYTES=126
21/01/29 01:12:36 INFO mapred.JobClient: Map output bytes=45
21/01/29 01:12:36 INFO mapred.JobClient: Reduce shuffle bytes=0
21/01/29 01:12:36 INFO mapred.JobClient: Reduce input groups=1
21/01/29 01:12:36 INFO mapred.JobClient: Combine output records=0
21/01/29 01:12:36 INFO mapred.JobClient: Reduce output records=1
21/01/29 01:12:36 INFO mapred.JobClient: Map output records=5
21/01/29 01:12:36 INFO mapred.JobClient: Combine input records=0
21/01/29 01:12:36 INFO mapred.JobClient: Total committed heap usage (bytes)=514850816
21/01/29 01:12:36 INFO mapred.JobClient: File Input Format Counters
21/01/29 01:12:36 INFO mapred.JobClient: Bytes Read=2892
21/01/29 01:12:36 INFO mapred.JobClient: FileSystemCounters
21/01/29 01:12:36 INFO mapred.JobClient: FILE_BYTES_WRITTEN=102935
21/01/29 01:12:36 INFO mapred.JobClient: FILE_BYTES_READ=6209
21/01/29 01:12:36 INFO mapred.JobClient: File Output Format Counters
21/01/29 01:12:36 INFO mapred.JobClient: Bytes Written=19

<Combiner 적용 후>

21/01/29 01:13:28 INFO mapred.JobClient: Map-Reduce Framework
21/01/29 01:13:28 INFO mapred.JobClient: Spilled Records=2
21/01/29 01:13:28 INFO mapred.JobClient: Map output materialized bytes=17
21/01/29 01:13:28 INFO mapred.JobClient: Reduce input records=1
21/01/29 01:13:28 INFO mapred.JobClient: Map input records=11
21/01/29 01:13:28 INFO mapred.JobClient: SPLIT_RAW_BYTES=126
21/01/29 01:13:28 INFO mapred.JobClient: Map output bytes=45
21/01/29 01:13:28 INFO mapred.JobClient: Reduce shuffle bytes=0
21/01/29 01:13:28 INFO mapred.JobClient: Reduce input groups=1
21/01/29 01:13:28 INFO mapred.JobClient: Combine output records=1
21/01/29 01:13:28 INFO mapred.JobClient: Reduce output records=1
21/01/29 01:13:28 INFO mapred.JobClient: Map output records=5
21/01/29 01:13:28 INFO mapred.JobClient: Combine input records=5
21/01/29 01:13:28 INFO mapred.JobClient: Total committed heap usage (bytes)=514850816
21/01/29 01:13:28 INFO mapred.JobClient: File Input Format Counters
21/01/29 01:13:28 INFO mapred.JobClient: Bytes Read=2892
21/01/29 01:13:28 INFO mapred.JobClient: FileSystemCounters
21/01/29 01:13:28 INFO mapred.JobClient: FILE_BYTES_WRITTEN=103271
21/01/29 01:13:28 INFO mapred.JobClient: FILE_BYTES_READ=6165
21/01/29 01:13:28 INFO mapred.JobClient: File Output Format Counters
21/01/29 01:13:28 INFO mapred.JobClient: Bytes Written=19

Combiner 적용 결론

하둡의 MapReduce에서는 Shuffle 단계에서 가장 네트워크 오버헤드가 많이 발생한다. 이에 따라 성능의 저하도 shuffle 구간에서 가장 많이 발생한다. 따라서, Map 단계 이후에 나오게 될 intermediate key-value pair의 양을 줄일 수 있다면 Shuffle 단계에서의 네트워크 통신량도 감소할 것이고, 이에 따라 성능도 개선될 것이다.

그래서 Map 단계 이후의 intermediate key-value pair의 수를 줄이기 위해 Combiner Class를 사용한다. Combiner Classs는 얼마나 호출될지 알 수 없으며, Map Task가 처리되고 나온 intermediate K-V pair에 적용된다. 일반적인 경우에는 Combiner Class에 Reducer Class와 동일한 것을 사용할 수 있다. 다만, 평균 구하기 등의 예시는 예외이다.

위 예시 프로그램에서 Combiner Class를 사용했다. input data가 상당히 작았지만, Reduce input records가 Combiner Class 적용 전보다 줄어든 것을 보아 성능이 개선됐음을 알 수 있다.

mywordcount's People

Contributors

suyong-park avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.