Presentation is loading. Please wait.

Presentation is loading. Please wait.

How Hadoop Works 박 영 택 컴퓨터학부.

Similar presentations


Presentation on theme: "How Hadoop Works 박 영 택 컴퓨터학부."— Presentation transcript:

1 How Hadoop Works 박 영 택 컴퓨터학부

2 HDFS Basic Concepts HDFS는 Java로 작성된 파일 시스템 기존 파일 시스템의 상위에서 동작
Google의 GFS 기반 기존 파일 시스템의 상위에서 동작 ext3, ext4 or xfs

3 HDFS의 file 저장 방식 File은 block 단위로 분할 데이터가 로드 될 때 여러 machine에 분산되어 저장됨
각 block은 기본적으로 64MB 또는 128MB 크기 데이터가 로드 될 때 여러 machine에 분산되어 저장됨 같은 file의 다른 block들은 서로 다른 machine에 저장됨 이를 통해 효율적인 MapReduce 처리가 가능 Block들은 여러 machine에 복제되어 Data node에 저장됨 기본 replication은 3개 각 block은 서로 다른 3개의 machine에 저장되어 있다는 것을 의미 Name node로 불리는 master node는 어떤 block들이 file을 구성하고 있고, 어느 위치에 저장되어 있는지에 대한 정보를 meta data로 관리

4 HDFS의 file 저장 방식 (1) 데이터 file들은 block으로 분할되고, 데이터 노드에 분산되어 저장

5 HDFS의 file 저장 방식 (2) 데이터 file들은 block으로 분할되고, 데이터 노드에 분산되어 저장

6 HDFS의 file 저장 방식 (3) 데이터 file들은 block으로 분할되고, 데이터 노드에 분산되어 저장
각 block은 여러 node에 복제 되어 저장(default 3x)

7 HDFS의 file 저장 방식 (4) 데이터 file들은 block으로 분할되고, 데이터 노드에 분산되어 저장
각 block은 여러 node에 복제 되어 저장(default 3x) Name node는 metadata를 저장

8 HDFS File이 64MB 또는 128MB의 block으로 분할 될 때, file이 block의 크기보다 작은 경 우에는 block 크기 전체를 사용하지 않음 Block들은 Hadoop configuration에 설정된 디렉토리를 통해 저장됨 NameNode의 metadata를 사용하지 않으면, HDFS에 접근할 수 있는 방법이 존재 하지 않음 클라이언트 애플리케이션이 file에 접근하는 경우 : NameNode와 통신하여 file을 구성하고 있는 block들의 정보와 DataNode의 block의 위치 정보를 제공받음 이후 데이터를 읽기 위해 DataNode와 직접 통신 NameNode는 bottleneck이 되지 않음

9 HDFS 접근 방법 Shell 커맨드 라인을 사용: haddop fs Java API Ecosystem 프로젝트 Flume
network sourc로 부터 데이터 수집 Sqoop HDFS와 RDBMS 사이의 데이터 전송 Hue Web 기반의 interactive UI로 browse, upload, download, file view 등이 가능

10 Example: Storing and Retrieving Files (1)

11 Example: Storing and Retrieving Files (2)

12 Example: Storing and Retrieving Files (3)

13 Example: Storing and Retrieving Files (4)

14 HDFS NameNode Availability
NameNode daemon은 반드시 항상 실행되고 있어야 함 NameNode가 중단되면, 클러스터는 접근이 불가능 High Availability mode (in CDH4 and later) 2개의 NameNode : Active와 Standby Classic mode 1개의 NameNode 또 다른 “helper” node는 SecondaryNameNode backup이 목적이 아니며, 장애 발생 시 NameNode를 대신하는 것이 불가능 NameNode를 복구 할 수 있는 정보를 제공

15 ...... Hadoop Server roles Clients Secondary Job Tracker Name Node
Data Analytics Jobs Map Reduce Data Storage Jobs HDFS Data Node & Task Tracker ...... Masters Slaves

