전체적인 그림은 아래 URL에서 추출

(https://www.slideshare.net/EdurekaIN/hadoop-mapreduce-framework)

(https://www.edureka.co/big-data-and-hadoop)

(http://www.admin-magazine.com/HPC/Articles/MapReduce-and-Hadoop)

(http://blog.raremile.com/hadoop-demystified/)


계속해서 하둡 맵리듀스에 관해 소개를 하고자 한다.

누군가에게 소개하는 것보다는, 개인적으로 공부하는 목적이 강하다. (= 두서 없음)


아파치 하둡 소개는 http://kkn1220.tistory.com/120 를 참고

Cloudera를 통한 HDFS 사용법은 http://kkn1220.tistory.com/121 참고


맵리듀스는 하둡에서 가장 중요하다고 해도 과언이 아니다.


맵리듀스는 하둡 클러스터의 데이터를 처리하기 위한 시스템으로, 여러 데이터 노드에 Task를 분배하는 방법이다.

맵, 리듀스로 구성이 되어 있으며 사실 이 사이에는 shuffle과 sort 단계가 들어 있다.


처리 과정

1) 맵리듀스는 Name Node의 Job Tracker 데몬에 의해 제어 된다.

2) 클라이언트는 맵리듀스 Job을 Job Tracker에게 보낸다.
3) 이 Job Tracker는 클러스터의 다른 Slave Node들에게 맵과 리듀스 Task를 할당하게 된다. 

4) Slave Node는 Task Tracker 데몬에 의해 실행이 된다.

5) Task Tracker는 실제로 맵리듀스 Task를 실행하고, 진행 상황을 Job Tracker에게 전달하는 구조로 되어 있다.



그렇다면, 맵 리듀스는 왜 필요한 것일까???


전통적인(?, 사실 분산 프레임 워크가 나온지 오래 됐지만...더 이전) 데이터 처리 방법은 위와 같다. 매우 큰 데이터를 쪼개서 매칭되는 데이터를 뽑아, 결과를 추출하는 형식으로 되어 있었다.

실제로 빅데이터를 처리하기 위해 위의 구조로는 시간이 너무너무 오래 걸린다.


           


 아래는 맵리듀스 프레임워크를 통해 결과를 추출하는 방식인데, 기존에 비해 두 가지 큰 이점을 가지고 있다.

1) Taking Processing to the data

2) Processing data in parallel

 즉, 데이터를 처리하는데 있어 병렬적으로 할 수 있다는 것이다.

 사실 위의 예제에서 Very Big Data가 작아보이긴 하지만, 실제 파일은 TB이상의 어마어마 할 것이다.
워낙 방대한 양이기 때문에 처리 프로세스는 간단해야 한다. 이를 위해, 기준이 되는 값이 필요한데 그 기준이 되는 값이 Key가 하나인 맵 구조이다.

 


내용이 좀 어려웠다. 아래의 사진을 보자.


맵리듀스 프레임워크


- Map Phase: 모든 입력 값에 대해 Map Function 을 적용하는 단계이다. 동시에 실행되는 여러 맵퍼는 각각 입력 데이터의 일부를 처리하는 단계를 포함하게 되는데, 이 여러 맵퍼 간에는 종속성이 없으므로, 서로 독립적으로 작업된다.

여기에서 알아둬야 할 것은, 맵퍼는 Key/Value 쌍의 형태로 데이터를 읽게 된다.

map(key, value) -> List(key, value)

ex) 소문자 바꾸기

input)

map(key, value) -> emit(k.toLower(), v.toLower())

result)

('TEST', 'LOWER') -> ('test', 'lower')

단, 출력 key값이 꼭 입력 데이터 key값과 동일할 필요는 없음(저 toLower()가 아닌, length()로 넣었을 때는 4가 됨)


- Shuffle Phase: 맵 단계로 부터 (key,value) pairs 결과 값에 대한 정렬 단계 

(결과 값들의 키 순서대로 정렬되어 리듀서로 보내게 되는데 이를 sort라 함)


- Reduce Phase: 모든 Pairs를 통일한 키로 조합하여 정렬 된 목록을 생성함.

