mapreduce introduction

55
MapReduce Data Infrastructure Team Jongyoul Lee Friday, September 27, 13

Upload: jongyoul-lee

Post on 28-May-2015

927 views

Category:

Technology


2 download

DESCRIPTION

Introduction to MapReduce framework

TRANSCRIPT

Page 1: Mapreduce introduction

MapReduceData Infrastructure Team

Jongyoul Lee

Friday, September 27, 13

Page 2: Mapreduce introduction

MapReduce?

Data types, input/output format

Mapper, reducer

Combiner

Hadoop streaming

Next...

Friday, September 27, 13

Page 3: Mapreduce introduction

https://github.com/madeng/mrintro.git

Friday, September 27, 13

Page 4: Mapreduce introduction

MapReduce?

Data types, input/output format

Mapper, reducer

Combiner

Hadoop streaming

Next...

Friday, September 27, 13

Page 5: Mapreduce introduction

DataNode DataNode DataNode

JobTracker

TaskTracker TaskTracker TaskTracker

TaskTracker TaskTracker TaskTracker

Client

Structure Overview

DataNode DataNode DataNode

Friday, September 27, 13

Page 6: Mapreduce introduction

분산처리를 위한 고수준(!!) 아키택처

데이터의 흐름은 생각하지 않음

Key/value에 대해서만 생각하면 됨

모든 문제를 해결할 수 있는 것은 아님

Friday, September 27, 13

Page 7: Mapreduce introduction

Output

Input TextInputFormat

(k1, v1) ! (k2, v2)