16 Hadoop 의 구성요소 Client Master node Slave node 두가지 관점
Name Node 를 통해 정보를 받고 이후 직접적으로 Data Node 와 통신을 한다. Master node 물리적으로 Master Node 역할(Job Tracker, Name Node)을 하는 노드로서 , slave node 에 대한 정보와 실행을 할 Tasks 에 대한 관리를 담당 Slave node 물리적으로 Slave Node 역할(Data Node, Task Node)을 하는 노드로서, 실제로 데이터를 분산되어 가지고 있으며 Client 에서 요청이 오면 데이터를 전달하는 역할 및 담당 Task 를 수행하는 역할 두가지 관점 Data Analytics 관점 Job Tracker : 노드에 Task 를 할당하는 역할과 모든 Task 를 모니터링 하고 실패할 경우 Task 를 재실행 하는 역할 Task Tracker : Task 는 Map Task 와 Reduce Task 로 나눠질 수 있으며, Task 가 위치한 HDFS 의 데이터를 사용하여 MapReduce 수행. Data Storage 관점 Name Node : HDFS의 파일 및 디렉토리에 대한 메타 데이터(metadata)를 유지, 클라이언트로 부터 데이터 위치 요청이 오면 전달, 장비 손상 시 Secondary Node 로 대체 Data Node : 데이터를 HDFS 의 Block 단위로 구성, Fault Recovery 를 위해 default 로 3 copy 를 유지, Heartbeat 을 통하여 지속적으로 파일 위치 전달

17 맵리듀스(MapReduce)란? 맵리듀스는 여러 노드에 태스크를 분배하는 방법 각 노드 프로세스 데이터는 해당 노드에 저장
가능한 경우 두 단계로 구성 맵(Map) 리듀스(Reduce)

18 Hadoop Components : MapReduce
MapReduce는 Hadoop 클러스터의 데이터를 처리하기 위한 시스템 2개의 phase로 구성 : Map, Reduce Map과 Reduce 사이에는 shuffle과 sort라는 스테이지가 있음 각 Map task는 전체 데이터 셋에 대해서 별개의 부분에 대한 작업을 수 행 기본적으로 하나의 HDFS block을 대상으로 수행 모든 Map task가 종료되면, MapReduce 시스템은 intermediate 데이터를 Reduce phase를 수행 할 노드로 분산하여 전송

19 맵리듀스 : 구성도

20 맵리듀스: JobTracker 맵리듀스 Job들은 JobTracker라는 소프트웨어 데몬에 의해 제어됨.
JobTracker는 ‘Master Node’에 있음. 클라이언트는 맵리듀스 Job을 JobTracker에게 보낸다. JobTracker는 클러스터의 다른 노드들에게 맵과 리듀스 Task를 할당한다. 이 노드들은 TaskTracker라는 소프트웨어 데몬에 의해 각각 실행된다. TaskTracker는 실제로 맵 또는 리듀스 Task를 인스턴스화하고, 진행 상황을 JobTracker에게 보 고할 책임이 있다.

21 맵리듀스: 용어 Job은 ‘Full program’ Task는 데이터 조각을 통해 하나의 맵퍼 또는 리듀서를 실행
데이터 집합을 통해 맵퍼(Mapper)와 리듀서(Reducer)를 전체 실행 Task는 데이터 조각을 통해 하나의 맵퍼 또는 리듀서를 실행 Task attempt는 Task를 실행하기 위한 특정 인스턴스 적어도 Task가 있기 때문에 많은 Task attempt가 있을 것이다. 만약 Task attempt가 실패하면, JobTracker에 의해서 다른 Task Attempt가 시작 될 것이다. Speculative execution(나중에 참조)는 또한 완료된 Task들 보다 더 많은 Task를 시도 할 수 있다.

22 맵리듀스: 맵퍼(Mapper) 하둡은 네트워크 트래픽을 방지하기 위해, 메타 데이터의 일부분을 가 지고 노드에서 처리한다.
동시에 실행되는 여러 맵퍼는 각각 입력 데이터의 일부를 처리하는 단계를 포함한다. 맵퍼는 Key/Value 쌍의 형태로 데이터를 읽는다. 맵퍼의 0개 또는 그 이상의 Key/Value 상을 출력한다 (pseudo-code): map(in_key, in_value) -> (inter_key, inter_value) list

