SlideShare a Scribd company logo
1 of 26
MapReduce
예제로 설명해 봅시다
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는 해당 데이타가
누락되었단 의미에요
이런 ASCII data를 받아서 처리하려면?
●간단한 프로그램 짜면 되죠
o언어야 뭐든지 상관없고요
o이런 논리로 짜면 되겠죠?
 읽는다
 필요한 데이터 추출한다
 닫는다
 위의 과정을 모든 데이터에 대해 반복한다.
UNIX도구 이용, 매년 제일 높았던 지구
기온 찾기
awk기반 데이터 분석 스크립트 수행 결과
●모든 데이타 파일을 찾아 읽어서 처리한다
●20세기 데이타 전체 수행하는데 EC2고성능 CPU XL instance
에서 42분 걸렸다
●그런데 이게 최선입니까? 확실해요?
몇가지 개선점을 생각해봅시다
●병렬로 하면 좀 나아지긴 할건데요,
o연도별 파일 크기가 달라져서 동일한 크기로 일을 나누기가
쉽진 않네요
o각각의 프로세스의 처리 결과를 합산하는 시간은 얼마나 또
걸릴까요?
o단일 서버의 처리 능력은 한계가 있어요. 분산해서 처리해
도 이거 관리 하는 일이 복잡하죠
MapReduce개념을 좀 넣어 봅시다.
Map / Reduce
●크게 Map / Reduce로 단계를 나눠서 처리합니다.
o각 단계는 입력과 출력으로써 Key / Value 쌍을 가지고 있
고, 타입은 프로그래머 마음대로
oMap / Reduce 함수는 프로그래머가 직접 작성합니다
●Map단계
o입력: NDDC 원본 데이터
 키: 이 텍스트 파일에서 몇번째 라인인지 나타내는
Offset
 값:연도와 기온데이타를 추출
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
............................
............................
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 )
..........................
..........................
Map함수가 동작하면...
Map함수 출력
( 1950, 0 )
( 1950, 22)
( 1950, -11)
( 1949, 111)
( 1949, 78 )
..
.
.......
단순히 연도와 기온을 추출하고 이걸
출력합니다.
이제 Reduce함수에 맞게 입력데이타를
만듭니다
●Key를 중심으로
●Key / Value 쌍들을 정렬하고 그룹을 만든다.
●그래서 만든 데이타는 이렇게 된다. 이것을 Reduce함수에 집
어 넣습니다.
( 1949, [111, 78]
( 1950, [0, 22, -11] )
........
.......
Reduce함수가 하는 일
각 Key안에 있는 list를 sorting합니다.
( 1949, 111 )
( 1950, 22 )
........
.......
딱 보니 Pattern이 보이네요
이런 식으로 정리하는 거죠
1.많은 데이터에서 내가 필요한 데이터가 뭔지 정의하죠
2.이 데이터에서 Key / Value로 데이터를 정리합니다.
1.이 Key는 마지막 단계까지 쓰게 됩니다.
3.정리된 데이터를 정렬합니다.
4.정렬된 데이터를 순환하면서 원하는 데이타를 뽑아낸다.
UNIX pipeline으로 정리해 보면 이런 식이네요.
Hadoop을 이용해서는 어떻게 할까요?
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;
Hadoop 적용 코드: mapper
public 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 signs
airTemperature = 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)); }
}
Hadoop 적용 코드: mapper
String quality = line.substring(92, 93);
if (airTemperature != MISSING && quality.matches("[01459]")) {
output.collect(new Text(year), new IntWritable(airTemperature));
}
}
}
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;
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));
}
}
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;
Hadoop적용코드: Hadoop Job code
public class MaxTemperature {
public static void main(String[] args) throws IOException {
if (args.length != 2) {
System.err.println("Usage: MaxTemperature ");
System.exit(-1);
}
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);
}
실제 JAVA code를 읽어보면...
●기본적으로 Hadoop에서 Map함수, Reduce함수는 사용자가
작성하는 거다.
●세가지는 코드를 작성해야 한다.
oMap함수
oReduce함수
o구동 코드
 JobConf: 어떻게 Job을 수행할지 결정해주는 객체
 hadoop cluster에서는 소스코드를 JAR파일로 묶어야