이 때, key와  value들의 리스트 값이 input값으로 들어옴. Reducer의 Output은 0이거나 Key/Value의 Pairs 값임

이 결과들은 다시 HDFS에 저장됨. (실제로 Reducer는 보통 Input값에 대해 하나의 Key/Value Pairs로 배출되어 사용)

reduce(key, list(values)) -> List(key, value)


예제

이 일련의 과정을 아래의 예제를 통해 설명하고자 한다.

역시, 예제를 통해 보는게 가장 쉽다고 생각~~!

맵리듀스 예제는 Word Count가 가장 많이 사용 된다.


1) Input값 입력: Input값으로 Dear Bear River 1줄, Car Car River 1줄, Deer Car Bear 1줄이 들어 왔다. 물론 이것은 어마어마하게 많은 데이터 일 것이다. 

2) Split: split을 통해 단어를 쪼개는 작업을 수행하였다.

3) Map: 각 key(Deer, Bear, River)와 Value로는 Word Count이기 때문에 1로 지정이 된 것을 확인할 수 있다.

method Map(source, target)

emit(target, 1)

end

4) Shuffling: 각 Key와 Value의 List값이 Sort에 의해 정렬되어 있음을 확인할 수 있다. (B > C > D > R)

5) Reduce: 셔플링을 통해 들어온 Value of List 값을 더하는 작업을 수행하였다. (Word Count)

method Reduce(target, counts[c1,c2...])

sum <- 0

for all c in counts[c1,c2,...] do

sum <- sum + c

end

emit(target, sum)

end

6) Result: Final Result



위의 예제를 통하면 전체적으로 맵리듀스의 흐름을 파악할 수 있을 것이라고 사료된다.

'기타 > 분산 컴퓨팅' 카테고리의 다른 글

Spark RDD 개념 및 예제  (0) 2017.04.07
Apache Spark 설치  (0) 2017.04.07
Apache Spark란 무엇인가?  (0) 2017.04.07
아파치 하둡 HDFS 사용법(Cloudera 사용)  (0) 2017.03.31
아파치 하둡 소개  (0) 2017.03.31

아파치 하둡 소개에 다음 버전으로 간단한 HDFS 사용법에 대해 소개하고자 한다.

소개는 http://kkn1220.tistory.com/120 를 참고


환경 구축: 가상 머신(Virtual box 또는 Vmware, Cloudera)

cloudera는 맵알(MapR), 호트웍스(Hortonworks)와 가장 많이 쓰이는 하둡 배포판이라 사용하게 되었음

또한, 퀵 스타트 버전으로 실행 시 너무 편해서...(귀찮아서 아님)

또한, 별도의 예제는 없고 파일을 올리는 방법 정도로만 소개


가상 머신은 설치가 되었다고 가정


1) Cloudera 설치: https://www.cloudera.com/downloads/quickstart_vms/5-8.html

-> 본 포스팅은 하둡에 대한 소개보다는 스파크로 가기 전 간단한 소개이기 때문에 Cloudera Manager를 설치하는 것이 아닌 Quick start버전 다운


가상 머신에 맞게 다운로드 받으면 된다. (용량이 꽤 크다. 실제로 압축 풀고 그러면 8GB 는 되는듯)


2) Cloudera 실행

-> 가상머신 가져오기 하면 엄청 쉽다.(이미지를 Vmware에서 불러오면 됨. 메모리 설정 등 자동으로 설정 되어 있음)

- 5.8 퀵 스타트 버전은 CentOS 6.7 버전으로 구성 되어 있다.

- 개인적으로 레드햇 계열의 cent os를 좋아하지 않는다. (뭔가 데비안 계열에 비해 딱딱해보임..)

- 키면 아래의 화면으로 처음 시작이 되는데 이클립스도 설치가 되어 있다.



3) Hue

-> Hue는 Hadoop의 Eco system으로 데이터 분석을 제공하는 웹 인터페이스이다.

브라우저 실행 시, 아래의 그림과 같이 Hue탭이 있어 클릭 하면 됨 (Id: cloudera, pw: cloudera)



    


Hue 로그인 후, 우측 상단의 노란색으로 칠한 부분을 누르면 파일 관리를 할 수 있는데, 초기에는 (당연히) 아무 것도 없음윽 확인할 수 있다.

