SlideShare una empresa de Scribd logo
1 de 20
Hadoop MapReduce

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

• Map
  – 데이터에서 Key,Value를 선출
• Reduce
  – Key가 unique해질 때 까지 Value들을 정제
기상 데이터 예제
• NCDC의 1901~2001년 기상 데이터

•   0067011990999991950051507004...9999999N9+00001+99999999999...
•   0043011990999991950051512004...9999999N9+00221+99999999999...
•   0043011990999991950051518004...9999999N9-00111+99999999999...
AWK 처리
#!/usr/bin/env bash
for 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
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)
                                                 (1949, 111)
           (1950, −11)
                                                 (1950, 22)
           (1949, 111)
           (1949, 78)
Map함수
                     모든 데이터는 Serialize 될 수 있어야 하며 Writeable을 구현한다.
                     Writeable은 DataInput, DataOutput java interface를 이용한다.



                                  Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT>




emit ( key, value)
Reduce 함수



  Reduce는 멱등이어야 한다.
                 New API에서 Iterable 로 변경
        신규 exception
Main


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

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




       Job Running
API 차이점
• 추상객체에 기본적으로 구현이 되어 있는 것들을 사용
• namespace 이름을 fully 적음org.apache.hadoop.mapreduce
  과거 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) { ... } 사용 가능
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들을 수행
Data Flow




Figure 6-1. How Hadoop runs a MapReduce job using the classic framework
Data Flow (cont)




Figure 2-3. MapReduce data flow with a single reduce task
data locality optimization
• Split이 64MB이상이면 복수개의 node에 걸쳐 지게 됨
• Map task는 Map결과를 local에 저장
  – HDFS는 비싸며 reducer전송 성공 후 삭제
• Reduce task는 결과를 HDFS에 저장
  – Local 1개, off-rack 2개
partition
• Reducer 개수는 input 크기에 따라 결정되
  지 않는다.
• Reduce task가 복수개면 map task는
  output을 partition 으로 나눈다.
 – 특정 key의 연관 데이터는 모두 한 Partition에
   포함 된다.
Data Flow with partitions
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
Combiner Functions (cont)
• Map node의 output 이 reduce node로 보내질 때
• reducer에서 data를 shuffle하는 단계
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
Hadoop Pipes
•   C++을 위한 MapReduce interface
•   tasktracker와 socket통신을 한다. JNI (X)
•   Data가 HDFS에 존재 해야만 한다.
•   C++과 Java 로직 혼용이 가능 하다.




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



              “hadoop fs -put [A] [B]” 파일 배치 필요
Streaming, Pipes 내부

Más contenido relacionado

La actualidad más candente

Distributed Programming Framework, hadoop
Distributed Programming Framework, hadoopDistributed Programming Framework, hadoop
Distributed Programming Framework, hadoopLGU+
 
하둡 설치(의사분산모드)
하둡 설치(의사분산모드)하둡 설치(의사분산모드)
하둡 설치(의사분산모드)Kwangyoung Jeon
 
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계PgDay.Seoul
 
하둡 타입과 포맷
하둡 타입과 포맷하둡 타입과 포맷
하둡 타입과 포맷진호 박
 
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
 
[빅데이터 컨퍼런스 전희원]
[빅데이터 컨퍼런스 전희원][빅데이터 컨퍼런스 전희원]
[빅데이터 컨퍼런스 전희원]Jayoung Lim
 
서울 하둡 사용자 모임 발표자료
서울 하둡 사용자 모임 발표자료서울 하둡 사용자 모임 발표자료
서울 하둡 사용자 모임 발표자료Teddy Choi
 
Spark 소개 1부
Spark 소개 1부Spark 소개 1부
Spark 소개 1부Jinho Yoo
 
하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다민철 정민철
 
하둡완벽가이드 Ch9
하둡완벽가이드 Ch9하둡완벽가이드 Ch9
하둡완벽가이드 Ch9HyeonSeok Choi
 
Gpdb best practices v a01 20150313
Gpdb best practices v a01 20150313Gpdb best practices v a01 20150313
Gpdb best practices v a01 20150313Sanghee Lee
 
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기NAVER D2
 
5일차.map reduce 활용
5일차.map reduce 활용5일차.map reduce 활용
5일차.map reduce 활용주영 송
 

La actualidad más candente (20)

Distributed Programming Framework, hadoop
Distributed Programming Framework, hadoopDistributed Programming Framework, hadoop
Distributed Programming Framework, hadoop
 
Hadoop administration
Hadoop administrationHadoop administration
Hadoop administration
 
Hadoop overview
Hadoop overviewHadoop overview
Hadoop overview
 
하둡 설치(의사분산모드)
하둡 설치(의사분산모드)하둡 설치(의사분산모드)
하둡 설치(의사분산모드)
 
Apache sqoop
Apache sqoopApache sqoop
Apache sqoop
 
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
 
