introduce of hadoop map reduce

20
Hadoop MapReduce BigO 스스스 스스 스스스

Upload: dae-yong-shin

Post on 01-Jul-2015

2.393 views

Category:

Documents


3 download

DESCRIPTION

this document is

TRANSCRIPT

Page 1: introduce of Hadoop map reduce

Hadoop MapReduce

BigO 스터디 그룹신대용

Page 2: introduce of Hadoop map reduce

맵리듀스• 함수 언어에서 사용되던 것에서 유래 • Hadoop 에서 제공하는 프로그래밍 모델

• Map – 데이터에서 Key,Value 를 선출

• Reduce– Key 가 unique 해질 때 까지 Value 들을 정제

Page 3: introduce of Hadoop map reduce

기상 데이터 예제• NCDC 의 1901~2001 년 기상 데이터

• 0067011990999991950051507004...9999999N9+00001+99999999999...

• 0043011990999991950051512004...9999999N9+00221+99999999999...

• 0043011990999991950051518004...9999999N9-00111+99999999999...

Page 4: introduce of Hadoop map reduce

AWK 처리#!/usr/bin/env bashfor year in all/*do echo -ne `basename $year .gz`"\t" gunzip -c $year | \ awk '{ temp = substr($0, 88, 5) + 0; q = substr($0, 93, 1); if (temp !=9999 && q ~ /[01459]/ && temp > max) max = temp } END { print max }'Done

툴 항목 비고

AWK 42 분 1core 사용

MapReduce 6 분 8core 사용on a 10-node EC2 cluster running High-CPU Extra Large Instances

Page 5: introduce of Hadoop map reduce

MapReduce 처리

(0, 0067011990999991950051507004...9999999N9+00001+99999999999...)(106, 0043011990999991950051512004...9999999N9+00221+99999999999...)(212, 0043011990999991950051518004...9999999N9-00111+99999999999...)(318, 0043012650999991949032412004...0500001N9+01111+99999999999...)(424, 0043012650999991949032418004...0500001N9+00781+99999999999...)

(1950, 0)(1950, 22)(1950, −11)(1949, 111)(1949, 78)

(1949, 111)(1950, 22)

Page 6: introduce of Hadoop map reduce

Map 함수

Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT>

모든 데이터는 Serialize 될 수 있어야 하며 Writeable 을 구현한다 .Writeable 은 DataInput, DataOutput java interface 를

이용한다 .

emit ( key, value)

Page 7: introduce of Hadoop map reduce

Reduce 함수

Reduce 는 멱등이어야 한다 .

New API 에서 Iterable 로 변경됨신규 exception

Page 8: introduce of Hadoop map reduce

Main

Class 이름으로 현재 ClassPath 에서 jar 를 찾아 cluster 들에 배포

Local, HDFS, S3 등Output 만들어져 있어야 함

Job Running

Page 9: introduce of Hadoop map reduce

API 차이점• 추상객체에 기본적으로 구현이 되어 있는 것들을 사용• namespace 이름을 fully 적음 org.apache.hadoop.mapre-

duce 과거 org.apache.hadoop.mapred.• Context 의 역활이 커짐 JobConf, the OutputCollector, and the

Reporter 의 역활 포함• JobConf 의 설정이 통합됨• map, reduce 의 run 메소드 오버라이딩을 통해서 flow control 이

가능 • JobClient->Job• java.lang.InterruptedException 의 추가로 오버라이딩한 메소드의

graceFully 한 종료 가능• reduce 에서 받는 values 가 iterator 에서 iterable 로 바뀌면서 for

(VALUEIN value : values) { ... } 사용 가능

Page 10: introduce of Hadoop map reduce

Scale Out

• Job 은 사용자가 이루기 원하는 작업– data,configuration, program 으로 구성됨–map task, reduce task 로 나뉨

• Input 은 고정 크기의 split 으로 나뉨– Split 은 HDFS 의 block size(64MB)– 각 Map task 는 우선적으로 split 이 위치한

곳에서 수행됨 data locality optimazation

• Jobtracker 는 Tasktracker 를 스케쥴링• tasktracker 는 task 들을 수행

Page 11: introduce of Hadoop map reduce

Data Flow

Figure 6-1. How Hadoop runs a MapReduce job using the classic framework

Page 12: introduce of Hadoop map reduce

Data Flow (cont)

Figure 2-3. MapReduce data flow with a single reduce task

Page 13: introduce of Hadoop map reduce

data locality optimization

• Split 이 64MB 이상이면 복수개의 node 에 걸쳐 지게 됨• Map task 는 Map 결과를 local 에 저장

– HDFS 는 비싸며 reducer 전송 성공 후 삭제• Reduce task 는 결과를 HDFS 에 저장

– Local 1 개 , off-rack 2 개

Page 14: introduce of Hadoop map reduce

partition

• Reducer 개수는 input 크기에 따라 결정되지 않는다 .

• Reduce task 가 복수개면 map task 는 output 을 partition 으로 나눈다 .– 특정 key 의 연관 데이터는 모두 한 Partition 에

포함 된다 .

Page 15: introduce of Hadoop map reduce

Data Flow with partitions

Page 16: introduce of Hadoop map reduce

Combiner Functions

• Map 결과 value 들을 정제• Reduce 의 멱등성을 해치거나 reduce 가

결합법칙을 만족해야 하는 경우에는 사용할 수 없다 .–max(0, 20, 10, 25, 15) = max(max(0,

20, 10), max(25, 15)) = max(20, 25) = 25

–mean(mean(0, 20, 10), mean(25, 15)) = mean(10, 20) = 15

Page 17: introduce of Hadoop map reduce

Combiner Functions (cont)

• Map node 의 output 이 reduce node 로 보내질 때

• reducer 에서 data 를 shuffle 하는 단계

Page 18: introduce of Hadoop map reduce

Hadoop Streaming

• stdio 를 이용하는 map, reduce 를 작성• Hadoop 에서도 실행 가능 하도록 지원함

% cat input/ncdc/sample.txt | ch02/src/main/ruby/max_temperature_map.rb | \sort | ch02/src/main/ruby/max_temperature_reduce.rb

% hadoop jar $HADOOP_INSTALL/contrib/streaming/hadoop-*-streaming.-jar \-input input/ncdc/sample.txt \-output output \-mapper ch02/src/main/ruby/max_temperature_map.rb \-reducer ch02/src/main/ruby/max_temperature_reduce.rb

Page 19: introduce of Hadoop map reduce

Hadoop Pipes

• C++ 을 위한 MapReduce interface• tasktracker 와 socket 통신을 한다 . JNI (X) • Data 가 HDFS 에 존재 해야만 한다 .• C++ 과 Java 로직 혼용이 가능 하다 .

Program 내에 reader, writer 가 존재함을 뜻함

“hadoop fs -put [A] [B]” 파일 배치 필요

Page 20: introduce of Hadoop map reduce

Streaming, Pipes 내부