터미널을 열고, $hadoop fs -mkdir test 를 입력하고, 새로고침을 누르면 정상적으로 폴더가 생성되는 것을 확인할 수 있다.


$hadoop fs -mkdir test

- $hadoop    : 시스템과의 상호 작용을 위해 hadoop명령어 사용

- $hadoop 을 입력하면 Usage를 확인할 수 있다.


- fs또한 마찬가지로 확인 가능....

- cat, chmod, chown, cp, mkdir, mv 등 다양하니 한번 확인해도 나쁘지 않겠다.



- 루트 디렉토리를 확인하면 아래와 같이 확인할 수 있다.


- user 디렉토리 내 하위 폴더를 본 결과, 좀 전에 만든 test폴더가 있는 것 또한 확인 가능하다.


- local에 샘플 데이터를 만들고 HDFS에 업로드 하는 화면은 아래와 같다. (local에서 put 명령어를 통해 HDFS에 업로드가 됨)



Hue에서 test디렉토리 밑에 test파일이 정상적으로 업로드 된 것을 확인할 수 있다.

(다운로드는 -get 명령어 사용   $hadoop fs -get <download_file> <다운로드 받고자 하는 local_path> )


즉, 구조를 확인하면 Cloudera라는 가상 머신을 설치하였고, 가상 머신 내 local영역의 파일을, 별도의 HDFS에 올리는 것으로 보면 되겠다.



위의 예제는 단순 작은 사이즈의 파일을 업로드 하였다.

하지만 큰 파일이라고 가정해보자.

File은 Block 단위로 분할이 된다. 이전 포스팅에서 설명했듯이, 초기에는 크기가 64MB였는데, 2.0부터는 128MB를 지원한다.

이 Block들은 여러 머신에 복제되어 Data Node에 저장이 된다. 그리고 Data Node에 저장이 될 때, Name Node는 어디에 저장이 되어 있는지, 어떻게 구성이 되어있는지에 대한 메타 데이터를 가지고 있게 된다.

위의 그림을 보면 3개씩 복제되어 저장 된 것을 확인할 수 있는데 default가 3개이다.


HDFS에 접근하기 위해서는 다양한 방법이 존재한다.

1) Shell 커맨드 사용: (ex: 위의 커맨드 창에서 $hadoop fs)

2) API 사용

3) 에코시스템: (ex: 위의 Hue 이용)

'기타 > 분산 컴퓨팅' 카테고리의 다른 글

Spark RDD 개념 및 예제  (0) 2017.04.07
Apache Spark 설치  (0) 2017.04.07
Apache Spark란 무엇인가?  (0) 2017.04.07
아파치 하둡 맵리듀스  (0) 2017.04.01
아파치 하둡 소개  (0) 2017.03.31


 최근 회사에서 빅데이터, 머신러닝, 딥러닝 등 데이터에 대한 수 많은 프로젝트가 진행됨에 따라

차근차근 알아보고자 한다.

그 중, 빅데이터 처리를 위한 방법 중 하둡에 대한 간단한 소개를 한 후, 스파크로 넘어가고자 한다. 


아파치 하둡이란?

- 빅데이터를 저장, 처리, 분석할 수 있는 소프트웨어 프레임워크

- 대량의 자료를 처리할 수 있는 큰 컴퓨터 클러스터에서 동작하는 분산 응용 프로그램을 지원하는 프리웨어 자바 소프트웨어 프레임워크(위키백과)

- 하둡에서 꼭 알아야 할 것: HDFS(Hadoop Distributed File System), 맵리듀스(실제 맵리듀스가 핵심)로 구성


아파치 하둡 특성

1) Distributed: 수십만대의 컴퓨터에 자료 분산 저장 및 처리

2) Scalability: 용량이 증대되는대로 컴퓨터 추가

3) Fault-tolerant: 하나 이상의 컴퓨터가 고장나는 경우에도 시스템이 정상 동작

Node가 Fail난 경우, 마스터 노드는 Fail을 감지하고 작업을 다른 Node에 할당함으로 해결

4) Open Source: 공개 소프트웨어


아파치 하둡 아키텍쳐


