introduce of Hadoop map reduce

2,933 views
2,637 views

Published on

this document is

1 Comment
4 Likes
Statistics
Notes
No Downloads
Views
Total views
2,933
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
55
Comments
1
Likes
4
Embeds 0
No embeds

No notes for slide

introduce of Hadoop map reduce

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

×