하고 Hadoop이 Cluster에 JAR를 배치하게 해준다.
자세한 코드는
여기를 참조하세요.
http://answers.oreilly.com/topic/455-get-started-analyzing-data-
with-hadoop/

More Related Content

What's hot

Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정HyeonSeok Choi
 
5일차.map reduce 활용
5일차.map reduce 활용5일차.map reduce 활용
5일차.map reduce 활용주영 송
 
Spark은 왜 이렇게 유명해지고 있을까?
Spark은 왜 이렇게  유명해지고 있을까?Spark은 왜 이렇게  유명해지고 있을까?
Spark은 왜 이렇게 유명해지고 있을까?KSLUG
 
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계PgDay.Seoul
 
하둡 타입과 포맷
하둡 타입과 포맷하둡 타입과 포맷
하둡 타입과 포맷진호 박
 
하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다민철 정민철
 
하둡완벽가이드 Ch6. 맵리듀스 작동 방법
하둡완벽가이드 Ch6. 맵리듀스 작동 방법하둡완벽가이드 Ch6. 맵리듀스 작동 방법
하둡완벽가이드 Ch6. 맵리듀스 작동 방법HyeonSeok Choi
 
Distributed Programming Framework, hadoop
Distributed Programming Framework, hadoopDistributed Programming Framework, hadoop
Distributed Programming Framework, hadoopLGU+
 
하둡 설치(의사분산모드)
하둡 설치(의사분산모드)하둡 설치(의사분산모드)
하둡 설치(의사분산모드)Kwangyoung Jeon
 
서울 하둡 사용자 모임 발표자료
서울 하둡 사용자 모임 발표자료서울 하둡 사용자 모임 발표자료
서울 하둡 사용자 모임 발표자료Teddy Choi
 
Tajo TPC-H Benchmark Test on AWS
Tajo TPC-H Benchmark Test on AWSTajo TPC-H Benchmark Test on AWS
Tajo TPC-H Benchmark Test on AWSGruter
 
20140522 uc집계 정민철_발표자료_최종
20140522 uc집계 정민철_발표자료_최종20140522 uc집계 정민철_발표자료_최종
20140522 uc집계 정민철_발표자료_최종민철 정민철
 
Spark_Overview_qna
Spark_Overview_qnaSpark_Overview_qna
Spark_Overview_qna현철 박
 
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기NAVER D2
 
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for HadoopSeungYong Baek
 

What's hot (20)

Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정
 
5일차.map reduce 활용
5일차.map reduce 활용5일차.map reduce 활용
5일차.map reduce 활용
 
Spark은 왜 이렇게 유명해지고 있을까?
Spark은 왜 이렇게  유명해지고 있을까?Spark은 왜 이렇게  유명해지고 있을까?
Spark은 왜 이렇게 유명해지고 있을까?
 
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
 
Druid+superset
Druid+supersetDruid+superset
Druid+superset
 
하둡 타입과 포맷
하둡 타입과 포맷하둡 타입과 포맷
하둡 타입과 포맷
 
Hadoop overview
Hadoop overviewHadoop overview
Hadoop overview
 
하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다
 
하둡완벽가이드 Ch6. 맵리듀스 작동 방법
하둡완벽가이드 Ch6. 맵리듀스 작동 방법하둡완벽가이드 Ch6. 맵리듀스 작동 방법
하둡완벽가이드 Ch6. 맵리듀스 작동 방법
 
Distributed Programming Framework, hadoop
Distributed Programming Framework, hadoopDistributed Programming Framework, hadoop
Distributed Programming Framework, hadoop
 
Apache sqoop
Apache sqoopApache sqoop
Apache sqoop
 
하둡 설치(의사분산모드)
하둡 설치(의사분산모드)하둡 설치(의사분산모드)
하둡 설치(의사분산모드)
 
서울 하둡 사용자 모임 발표자료
서울 하둡 사용자 모임 발표자료서울 하둡 사용자 모임 발표자료
서울 하둡 사용자 모임 발표자료
 