(사진 출처: http://blog.raremile.com/hadoop-demystified/)


- 하둡은 Master Node와 Slave Node로 구분된다. 위의 그림에서는 Master Node와 Slave Node로 표현이 되어있지만 사실 하둡은 Name Node와 Data Node라고 표현하는 것이 더 맞는 표현인 것 같다. (스파크에서는 Master/Slave로 표현)

- HDFS(Hadoop Distribution File System): 분산 데이터를 처리하기 위해 데이터가 저장되는 파일 시스템

수십 테라/페타 바이트 이상의 대용량 파일을 분산된 서버에 저장하고, 그 데이터를 빠르게 처리할 수 있도록 해주는 파일 시스템이라고 보면 된다. HDFS는 블록 구조의 파일 시스템인데 초기에는 크기가 64MB였는데 하둡 2.0부터 128MB로 증가 되었다.


이 HDFS의 구성 컴포넌트는 아래 Name/Data Node로 나뉘게 된다.

1) Name Node(Master Node): 메타 데이터 관리, Data Node 모니터링, 장애노드의 관리, 클라이언트의 권한 확인 

사용자가 파일을 HDFS로 업로드한다고 가정해보자. 이 때, Name Node는 파일을 가지고 있는 것이 아니라 각 Data Node에 분산 저장 되는 파일들의 메타 데이터를 가지고 있다. 쉽게 얘기하자면, 어떤 파일이 어떤 Data Node에 있는지에 대한 정보를 가지고 있다. 또한, Data Node를 모니터링 하는데, 3초마다 Heart Beat를 전송하게 되고, 이에 응답하지 않는 Data Node를 장애 노드로 판단한다.

Name Node의 장애가 발생 시, 전체에 영향을 줄 수 있다. 이에 대비하여 보조 네임 노드가 존재한다.
(Name Node의 백업이 아닌, 메타데이터 파일 시스템 이미지 갱신하는 역할 수행)

2) Data Node(Slave Node): 실제 task를 수행하는 노드.



아파치 하둡 아키텍쳐(1.0과 2.0 비교)
(http://www.oss.kr/oss_news/545626 발췌)


- YARN은 자원 관리와 스케쥴링이라는 두 가지 태스크를 별개의 개념으로 분리하는 기술

- YARN은 중앙 자언 관리자와 어플리케이션 마스터를 보유. 각 어플리케이션을 별개로 구성하기 위해 만들어짐

-> 이는 배치, Interactive, In memory, Streaming, Online, Graph, 기타 유형의 App을 동시에 실행시키도록 돕는 기술



- 하둡 1.0에서는 TaskTracker 수천 개와, 맵리듀스 태스크를 처리해야 하는 JobTracker가 하나 있음

-> 확장성과 관련된 선택권을 줄이며, 클러스터가 하나의 app만 실행


- 하둡 2.0에서는 하나의 Resource manager와 여러 개의 Application Master가 존재하여 별개의 Application Master가 각 Application을 관리하기 때문에 클러스터에서 병목 현상이 발생하지 않음

- 동시에 YARN은 Global Resource manager로 자원 활용도를 높이고, 이를 추가하여 클러스터 속도를 높일 수 있음. YARN에서는 공동 자원 풀을 공유하는 여러 다른 Application을 실행시킬 수도 있음. 맵리듀스 슬롯이 정해져 있지 않기 때문에, 클러스터 내부 자원을 더 효율적으로 활용하는데 도움을 줌

- Apache Giraph, Spark, Apache HAMA, Storm 등 새 아키텍쳐 들에 맞게 조정 되어 있음



아파치 하둡 프레임워크 (Hadoop Ecosystem 2.0)

(사진 출처: http://blrunner.com/99, 밑의 내용 포함)





'기타 > 분산 컴퓨팅' 카테고리의 다른 글

Spark RDD 개념 및 예제  (0) 2017.04.07
Apache Spark 설치  (0) 2017.04.07
Apache Spark란 무엇인가?  (0) 2017.04.07
아파치 하둡 맵리듀스  (0) 2017.04.01
아파치 하둡 HDFS 사용법(Cloudera 사용)  (0) 2017.03.31

+ Recent posts