map reduce 기본 설명

26
MapReduce 예예예 예예예 예예예

Upload: jinho-yoo

Post on 04-Aug-2015

1.077 views

Category:

Engineering


3 download

TRANSCRIPT

Page 1: Map reduce 기본 설명

MapReduce

예제로 설명해 봅시다

Page 2: Map reduce 기본 설명

Example: 기상데이터셋

●출처 : www.ncdc.noaa.gov● 반 구조적이고 레코드 지향적인 데이타 분석 포맷

STATION DATE EVAP MDEV MXPN MNPN DAEV SN32 SN03 SN02 SN33 SX33 SX32 SX03 SX02 DWPR DAPR SNWD MDPR DASF PRCP MDSF SNOW ACSH ACMH TSUN PSUN TMIN TOBS DATX DATN TMAX MDTX MDTN WESD FRGT GAHT WESF FMTM WDFM WDFG AWND WSF2 WSF5 WSF1 WSFG WSFM WDMV MDWM DAWM PGTM WDF5 WDF2 WDF1 WV20 WV18 WV03 WV01 WT18 WT19 WT14 WT15 WT16 WT17 WT22 WT21 WT05 WT06 WT03 WT04 WT09 WT07 WT08 WT13 WT12 WT11 WT10 WT02 WT01 ----------------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- GHCND:USC00083322 20000101 10 9999 9999 9999 9999 139 9999 9999 139 156 161 9999 9999 9999 9999 0 9999 9999 0 9999 0 9999 9999 9999 9999 89 200 9999 9999 228 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999

9999 는 해당 데이타가 누락되었단 의미에요

Page 3: Map reduce 기본 설명

이런 ASCII data 를받아서처리하려면 ? 

● 간단한 프로그램 짜면 되죠o 언어야 뭐든지 상관없고요o 이런 논리로 짜면 되겠죠 ? 

읽는다 필요한 데이터 추출한다닫는다 위의 과정을 모든 데이터에 대해 반복한다 . 

Page 4: Map reduce 기본 설명

UNIX 도구이용 , 매년제일높았던지구 기온찾기

awk 기반 데이터 분석 스크립트 수행 결과● 모든 데이타 파일을 찾아 읽어서 처리한다●20 세기 데이타 전체 수행하는데 EC2 고성능 CPU XL instance

에서 42 분 걸렸다● 그런데 이게 최선입니까 ? 확실해요 ? 

Page 5: Map reduce 기본 설명

몇가지개선점을생각해봅시다

● 병렬로 하면 좀 나아지긴 할건데요 , o 연도별 파일 크기가 달라져서 동일한 크기로 일을 나누기가

쉽진 않네요o 각각의 프로세스의 처리 결과를 합산하는 시간은 얼마나 또걸릴까요 ? 

o 단일 서버의 처리 능력은 한계가 있어요 . 분산해서 처리해도 이거 관리 하는 일이 복잡하죠

Page 6: Map reduce 기본 설명

MapReduce 개념을좀넣어봅시다 . 

Page 7: Map reduce 기본 설명

Map / Reduce

● 크게 Map / Reduce 로 단계를 나눠서 처리합니다 .o 각 단계는 입력과 출력으로써 Key / Value 쌍을 가지고 있고 ,

타입은 프로그래머 마음대로oMap / Reduce 함수는 프로그래머가 직접 작성합니다

●Map단계o입력 : NDDC 원본 데이터

키 : 이 텍스트 파일에서 몇번째 라인인지 나타내는 Offset값 : 연도와 기온데이타를 추출

Page 8: Map reduce 기본 설명

0067011990999991950051507004+68750+023550FM-12+038299999V0203301N00671220001CN9999999N9+00001+99999999999

0043011990999991950051512004+68750+023550FM-12+038299999V0203201N00671220001CN9999999N9+00221+99999999999

0043011990999991950051518004+68750+023550FM-12+038299999V0203201N00261220001CN9999999N9-00111+99999999999

0043012650999991949032412004+62300+010750FM-12+048599999V0202701N00461220001CN0500001N9+01111+99999999999

0043012650999991949032418004+62300+010750FM -12+048599999V0202701N00461220001CN0500001N9+00781+99999999999........................................................

Page 9: Map reduce 기본 설명

Key / Value 로 Map 함수에입력 되는것

( 0, 0067011990999991950051507004+68750+023550FM-12+038299999V0203301N00671220001CN9999999N9+00001+99999999999 )

(106, 0043011990999991950051512004+68750+023550FM-12+038299999V0203201N00671220001CN9999999N9+00221+99999999999 )

(212, 0043011990999991950051518004+68750+023550FM-12+038299999V0203201N00261220001CN9999999N9-00111+99999999999 )

(318, 0043012650999991949032412004+62300+010750FM-12+048599999V0202701N00461220001CN0500001N9+01111+99999999999 )

(424,  0043012650999991949032418004+62300+010750FM -12+048599999V0202701N00461220001CN0500001N9+00781+99999999999 )....................................................

Page 10: Map reduce 기본 설명

Map 함수가동작하면 ... 

Page 11: Map reduce 기본 설명

Map 함수출력

( 1950, 0 )( 1950, 22)( 1950, -11)( 1949, 111)( 1949, 78 )..........

단순히연도와기온을추출하고이걸출력합니다 . 