Tajo TPC-H Benchmark Test on AWS
Tajo TPC-H Benchmark Test on AWSTajo TPC-H Benchmark Test on AWS
Tajo TPC-H Benchmark Test on AWS
 
HDFS Overview
HDFS OverviewHDFS Overview
HDFS Overview
 
20140522 uc집계 정민철_발표자료_최종
20140522 uc집계 정민철_발표자료_최종20140522 uc집계 정민철_발표자료_최종
20140522 uc집계 정민철_발표자료_최종
 
Spark_Overview_qna
Spark_Overview_qnaSpark_Overview_qna
Spark_Overview_qna
 
hadoop ch1
hadoop ch1hadoop ch1
hadoop ch1
 
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기
 
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
 

Similar to Map reduce 기본 설명

OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)SANG WON PARK
 
[232] 수퍼컴퓨팅과 데이터 어낼리틱스
[232] 수퍼컴퓨팅과 데이터 어낼리틱스[232] 수퍼컴퓨팅과 데이터 어낼리틱스
[232] 수퍼컴퓨팅과 데이터 어낼리틱스NAVER D2
 
Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Gruter
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처Sunggon Song
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기zupet
 
병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda병렬프로그래밍과 Cuda
병렬프로그래밍과 CudaSeok-joon Yun
 
천체 유형 분류 대회 1위 수상자 코드 설명
천체 유형 분류 대회 1위 수상자 코드 설명천체 유형 분류 대회 1위 수상자 코드 설명
천체 유형 분류 대회 1위 수상자 코드 설명DACON AI 데이콘
 
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Catch, Traffic!] : 지하철 혼잡도 및 키워드 분석 데이터 파이프라인 구축
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Catch, Traffic!] : 지하철 혼잡도 및 키워드 분석 데이터 파이프라인 구축제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Catch, Traffic!] : 지하철 혼잡도 및 키워드 분석 데이터 파이프라인 구축
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Catch, Traffic!] : 지하철 혼잡도 및 키워드 분석 데이터 파이프라인 구축BOAZ Bigdata
 
실무로 배우는 시스템 성능 최적화 10부. 네트워크 모니터링
실무로 배우는 시스템 성능 최적화   10부. 네트워크 모니터링실무로 배우는 시스템 성능 최적화   10부. 네트워크 모니터링
실무로 배우는 시스템 성능 최적화 10부. 네트워크 모니터링Hyunsoo Jung
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준NAVER D2
 
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습동현 강
 
Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_ozlael ozlael
 
TenforFlow Internals
TenforFlow InternalsTenforFlow Internals
TenforFlow InternalsKiho Hong
 
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제NAVER D2
 
[기상 정보학] 지상 관측 자료 (아스키 파일)를 이용하여 NetCDF 변환한 후 시계열 그래프 그리기 그리고 GPCP 강우강도 자료를 이...
[기상 정보학] 지상 관측 자료 (아스키 파일)를 이용하여 NetCDF 변환한 후 시계열 그래프 그리기 그리고 GPCP 강우강도 자료를 이...[기상 정보학] 지상 관측 자료 (아스키 파일)를 이용하여 NetCDF 변환한 후 시계열 그래프 그리기 그리고 GPCP 강우강도 자료를 이...
[기상 정보학] 지상 관측 자료 (아스키 파일)를 이용하여 NetCDF 변환한 후 시계열 그래프 그리기 그리고 GPCP 강우강도 자료를 이...Lee Sang-Ho
 
Configuring global infrastructure in terraform
Configuring global infrastructure in terraformConfiguring global infrastructure in terraform
Configuring global infrastructure in terraformSANGGI CHOI
 
하둡-맵리듀스
하둡-맵리듀스하둡-맵리듀스
하둡-맵리듀스Yunsu Lee
 
[자바카페] 람다 일괄처리 계층
[자바카페] 람다 일괄처리 계층[자바카페] 람다 일괄처리 계층
[자바카페] 람다 일괄처리 계층용호 최
 
분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기NAVER D2
 

Similar to Map reduce 기본 설명 (20)

OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
 