하둡 타입과 포맷
하둡 타입과 포맷하둡 타입과 포맷
하둡 타입과 포맷
 
HDFS Overview
HDFS OverviewHDFS Overview
HDFS Overview
 
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
 
[빅데이터 컨퍼런스 전희원]
[빅데이터 컨퍼런스 전희원][빅데이터 컨퍼런스 전희원]
[빅데이터 컨퍼런스 전희원]
 
YARN overview
YARN overviewYARN overview
YARN overview
 
Druid+superset
Druid+supersetDruid+superset
Druid+superset
 
Apache hive
Apache hiveApache hive
Apache hive
 
서울 하둡 사용자 모임 발표자료
서울 하둡 사용자 모임 발표자료서울 하둡 사용자 모임 발표자료
서울 하둡 사용자 모임 발표자료
 
Spark 소개 1부
Spark 소개 1부Spark 소개 1부
Spark 소개 1부
 
하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다
 
하둡완벽가이드 Ch9
하둡완벽가이드 Ch9하둡완벽가이드 Ch9
하둡완벽가이드 Ch9
 
Gpdb best practices v a01 20150313
Gpdb best practices v a01 20150313Gpdb best practices v a01 20150313
Gpdb best practices v a01 20150313
 
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기
[225]빅데이터를 위한 분산 딥러닝 플랫폼 만들기
 
5일차.map reduce 활용
5일차.map reduce 활용5일차.map reduce 활용
5일차.map reduce 활용
 

Destacado

Apache Hive Hook
Apache Hive HookApache Hive Hook
Apache Hive HookMinwoo Kim
 
Cloudera Impala 1.0
Cloudera Impala 1.0Cloudera Impala 1.0
Cloudera Impala 1.0Minwoo Kim
 
하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기beom kyun choi
 
Hadoop Overview 1
Hadoop Overview 1Hadoop Overview 1
Hadoop Overview 1Kay Kim
 
Mapreduce introduction
Mapreduce introductionMapreduce introduction
Mapreduce introductionJongyoul Lee
 