23 맵리듀스: 맵퍼(Mapper) (cont’d)
맵퍼는 입력값의 Key를 사용하기도 하지만, 완전히 무시하기도 한다. 예를 들어, 표준 패턴은 한번에 파일의 라인을 읽는다. Key는 라인이 시작되는 파일에 Byte Offset이다. Value는 라인 자체의 내용이다. 일반적으로 Key는 관련이 없는 것으로 간주한다. 만약 맵퍼가 무언가를 출력하는 경우, 출력형태는 Key/Value 쌍 이어야 한다.

24 맵퍼 예제: Upper Case Mapper
대문자로 바꾸기(pseudo-code): Let map(k, v) = emit(k.toUpper(), v.toUpper()) (‘foo’, ‘bar’) -> (‘FOO’, ‘BAR’) (‘foo’, ‘other’) -> (‘FOO’, ‘OTHER’) (‘baz’, ‘more data’) -> (’BAZ’, ‘MORE DATA’)

25 맵퍼 예제: Explode Mapper 입력된 단어를 철자로 분리하여 출력(pseudo-code):
Let map(k, v) = foreach char c in v: emit (k, c) (‘foo’, ‘bar’) -> (‘foo’, ‘b’), (‘foo’, ‘a’), (‘foo’, ‘r’) (‘baz’, ’other’) -> (‘baz’, ‘o’), (‘baz’, ‘t’), (‘baz’, ‘h’), (‘baz’, ‘e’), (‘baz’, ‘r’)

26 맵퍼 예제: Filter Mapper 입력값의 Value가 소수인 경우에만 Key/Value 쌍 출력(pseudo-code):
Let map(k, v) = if (isPrime(v)) then emit(k, v) (‘foo’, 7) -> (‘foo’, 7) (‘baz’, 10) -> nothing

27 맵퍼 예제: Changing Keyspaces
맵퍼의 출력 key값이 입력데이터의 key값과 동일할 필요는 없다. 단어의 길이를 키로 출력(Pseudo-code): Let map(k, v) = emit(v.length(), v) (‘foo’, ‘bar’) -> (3, ‘bar’) (‘baz’, ‘other’) -> (5, ‘other’) (‘foo’, ’abracadabra’) -> (11, ‘abracadabra’)

28 맵리듀스 : 리듀서(The Reducer)
맵 단계가 끝나면, 중간 단계의 키 값을 기반으로 중간 값(intermediate values) 를 리스트 형태로 조합 리스트를 리듀서로 전달 하나의 리듀서나 여러개의 리듀서가 존재할 것이다. 잡(job)설정에서 이 부분은 정의되어 있다.(추후 설명) 중간 키와 연관되어 있는 모든 값은 같은 리듀서로 보내진다. 중간 키와 그 값들의 리스트들은 키 순서대로 정렬되어 리듀서로 보내진다. 이 단계는 ‘셔플(shuffle) 과 정렬(sort)’ 라고 알려져 있다. 리듀서의 output은 O 이거나 key/value 의 쌍이다. 이 결과들은 HDFS 에 저장된다. 실제로 리듀서는 보통 input키에 대해서 하나의 key/value 쌍으로 배출되어 쓰여진다.