[232] 수퍼컴퓨팅과 데이터 어낼리틱스
[232] 수퍼컴퓨팅과 데이터 어낼리틱스[232] 수퍼컴퓨팅과 데이터 어낼리틱스
[232] 수퍼컴퓨팅과 데이터 어낼리틱스
 
Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
 
병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda
 
Hadoop administration
Hadoop administrationHadoop administration
Hadoop administration
 
천체 유형 분류 대회 1위 수상자 코드 설명
천체 유형 분류 대회 1위 수상자 코드 설명천체 유형 분류 대회 1위 수상자 코드 설명
천체 유형 분류 대회 1위 수상자 코드 설명
 
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Catch, Traffic!] : 지하철 혼잡도 및 키워드 분석 데이터 파이프라인 구축
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Catch, Traffic!] : 지하철 혼잡도 및 키워드 분석 데이터 파이프라인 구축제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Catch, Traffic!] : 지하철 혼잡도 및 키워드 분석 데이터 파이프라인 구축
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Catch, Traffic!] : 지하철 혼잡도 및 키워드 분석 데이터 파이프라인 구축
 
실무로 배우는 시스템 성능 최적화 10부. 네트워크 모니터링
실무로 배우는 시스템 성능 최적화   10부. 네트워크 모니터링실무로 배우는 시스템 성능 최적화   10부. 네트워크 모니터링
실무로 배우는 시스템 성능 최적화 10부. 네트워크 모니터링
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준
 
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습
 
Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_
 
TenforFlow Internals
TenforFlow InternalsTenforFlow Internals
TenforFlow Internals
 
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
 
[기상 정보학] 지상 관측 자료 (아스키 파일)를 이용하여 NetCDF 변환한 후 시계열 그래프 그리기 그리고 GPCP 강우강도 자료를 이...
[기상 정보학] 지상 관측 자료 (아스키 파일)를 이용하여 NetCDF 변환한 후 시계열 그래프 그리기 그리고 GPCP 강우강도 자료를 이...[기상 정보학] 지상 관측 자료 (아스키 파일)를 이용하여 NetCDF 변환한 후 시계열 그래프 그리기 그리고 GPCP 강우강도 자료를 이...
[기상 정보학] 지상 관측 자료 (아스키 파일)를 이용하여 NetCDF 변환한 후 시계열 그래프 그리기 그리고 GPCP 강우강도 자료를 이...
 
Configuring global infrastructure in terraform
Configuring global infrastructure in terraformConfiguring global infrastructure in terraform
Configuring global infrastructure in terraform
 
하둡-맵리듀스
하둡-맵리듀스하둡-맵리듀스
하둡-맵리듀스
 
[자바카페] 람다 일괄처리 계층
[자바카페] 람다 일괄처리 계층[자바카페] 람다 일괄처리 계층
[자바카페] 람다 일괄처리 계층
 
분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기
 

