KEMBAR78
introduce of Hadoop map reduce | PPTX
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 내부

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 foryear 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) Figure2-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 withpartitions
  • 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]” 파일 배치 필요
  • 20.