29 리듀서 예제 : Sum Reducer 각 중간 키 값과 관련있는 모든 값들을 합 (pseudo-code)
let reduce(k, vals) = sum = 0 foreach int i in vals: sum += i emit(k, sum) (’bar', [9, 3, -17, 44]) -> (’bar’. 39) (’foo', [123, 100, 77]) -> (’foo', 300)

30 리듀서 예제 : Identity Reducer
Identity 리듀서 는 매우 흔하다.(pseudo-code) let reduce(k, vals) = foreach v in vals: emit(k, v) ('bar', [123, 100, 77]) -> ('bar', 123), ('bar', 100), ('bar', 77) ('foo', [9, 3, -17, 44]) -> ('foo', 9), ('foo', 3), ('foo', -17), ('foo', 44)

31 맵리듀스 예제: Word Count 큰 Input 데이터에서 나타나는 각 단어의 개수를 세는 것
Word Count 는 맵리듀스 프로그래밍에서 ‘Hello world’ 와 같다. map(String input_key, String input_value) foreach word w in input_value: emit(w, 1) reduce(String output_key, Iterator<int> intermediate_vals) set count = 0 foreach v in intermediate_vals: count += v emit(output_key, count)

32 맵리듀스 예제: Word Count (cont’d)
맵퍼의 Input (3414, 'the cat sat on the mat') (3437, 'the aardvark sat on the sofa') 맵퍼로 부터의 Output ('the', 1), ('cat', 1), ('sat', 1), ('on', 1), ('the', 1), ('mat', 1), ('the', 1), ('aardvark', 1), ('sat', 1), ('on', 1), ('the', 1), ('sofa', 1)

33 맵리듀스 예제: Word Count (cont’d)
리듀서로 보내기 위한 중간 데이터 ('aardvark', [1]) ('cat', [1]) ('mat', [1]) ('on', [1, 1]) ('sat', [1, 1]) ('sofa', [1]) ('the', [1, 1, 1, 1]) 마지막 리듀서의 Output ('aardvark', 1) ('cat', 1) ('mat', 1) ('on', 2) ('sat', 2) ('sofa', 1) ('the', 4)

34 맵리듀스 : 데이터 지역성(Data Locality)
가능하면 언제든지 하둡은 노드의 맵 태스크(Map task)가 자신의 HDFS 노드에 있는 데이터 블럭에서 동작하는지를 확인하려고 할 것이다. 만약 불가능하다면 맵 태스크는 데이터를 가공하여 네트워크를 통하여 다른 노드로 데이터를 전달해야만 할 것이다. 맵 태스크가 끝나자 마자 데이터는 네트워크를 통하여 리듀서들로 전 달된다. 비록 리듀서들이 맵태스크와 물리적으로 같은 머신에서 동작하더라도 리듀서들은 데이터 지역 성을 알 수 있는 개념은 없다.(즉, 맵태스크가 자신의 머신에 존재하는 리듀서로 보낸다는 보장 은 못함) 일반적으로, 모든 맵퍼(Mappers)들은 모든 리듀서들과 통신을 해야한다.

35 맵리듀스 : 셔플과 정렬은 병목현상(Bottleneck)?
셔플과 정렬단계는 병목현상을 보인다. reduce 함수는 맵퍼가 끝날 때 까지 리듀서가 시작할 수 없다. 실제로, 하둡은 맵퍼들 중에 일을 끝내는 매퍼들은 맵퍼에서 리듀서로 데이터를 옮기기 시작할 것이다. 이것은 마지막 맵퍼가 끝나자 마자 대용량의 데이터를 한번에 이동시키는 병목현상을 완화한다. 위와 같은 행위는 설정 가능하다. 개발자는 맵퍼의 완료 퍼센트를 조정하여 그 퍼센트 만큼 도달하면 리듀서로 데이터를 보내기 시작한다. 개발자의 reduce 함수는 모든 중간 데이터들의 이동과 정렬이 끝날때까지 시작하지 않는다.

36 맵리듀스 : 느린 맵퍼는 병목현상인가? 하나의 맵 태스크가 다른 맵 테스크들보다 느릴 수 있다.
아마도 하드웨어의 결함 때문이거나 머신이 느리기 때문에. 위와 같은 상황이 나타난다면 병목현상이 될 수 있다. 리듀서에서 reduce 함수는 맵퍼가 끝날 때 까지 시작할 수 없다. 하둡은 speculative execution 사용하여 병목현상을 완화한다. 만약 맵퍼가 다른 맵퍼보다 심각하게 느리면 새로운 맵퍼 인스턴스를 생성하여 같은 데이터를 가지 고 다른 머신에서 실행할 것이다. 느려진 작업을 끝내기 위해 첫번 째 맵퍼의 결과들을 사용할 수 있다. 하둡은 계속 실행중인(끝나지 않는) 매퍼들을 kill 할 수 있다.

37 맵리듀스 잡의 생성 과 실행 맵퍼와 리듀서 클래스를 작성잡
잡과 이를 클러스터에 등록하기 위한 설정을 하는 Driver 클래스 작성 맵퍼, 리듀서, Driver 클래스 컴파일 예제 javac -classpath `hadoop classpath` *.java 맵퍼, 리듀서, Driver 클래스 파일의 jar 파일 생성 예제 : jar cvf foo.jar *.class hadoop jar 명령어 실행을 통해 하둡 클러스터에 잡을 생성 예제 : hadoop jar foo.jar Foo in_dir out_dir


Download ppt "How Hadoop Works 박 영 택 컴퓨터학부."

Similar presentations


Ads by Google