Map reduce 기본 설명

  • 2. 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는 해당 데이타가 누락되었단 의미에요
  • 3. 이런 ASCII data를 받아서 처리하려면? ●간단한 프로그램 짜면 되죠 o언어야 뭐든지 상관없고요 o이런 논리로 짜면 되겠죠?  읽는다  필요한 데이터 추출한다  닫는다  위의 과정을 모든 데이터에 대해 반복한다.
  • 4. UNIX도구 이용, 매년 제일 높았던 지구 기온 찾기 awk기반 데이터 분석 스크립트 수행 결과 ●모든 데이타 파일을 찾아 읽어서 처리한다 ●20세기 데이타 전체 수행하는데 EC2고성능 CPU XL instance 에서 42분 걸렸다 ●그런데 이게 최선입니까? 확실해요?
  • 5. 몇가지 개선점을 생각해봅시다 ●병렬로 하면 좀 나아지긴 할건데요, o연도별 파일 크기가 달라져서 동일한 크기로 일을 나누기가 쉽진 않네요 o각각의 프로세스의 처리 결과를 합산하는 시간은 얼마나 또 걸릴까요? o단일 서버의 처리 능력은 한계가 있어요. 분산해서 처리해 도 이거 관리 하는 일이 복잡하죠
  • 7. Map / Reduce ●크게 Map / Reduce로 단계를 나눠서 처리합니다. o각 단계는 입력과 출력으로써 Key / Value 쌍을 가지고 있 고, 타입은 프로그래머 마음대로 oMap / Reduce 함수는 프로그래머가 직접 작성합니다 ●Map단계 o입력: NDDC 원본 데이터  키: 이 텍스트 파일에서 몇번째 라인인지 나타내는 Offset  값:연도와 기온데이타를 추출
  • 9. 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 ) .......................... ..........................
  • 11. Map함수 출력 ( 1950, 0 ) ( 1950, 22) ( 1950, -11) ( 1949, 111) ( 1949, 78 ) .. . ....... 단순히 연도와 기온을 추출하고 이걸 출력합니다.
  • 12. 이제 Reduce함수에 맞게 입력데이타를 만듭니다 ●Key를 중심으로 ●Key / Value 쌍들을 정렬하고 그룹을 만든다. ●그래서 만든 데이타는 이렇게 된다. 이것을 Reduce함수에 집 어 넣습니다. ( 1949, [111, 78] ( 1950, [0, 22, -11] ) ........ .......
  • 13. Reduce함수가 하는 일 각 Key안에 있는 list를 sorting합니다. ( 1949, 111 ) ( 1950, 22 ) ........ .......
  • 14. 딱 보니 Pattern이 보이네요 이런 식으로 정리하는 거죠 1.많은 데이터에서 내가 필요한 데이터가 뭔지 정의하죠 2.이 데이터에서 Key / Value로 데이터를 정리합니다. 1.이 Key는 마지막 단계까지 쓰게 됩니다. 3.정리된 데이터를 정렬합니다. 4.정렬된 데이터를 순환하면서 원하는 데이타를 뽑아낸다.
  • 15. UNIX pipeline으로 정리해 보면 이런 식이네요.
  • 17. 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;
  • 18. Hadoop 적용 코드: mapper public 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 signs airTemperature = 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)); } }
  • 19. Hadoop 적용 코드: mapper String quality = line.substring(92, 93); if (airTemperature != MISSING && quality.matches("[01459]")) { output.collect(new Text(year), new IntWritable(airTemperature)); } } }
  • 20. 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;
  • 21. 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)); } }
  • 22. 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;
  • 23. Hadoop적용코드: Hadoop Job code public class MaxTemperature { public static void main(String[] args) throws IOException { if (args.length != 2) { System.err.println("Usage: MaxTemperature "); System.exit(-1); }
  • 24. 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); }
  • 25. 실제 JAVA code를 읽어보면... ●기본적으로 Hadoop에서 Map함수, Reduce함수는 사용자가 작성하는 거다. ●세가지는 코드를 작성해야 한다. oMap함수 oReduce함수 o구동 코드  JobConf: 어떻게 Job을 수행할지 결정해주는 객체  hadoop cluster에서는 소스코드를 JAR파일로 묶어야 하고 Hadoop이 Cluster에 JAR를 배치하게 해준다.

Editor's Notes

  1. MapReduce자체에 대한 궁금증이 원래 많았다.  Hadoop도 중요하지만 그 기반이 된 MapReduce에 대해 알아야 뭘 해도 할 것이다라는 생각에 이
  2. 이 예제는 'Hadoop 완벽가이드'에 있는 것을 이용 NCDC의 기상 데이터 셋을 읽어 처리하는 예제 NCDC에 들어가 보면 그 데이타의 거대함에 멍.. 해진다.  몇개받아보고 깜짝 놀람. 
  3. 이런 대량 데이타도 예전 같으면 일일이 잃고 처리하고 하게 해 줘야 한다. 
  4. AWK로 이걸 하는 스크립트를 만들어 본 결과 쓸만한겨? 
  5. 기본적인 병렬처리는 일을 나눠서 여럿이 하고 이를 모아서 처리하는 구조å
  6. 이것을 MapReduce방식으로 문제를 바꿔봅시다. 
  7. 읽어보면 이런 식으로 들어가 있습니다. 복잡하긴 합니다만...
  8. 연도 / 오
  9. 필요한 데이타를 뽑아보면 이렇습니다.
  10. cat은 출력하는 unix command