Page 12: Map reduce 기본 설명

이제 Reduce 함수에맞게입력데이타를만듭니다●Key 를 중심으로●Key / Value 쌍들을 정렬하고 그룹을 만든다 .● 그래서 만든 데이타는 이렇게 된다 . 이것을 Reduce 함수에 집어넣습니다 . 

( 1949, [111, 78] ( 1950, [0, 22, -11] )...............

Page 13: Map reduce 기본 설명

Reduce 함수가하는일

각 Key 안에 있는 list 를 sorting합니다 . 

( 1949, 111 )  ( 1950, 22   )...............

Page 14: Map reduce 기본 설명

딱보니 Pattern 이보이네요

이런 식으로 정리하는 거죠1. 많은 데이터에서 내가 필요한 데이터가 뭔지 정의하죠2. 이 데이터에서 Key / Value 로 데이터를 정리합니다 .

1. 이 Key 는 마지막 단계까지 쓰게 됩니다 . 3. 정리된 데이터를 정렬합니다 . 4. 정렬된 데이터를 순환하면서 원하는 데이타를 뽑아낸다 . 

Page 15: Map reduce 기본 설명

UNIX pipeline 으로 정리해 보면 이런 식이네요 . 

Page 16: Map reduce 기본 설명

Hadoop 을이용해서는어떻게할까요 ? 

Page 17: Map reduce 기본 설명

Hadoop 적용코드 : mapper

import java.io.IOException;import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapred.MapReduceBase;import org.apache.hadoop.mapred.Mapper;import org.apache.hadoop.mapred.OutputCollector;import org.apache.hadoop.mapred.Reporter;

Page 18: Map reduce 기본 설명

Hadoop 적용코드 : mapperpublic class MaxTemperatureMapper extends MapReduceBase

implements Mapper {private static final int MISSING = 9999;public void map(LongWritable key, Text value,

OutputCollector output, Reporter reporter)

throws IOException {

String line = value.toString();String year = line.substring(15, 19);int airTemperature;

if (line.charAt(87) == '+') { // parseInt doesn't like leading plus signsairTemperature = Integer.parseInt(line.substring(88, 92));} else {airTemperature = Integer.parseInt(line.substring(87, 92));}

String quality = line.substring(92, 93);if (airTemperature != MISSING && quality.matches("[01459]")) {output.collect(new Text(year), new IntWritable(airTemperature));    }}

Page 19: Map reduce 기본 설명

Hadoop 적용코드 : mapper

String quality = line.substring(92, 93);

if (airTemperature != MISSING && quality.matches("[01459]")) {

output.collect(new Text(year), new IntWritable(airTemperature));

}

}

}

Page 20: Map reduce 기본 설명

Hadoop적용코드 : Reducer

import java.io.IOException;import java.util.Iterator;

import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapred.MapReduceBase;import org.apache.hadoop.mapred.OutputCollector;import org.apache.hadoop.mapred.Reducer;import org.apache.hadoop.mapred.Reporter;

Page 21: Map reduce 기본 설명

Hadoop적용코드 : Reducer

public class MaxTemperatureReducer extends MapReduceBase

implements Reducer {

public void reduce(Text key, Iterator values,

OutputCollector output, Reporter reporter)throws IOException {

int maxValue = Integer.MIN_VALUE;

while (values.hasNext()) {maxValue = Math.max(maxValue, values.next().get());}output.collect(key, new IntWritable(maxValue));

}}

Page 22: Map reduce 기본 설명

Hadoop적용코드 : Hadoop Job code

import java.io.IOException;

import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapred.FileInputFormat;import org.apache.hadoop.mapred.FileOutputFormat;import org.apache.hadoop.mapred.JobClient;import org.apache.hadoop.mapred.JobConf;

Page 23: Map reduce 기본 설명

Hadoop적용코드 : Hadoop Job codepublic class MaxTemperature {

public static void main(String[] args) throws IOException {

if (args.length != 2) {

System.err.println("Usage: MaxTemperature  ");

System.exit(-1);

}

Page 24: Map reduce 기본 설명

Hadoop적용코드 : Hadoop Job code

JobConf conf = new JobConf(MaxTemperature.class);conf.setJobName("Max temperature");

FileInputFormat.addInputPath(conf, new Path(args[0]));FileOutputFormat.setOutputPath(conf, new Path(args[1]));

conf.setMapperClass(MaxTemperatureMapper.class);conf.setReducerClass(MaxTemperatureReducer.class);

conf.setOutputKeyClass(Text.class);conf.setOutputValueClass(IntWritable.class);

JobClient.runJob(conf);

}

}

Page 25: Map reduce 기본 설명

실제 JAVA code 를읽어보면 ... 

● 기본적으로 Hadoop 에서 Map함수 , Reduce 함수는 사용자가 작성하는 거다 . 

● 세가지는 코드를 작성해야 한다 .oMap함수oReduce함수o 구동 코드

JobConf: 어떻게 Job 을 수행할지 결정해주는 객체 hadoop cluster 에서는 소스코드를 JAR 파일로 묶어야

하고 Hadoop 이 Cluster 에 JAR 를 배치하게 해준다 . 

Page 26: Map reduce 기본 설명

자세한코드는

여기를 참조하세요 . http://answers.oreilly.com/topic/455-get-started-analyzing-data-with-hadoop/