(k2, list(v2)) ! (k2, v2’)(k2, v2’, #reducer) ! #partition

(k2, list(v2’)) ! (k3, v3)

TextOutputFormat

Mapper

Combiner

Partitioner

Shuffle/sort

Reducer

Friday, September 27, 13

Page 8: Mapreduce introduction

Output

Input TextInputFormat

(k1, v1) ! (k2, v2)

(k2, list(v2)) ! (k2, v2’)(k2, v2’, #reducer) ! #partition

(k2, list(v2’)) ! (k3, v3)

TextOutputFormat

Mapper

Combiner

Partitioner

Shuffle/sort

Reducer

Friday, September 27, 13

Page 9: Mapreduce introduction

org.apache.hadoop.mapred

org.apache.hadoop.mapreduce

mapreduce가 새로운 패키지

하지만 예전 패키지도 여전히 많이 사용

Cascading...

Friday, September 27, 13

Page 10: Mapreduce introduction

MapReduce?

Data types, input/output format

Mapper, reducer

Combiner

Hadoop streaming

Next...

Friday, September 27, 13

Page 11: Mapreduce introduction

Class name Data typeBooleanWritable Boolean

ByteWritable byte

DoubleWritable Double

FloatWritable Float

IntWritable Integer

LongWritable Long

Text UTF-8����������� ������������������  문자열

NullWritable 데이터����������� ������������������  값이����������� ������������������  필요����������� ������������������  없을����������� ������������������  경우

Friday, September 27, 13

Page 12: Mapreduce introduction

WritableCompareable interface

void write(DataOutput out)

Serialization of data written

void readFields(DataInput in)

Deserialization of reading data

int compareTo(WritableComparable w)

Friday, September 27, 13

Page 13: Mapreduce introduction

MapReduce?

Data types, input/output format

Mapper, reducer

Combiner

Hadoop streaming

Next...

Friday, September 27, 13

Page 14: Mapreduce introduction

파일을 MR에서 읽을 수 있도록 key/value로 변경해주는 formatter

Key/value의 값을 파일로 저장할 수 있도록 도와주는 formatter

파일 이외에 여러 형태의 input/output format이 존재

InputFormat은 getSplit메소드로 여러가지를 함

Input/OutputFormat을 상속받아 구현 가능

Friday, September 27, 13

Page 15: Mapreduce introduction

createRecordReader(InputSplit split,...)

인풋 스플릿을 읽을 수 있도록 처리

RecordReader를 mapper에 넘겨줌

InputFormat 특징

TextInputFormat캐리지 리턴으로 값 분리키: 라인 번호값: 라인의 내용

SequenceFileInputFormat바이너리 포멧키, 값을 저장하는 구조압축 지원

Friday, September 27, 13

Page 16: Mapreduce introduction

OutputFormat을 상속

RecordWriter를 reducer에 넘겨줌

OutputFormat 특징

TextOutputFormat 키/값을 텍스트로 출력할 때, 사용“Key, Value\n”의 형태로 출력

LazyOutputFormat

TextOutputFormat과 같은 출력결과파일의 내용이 없을 경우, 생성하지 않음

Friday, September 27, 13

Page 17: Mapreduce introduction

FileInputFormat.getSplit

Friday, September 27, 13

Page 18: Mapreduce introduction

MapReduce?

Data types, input/output format

Mapper, reducer

Combiner

Hadoop streaming

Next...

Friday, September 27, 13

Page 19: Mapreduce introduction

Text를 Key/Value의 형태로 만듦

map(key, value, ...)함수를 호출

하나의 인풋에 대해서만 처리하는 것에 집중

꼭 하나의 인풋에 대해 하나의 아웃풋이 존재할 필요는 없다(DelayCountMapper.java)

(k1, v1) ! (k2, v2)

Friday, September 27, 13

Page 20: Mapreduce introduction

(k1, v1) ! (k2, v2)

Friday, September 27, 13

Page 21: Mapreduce introduction

MapReduce?

Data types, input/output format

Mapper, reducer

Combiner

Hadoop streaming

Next...

Friday, September 27, 13

Page 22: Mapreduce introduction

Key별로 묶은 value들을 처리

같은 키는 반드시 같은 reducer가 처리

하나의 키에 몰리는 것을 방지하는 것이 포인트

(k2, list(v2’)) ! (k3, v3)

Friday, September 27, 13

Page 23: Mapreduce introduction

(k2, list(v2’)) ! (k3, v3)

Friday, September 27, 13

Page 24: Mapreduce introduction

Demo

Friday, September 27, 13

Page 25: Mapreduce introduction

WordCountMapOnly

Friday, September 27, 13

Page 26: Mapreduce introduction

WordCount

Friday, September 27, 13

Page 27: Mapreduce introduction

좀 더 세련되게 확인할 순 없을까?

Friday, September 27, 13

Page 28: Mapreduce introduction

MapReduce?

Data types, input/output format

Mapper, reducer

Combiner

Hadoop streaming

Next...

Friday, September 27, 13

Page 29: Mapreduce introduction

(k2, list(v2)) ! (k2, v2’)

Friday, September 27, 13

Page 30: Mapreduce introduction

Map의 아웃풋이 많아지면...

(k2, list(v2)) ! (k2, v2’)

Friday, September 27, 13

Page 31: Mapreduce introduction

Map의 아웃풋이 많아지면...

Reducer에 넘겨주는 데이터는 적을 수록 좋다

(k2, list(v2)) ! (k2, v2’)

Friday, September 27, 13

Page 32: Mapreduce introduction

Map의 아웃풋이 많아지면...

Reducer에 넘겨주는 데이터는 적을 수록 좋다

Mapper에서 Reducer의 일을 일부 할 수 있지 않을까?

(k2, list(v2)) ! (k2, v2’)

Friday, September 27, 13

Page 33: Mapreduce introduction

Map의 아웃풋이 많아지면...

Reducer에 넘겨주는 데이터는 적을 수록 좋다

Mapper에서 Reducer의 일을 일부 할 수 있지 않을까?

한줄이면 끝!

(k2, list(v2)) ! (k2, v2’)

Friday, September 27, 13

Page 34: Mapreduce introduction

Map의 아웃풋이 많아지면...

Reducer에 넘겨주는 데이터는 적을 수록 좋다

Mapper에서 Reducer의 일을 일부 할 수 있지 않을까?

한줄이면 끝!

job.setCombinerClass(Reducer.class)

(k2, list(v2)) ! (k2, v2’)

Friday, September 27, 13

Page 35: Mapreduce introduction

(k2, list(v2)) ! (k2, v2’)

Friday, September 27, 13

Page 36: Mapreduce introduction

(k2, list(v2)) ! (k2, v2’)

Friday, September 27, 13

Page 37: Mapreduce introduction

한가지 주의할 점이 있는데...

(k2, list(v2)) ! (k2, v2’)

Friday, September 27, 13

Page 38: Mapreduce introduction

한가지 주의할 점이 있는데...

Map의 아웃풋 타입과 Reduce의 인풋 타입

(k2, list(v2)) ! (k2, v2’)

Friday, September 27, 13

Page 39: Mapreduce introduction

(k1, v1) ! (k2, v2)

(k2, list(v2)) ! (k2, v2’)

(k2, list(v2’)) ! (k3, v3)

Mapper

Combiner

Reducer

Friday, September 27, 13

Page 40: Mapreduce introduction

MapReduce?

Data types, input/output format

Mapper, reducer

Combiner

Hadoop streaming

Next...

Friday, September 27, 13

Page 41: Mapreduce introduction

매번 귀찮은 MR프로그램을 짜는 것은 불편...

Hive, Pig, Cascading

contrib/streaming/hadoop-streaming.jar

Friday, September 27, 13

Page 42: Mapreduce introduction

Demo

Friday, September 27, 13

Page 43: Mapreduce introduction

MapReduce?

Data types, input/output format

Mapper, reducer

Combiner

Hadoop streaming

Next...

Friday, September 27, 13

Page 44: Mapreduce introduction

Friday, September 27, 13

Page 45: Mapreduce introduction

하지만 실제로 분석하는 과정을 보면?

Friday, September 27, 13

Page 46: Mapreduce introduction

하지만 실제로 분석하는 과정을 보면?

데이터를 읽어서 특정 시간대로 자르고

Friday, September 27, 13

Page 47: Mapreduce introduction

하지만 실제로 분석하는 과정을 보면?

데이터를 읽어서 특정 시간대로 자르고

특정 유저나 혹은 유저들을 다시 필터링하고

Friday, September 27, 13

Page 48: Mapreduce introduction

하지만 실제로 분석하는 과정을 보면?

데이터를 읽어서 특정 시간대로 자르고

특정 유저나 혹은 유저들을 다시 필터링하고

각 유저들의 행동을 합하거나, 더하거나 한뒤

Friday, September 27, 13

Page 49: Mapreduce introduction

하지만 실제로 분석하는 과정을 보면?

데이터를 읽어서 특정 시간대로 자르고

특정 유저나 혹은 유저들을 다시 필터링하고

각 유저들의 행동을 합하거나, 더하거나 한뒤

유니크한 값들도 찾아보고

Friday, September 27, 13

Page 50: Mapreduce introduction

하지만 실제로 분석하는 과정을 보면?

데이터를 읽어서 특정 시간대로 자르고

특정 유저나 혹은 유저들을 다시 필터링하고

각 유저들의 행동을 합하거나, 더하거나 한뒤

유니크한 값들도 찾아보고

원하는 분석 작업들을 진행...

Friday, September 27, 13

Page 51: Mapreduce introduction

하지만 실제로 분석하는 과정을 보면?

데이터를 읽어서 특정 시간대로 자르고

특정 유저나 혹은 유저들을 다시 필터링하고

각 유저들의 행동을 합하거나, 더하거나 한뒤

유니크한 값들도 찾아보고

원하는 분석 작업들을 진행...

마지막으로 보고싶은 기준으로 소팅하여 출력

Friday, September 27, 13

Page 52: Mapreduce introduction

Chaining!!

Friday, September 27, 13

Page 53: Mapreduce introduction

(교재 157p)

Friday, September 27, 13

Page 54: Mapreduce introduction

마지막으로...

Job, JobConf로 돌아가자

수 많은 옵션이 존재

각 옵션마다 의미가 있음

Friday, September 27, 13