맵 리듀스와 HDFS는 하둡을 구성하는 각각의 요소들이다. 맵리듀스는 하둡의 계산을 담당하고, HDFS는 하둡의 스토리지를 담당한다.
맵리듀스는 데이터 처리를 위한 프로그래밍 모델이다. 대용량 데이터 처리를 분산 병렬 컴퓨팅에서 처리하기 위한 목적으로 만들어졌다. 맵 리듀스는 하둡의 계산을 담당한다. 해당 업계에서 일을 시작하거나, 빅데이터를 접하기 시작하면 맵리듀스라는 표현보다 MR이라는 단어를 더 많이 듣게 될 것이다.
맵리듀스는 맵과 리듀스 단계로 나누어진다. 음식으로 비유하자면 만들어진 샌드위치들을 분해하는 것이 맵 단계이고, 각 재료를 key 값으로 정렬 및 value를 추출하는 게 리듀스 단계이다. 아래의 그림을 보면 대략 느낌이 올 것이다.
맵 단계는 인풋 데이터를 가공하여 사용자가 원하는 정보를 Key-Value 쌍으로 변환한다. 이때, 맵 리듀스 잡의 입력 크기를 스플릿이라고 한다. 하둡은 각 스플릿마다 하나의 맵 태스크를 생성하게 된다. 만들어진 맵 태스크는 스플릿의 레코드를 Map 함수로 처리한다. 그러면 key-value 구조를 가지는 중간 산출물이 생성된다.
중간 산출물을 key 기준으로 각 리듀스로 분배하고, 사용자가 정의한 방법으로 각 key 관련된 정보를 추출하는 단계이다. 중간산출물을 정렬하고 하나로 합쳐 리듀스 태스크로 생성하고, 사용자 정의 리듀스 함수로 전달된다. 만들어진 결과물은 안정성을 위해 일반적으로 HDFS에 저장된다.
HDFS는 하둡 분산 파일 시스템 (Hadoop Distributed File System)이다. 네트워크로 연결된 여러 머신의 스토리지를 관리하는 하둡의 저장소 역할을 한다.
수백 메가바이트, 기가바이트 또는 테라바이트 크기의 매우 큰 파일들을 여러 머신에 나누어 저장하기 위해 만들어졌다. 한 번 쓰고 여러 번 읽는 것에 중점을 두어 설계되었다.
네임 노드와 데이터 노드로 이루어져 있다. 네임 노드는 HDFS에서 마스터 역할을 하며 서버 한 대로 구성된다. 네임 노드는 파일 시스템 트리와 모든 파일과 디렉터리에 대한 메타데이터를 유지한다.
데이터 노드는 슬레이브 역할을 하며 여러 대로 구성된다. 클라이언트와 네임 노드의 요청으로 인한 블록 저장과 탐색을 담당한다.
1) 빠른 데이터 응답 시간
HDFS는 높은 데이터 처리량을 제공하기 위해 최적화되어 있고, 이를 위해 응답 시간을 희생했다. 빠른 응답 시간을 원한다면 HBase가 하나의 대안이 될 수 있다.
2) 수많은 작은 파일
네임 노드는 파일 시스템의 메타데이터를 메모리에서 관리하기 때문에 저장할 수 있는 파일 수는 네임 노드의 메모리 용량에 좌우된다. 파일 수가 백만 개고 각 파일의 블록이 하나면 적어도 300MB의 메모리가 필요하다. 수십억 개의 파일을 사용하게 되면 하드웨어 용량을 넘어서게 된다.
3) 다중 라이터와 파일의 임의 수정
HDFS는 단일 라이터로 파일을 쓴다. 한 번 쓰고 끝나거나 파일의 끝에 덧붙이는 것은 가능하지만 파일에서 임의 위치에 있는 내용을 수정하는 것은 허용하지 않으며 다중 라이터도 지원하지 않는다. (하둡 3.0부터는 다중 라이터를 지원한다.)
출처: Hadoop - The Definitive Guide 4rd Edition
정리해보면 맵 리듀스와 HDFS는 하둡의 짝꿍이라고 할 수 있다. 하둡의 필수 요소이며, 맵 리듀스는 하둡의 계산 역할을 HDFS는 하둡의 저장소 역할을 담당하고 있다. 위의 자세한 내용이 어렵다면 각각의 역할만 기억하면 된다.
글을 읽는 모든 분들의 라이킷과 댓글을 환영합니다. ;-)
제가 공부하면서 정리한 내용을 바탕으로 작성했기 때문에 내용에 부족함이 있을 수 있습니다.
보완해야 할 점이나 부정확한 내용이 있다면 댓글로 많은 조언 부탁드립니다.
Copyright 2018. April all rights reserved.