하둡 알아보기(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
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개중선 곽
 
빅데이터, big data
빅데이터, big data빅데이터, big data
빅데이터, big dataH K Yoon
 
Hive 입문 발표 자료
Hive 입문 발표 자료Hive 입문 발표 자료
Hive 입문 발표 자료beom kyun choi
 
Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기iFunFactory Inc.
 
하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기beom kyun choi
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정중선 곽
 
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Park JoongSoo
 
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈Minwoo Kim
 
하둡 HDFS 훑어보기
하둡 HDFS 훑어보기하둡 HDFS 훑어보기
하둡 HDFS 훑어보기beom kyun choi
 

Destacado (17)

Apache Hive Hook
Apache Hive HookApache Hive Hook
Apache Hive Hook
 
Cloudera Impala 1.0
Cloudera Impala 1.0Cloudera Impala 1.0
Cloudera Impala 1.0
 
하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기
 
Hadoop Overview 1
Hadoop Overview 1Hadoop Overview 1
Hadoop Overview 1
 
Hive begins
Hive beginsHive begins
Hive begins
 
Mapreduce introduction
Mapreduce introductionMapreduce introduction
Mapreduce introduction
 
하둡 알아보기(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
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개
 
빅데이터, big data
빅데이터, big data빅데이터, big data
빅데이터, big data
 
Hive 입문 발표 자료
Hive 입문 발표 자료Hive 입문 발표 자료
Hive 입문 발표 자료
 
Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기
 
하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
 
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
 
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
 
Zookeeper 소개
Zookeeper 소개Zookeeper 소개
Zookeeper 소개
 
하둡 HDFS 훑어보기
하둡 HDFS 훑어보기하둡 HDFS 훑어보기
하둡 HDFS 훑어보기
 

Similar a introduce of Hadoop map reduce

Spark_Overview_qna
Spark_Overview_qnaSpark_Overview_qna
Spark_Overview_qna현철 박
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처Sunggon Song
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Gruter
 
Spark은 왜 이렇게 유명해지고 있을까?
Spark은 왜 이렇게  유명해지고 있을까?Spark은 왜 이렇게  유명해지고 있을까?
Spark은 왜 이렇게 유명해지고 있을까?KSLUG
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구ByungJoon Lee
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기zupet
 
Pyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlabPyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlabIntae Cho
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준NAVER D2
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성HyeonSeok Choi
 
ARTIK 710 IoT class 02
ARTIK 710 IoT class 02ARTIK 710 IoT class 02
ARTIK 710 IoT class 02정출 김
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
PostGIS - National Education Center for GIS: Open Source GIS
PostGIS - National Education Center for GIS: Open Source GIS PostGIS - National Education Center for GIS: Open Source GIS
PostGIS - National Education Center for GIS: Open Source GIS MinPa Lee
 
서버리스 데이터 플로우 개발기 - 김재현 (Superb AI) :: AWS Community Day 2020
서버리스 데이터 플로우 개발기 - 김재현 (Superb AI) :: AWS Community Day 2020서버리스 데이터 플로우 개발기 - 김재현 (Superb AI) :: AWS Community Day 2020
서버리스 데이터 플로우 개발기 - 김재현 (Superb AI) :: AWS Community Day 2020AWSKRUG - AWS한국사용자모임
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기Yongha Yoo
 
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
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9진현 조
 

Similar a introduce of Hadoop map reduce (20)

Spark_Overview_qna
Spark_Overview_qnaSpark_Overview_qna
Spark_Overview_qna
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014
 
Spark은 왜 이렇게 유명해지고 있을까?
Spark은 왜 이렇게  유명해지고 있을까?Spark은 왜 이렇게  유명해지고 있을까?
Spark은 왜 이렇게 유명해지고 있을까?
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
 
Pyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlabPyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlab
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
Meteor IoT
Meteor IoTMeteor IoT
Meteor IoT
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
 
ARTIK 710 IoT class 02
ARTIK 710 IoT class 02ARTIK 710 IoT class 02
ARTIK 710 IoT class 02
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차
 
Mongo db 최범균
Mongo db 최범균Mongo db 최범균
Mongo db 최범균
 
PostGIS - National Education Center for GIS: Open Source GIS
PostGIS - National Education Center for GIS: Open Source GIS PostGIS - National Education Center for GIS: Open Source GIS
PostGIS - National Education Center for GIS: Open Source GIS
 
서버리스 데이터 플로우 개발기 - 김재현 (Superb AI) :: AWS Community Day 2020
서버리스 데이터 플로우 개발기 - 김재현 (Superb AI) :: AWS Community Day 2020서버리스 데이터 플로우 개발기 - 김재현 (Superb AI) :: AWS Community Day 2020
서버리스 데이터 플로우 개발기 - 김재현 (Superb AI) :: AWS Community Day 2020
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기
 
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)
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9
 

introduce of Hadoop map reduce

  • 1. Hadoop MapReduce BigO 스터디 그룹 신대용
  • 2. 맵리듀스 • 함수 언어에서 사용되던 것에서 유래 • Hadoop 에서 제공하는 프로그래밍 모델 • Map – 데이터에서 Key,Value를 선출 • Reduce – Key가 unique해질 때 까지 Value들을 정제
  • 3. 기상 데이터 예제 • NCDC의 1901~2001년 기상 데이터 • 0067011990999991950051507004...9999999N9+00001+99999999999... • 0043011990999991950051512004...9999999N9+00221+99999999999... • 0043011990999991950051518004...9999999N9-00111+99999999999...
  • 4. AWK 처리 #!/usr/bin/env bash for 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
  • 5. 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) (1949, 111) (1950, −11) (1950, 22) (1949, 111) (1949, 78)
  • 6. Map함수 모든 데이터는 Serialize 될 수 있어야 하며 Writeable을 구현한다. Writeable은 DataInput, DataOutput java interface를 이용한다. Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT> emit ( key, value)
  • 7. Reduce 함수 Reduce는 멱등이어야 한다. New API에서 Iterable 로 변경 신규 exception
  • 8. Main Class이름으로 현재 ClassPath에서 jar를 찾아 cluster들에 배포 Local, HDFS, S3 등 Output 만들어져 있어야 함 Job Running
  • 9. API 차이점 • 추상객체에 기본적으로 구현이 되어 있는 것들을 사용 • namespace 이름을 fully 적음org.apache.hadoop.mapreduce 과거 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) { ... } 사용 가능
  • 10. 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들을 수행
  • 11. Data Flow Figure 6-1. How Hadoop runs a MapReduce job using the classic framework
  • 12. Data Flow (cont) Figure 2-3. MapReduce data flow with a single reduce task
  • 13. data locality optimization • Split이 64MB이상이면 복수개의 node에 걸쳐 지게 됨 • Map task는 Map결과를 local에 저장 – HDFS는 비싸며 reducer전송 성공 후 삭제 • Reduce task는 결과를 HDFS에 저장 – Local 1개, off-rack 2개
  • 14. partition • Reducer 개수는 input 크기에 따라 결정되 지 않는다. • Reduce task가 복수개면 map task는 output을 partition 으로 나눈다. – 특정 key의 연관 데이터는 모두 한 Partition에 포함 된다.
  • 15. Data Flow with partitions
  • 16. 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
  • 17. Combiner Functions (cont) • Map node의 output 이 reduce node로 보내질 때 • reducer에서 data를 shuffle하는 단계
  • 18. 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
  • 19. Hadoop Pipes • C++을 위한 MapReduce interface • tasktracker와 socket통신을 한다. JNI (X) • Data가 HDFS에 존재 해야만 한다. • C++과 Java 로직 혼용이 가능 하다. Program내에 reader, writer가 존재함을 뜻함 “hadoop fs -put [A] [B]” 파일 배치 필요