Hadoop
Hadoop은 현재 빅데이터를 대포하는 시스템입니다.
사실 Hadoop은 단일 소프트웨어가 아니라 분산 시스템을 구성하는 다수의 소프트웨어로 이루어진 집합체입니다.
분산 시스템(Hadoop)의 구성요소
- HDFS(Hadoop Distributed File System) : 하둡 분산 파일 시스템
- YARN(Yet Another Resource Negotiator) : 리소스 관리자
- MR(Map Reduce) : 분산 데이터 처리(distributed data processing : 맵리듀스)
그 외의 프로젝트들은 Hadoop과 독립적으로 개발되어 Hadoop을 이용한 분산 애플리케이션으로 동작합니다.
모든 분산 시스템이 Hadoop에 의존하는 것이 아니라 Hadoop을 일부 사용하거나 전혀 이용하지 않기도 합니다.
분산파일시스템으로 'HDFS', 리소스 관리자를 'Mesos', 분산 데이터 처리는 'Spark'를 이용하여 분산시스템을 이용하기도 합니다.
이처럼 다양한 소프트웨어를 사용하여 자신에게 맞는 것을 선택하고 조합하여 시스템을 구성할 수 있습니다.
분산 파일 시스템(HDFS)와 리소스 관리자(YARN)
Hadoop에서 처리되는 다양한 데이터는 대부분 HDFS에 저장됩니다. 그리고 CPU나 메모리등의 계산 리소스는 YARN에 의하여 관리됩니다.
HDFS는 네트워크에 연결된 파일 서버와 같은 존재지만 분산 시스켐에서 스토리지를 관리하며 다수의 컴퓨터에 파일을 복사하여 저장한다는 특징을 가지고 있습니다.
YARN은 컨테이너(container)라고 불리는 단위로 애플리케이션이 관리는 CPU나 메모리와 같은 컴퓨터 리소스를 관리하며 Hadoop에서 분산 애플리케이션을 실행하면 YARN이 클러스터의 전체의 부하를 보고 비어 있는 호스트부터 컨테이너를 할당합니다.
분산 시스템은 많은 계산 리소스를 소비하지만 리소스 관리자(YARN)에 의하여 어느 애플리케이션에 얼마만큼의 리소스를 할당할 지 관리하면서 모든 애플리케이션이 차질없이 실행되도록 제어합니다.
애플리케이션의 우선순위를 결정하며 한정된 리소스를 낭비없이 활용하여 데이터 처리를 진행할 수 있습니다.
분산 데이터 처리(MapReduce) 및 쿼리 엔진(Hive)
MapReduce는 YARN 위에서 동작하는 분산 애플리케이션 중에 하나이고 분산 시스템에서 데이터 처리를 실행하는 데 사용됩니다.
MapReduce는 비구조화 데이터를 가공하는데 적합하며 대량의 데이터를 배치 처리하기 위한 시스템입니다. 한 번 실행하면 분산 파일 시스템(HDFS)에서 대량의 데이터를 읽을 수 있지만, 작은 프로그램을 실행하게되면 오버헤드가 너무 크기 때문에 몇 초 안에 끝나는 짧은 작업에는 적합하지 않습니다.
이러한 MapReduce의 성질을 가지고 있는 것이 Hive입니다.
Hive는 SQL등의 쿼리언어로 데이터를 집계할 수 있는 특징이 있습니다. MapReduce의 단점 또한 Hive가 가지고 있기 때문에 배치 처리에는 적합하나 애드 혹 쿼리와 같은 짧은 쿼리에는 적합하지 않습니다.
MapReduce에서는 데이터 처리의 스테이지에 바뀔 때 대기시간이 존재하기 떄문에 복합한 쿼리에서는 대기시간만 증가합니다.
짧은 쿼리에서는 이런 대기시간이 실제 쿼리시간보다 더 오래걸릴 수 있기 때문에 주의해서 사용해야 합니다.
Hive on Tez
Hive의 성능 개선을 위하여 개발된 것인 Apache Tez(아파치 테즈)입니다.
Tez는 기존의 MR(Map Reduce)를 대체할 목적으로 개발된 프로젝트고 MapReduce의 단점을 해소하였습니다.
MapReduce의 경우에는 작업을 처리할 때 Map에서 데이터를 읽어 작업을 수행하고 Reduce에서 처리 결과를 저장하고 중간과정을 HDFS(디스크)로 작업결과를 쓰고 다시 Map, Reduce 과정을 거쳐 최종 출력데이터를 만들게 됩니다.
하지만 Tez의 경우에는 HDFS(디스크)로 작업결과를 다시 쓰는 중간과정없이 바로 Reduce 단계로 데이터를 전달하기 때문에 불필요한 단계가 감소하였고 디스크 I/O 오버헤드를 줄이면서 스테이지 사이의 대기시간이 없어 실행시간이 단축되었습니다.
Hive3에서는 기존의 MapReduce 기반의 쿼리 엔진은 공식적으로 권장하지 않고 있으며, Apache Tez를 기본 엔진으로 권장하고 있습니다.
대화형 쿼리 엔진(Impala와 Presto)
대량의 비구조화된 데이터를 가공하는 무거운 배치처리에는 MapReduce와 Tez를 기반으로한 Hive가 적합하지만 이렇게 만들어진 구조화된 데이터를 다루기 위해서는 Impala와 Presto가 적합합니다.
Impala와 Presoto는 MPP 데이터베이스처럼 멀티 코어를 활용하면서 가능한 많은 데이터를 병렬처리합니다. 또한 Hive는 디스크 기반에 수행을 한다면 Impala와 Presto는 상대적으로 메모리 기반의 작업을 수행하기 때문에 비교적 작은 데이터에는 Impala와 Presto에서 더 빠른 성능을 보이게 됩니다.
기능적으로 처리할 영역을 나누어서 소프트웨어를 활용한다면 더 좋은 파이프라인을 구축할 수 있을 것 입니다.
'데이터 엔지니어링' 카테고리의 다른 글
[빅데이터를 지탱하는 기술] 대규모 분산 처리의 프레임워크 # 4 (0) | 2023.05.23 |
---|---|
[빅데이터를 지탱하는 기술] 대규모 분산 처리의 프레임워크 # 3 (1) | 2023.05.22 |
[빅데이터를 지탱하는 기술] 대규모 분산 처리의 프레임워크 # 1 (0) | 2023.05.18 |
[빅데이터를 지탱하는 기술] 빅데이터의 탐색 # 3 (0) | 2023.05.17 |
[빅데이터를 지탱하는 기술] 빅데이터의 탐색 # 2 (0) | 2023.05.17 |