Apache Hadoop

Apache Hadoop 개요

Hadoop(하둡)은 대규모 데이터의 축적, 분석을 분산하여 처리하는 프레임워크이며, Java 언어로 구현되어 있다. Hadoop의 근원이 된 것은 Google의 대량의 데이터를 효율적으로 처리하기 위한 분산 처리 기반인 MapReduce와 Google File System 이다.

Google은 이 시스템에 관한 논문을 2004년에 공개하였고, 그것을 참고로 Doug Cutting, Mike Cafarella 라는 사람에 의해 개발되었다. Hadoop이라는 이름은 Doug의 아들이 노란 코끼리의 봉제인형에 붙인 이름에서 왔으며 의미가 없고 간단하고 다른 곳에서 사용되지 않는다는 이유로 채택되었다. 노란 코끼리는 Hadoop의 마스코트 캐릭터이기도 하다.

Hadoop 캐릭터

Hadoop은 분산 처리 기반이기 때문에 각 처리를 클러스터의 머신으로 나누어(Map), 각 머신에서 처리된 결과를 집계(reduce)하여 최종적인 결과를 얻는다.
최근, 대량의 데이터(BigData) 중에서 목적의 데이터를 추출하거나, 저장된 데이터로부터 어떤 경향을 읽는 등, 데이터 마이닝에 대한 요구가 높아지고 있다. 또, BigData를 처리할 수 있을 뿐만 아니라, 보다 단시간에 그러한 정보를 산출하고 싶다고 하는 요구가 많아지고 있다.
이전에는 BigData를 처리하기 위해 데이터 웨어하우스와 같은 전용 제품을 사용해야 했다. Hadoop은 이러한 데이터 처리를 일반적인 서버 머신을 여러 개를 연결(스케일 아웃)하는 것으로 가능하게 한다.

여러 서버로 구성된 Hadoop 시스템이지만 여러 대에 분산되어 시스템의 유연성을 높인다. 처리 성능을 향상시키려면 Hadoop 클러스터에 시스템을 추가하기만 하면 된다. Hadoop 클러스터 시스템은 일반적인 서버 머신으로 구성될 수 있으므로 하드웨어 조달이 용이하다. 또한 소프트웨어적으로도 클러스터에 추가하는 서버에 Hadoop 시스템을 설치 및 설정하는 것만으로 Hadoop 클러스터를 스케일 업할 수 있다. 이러한 특징에서 하드웨어, 소프트웨어 양면에서 확장성이 높다고 할 수 있다.

최근 클라우드 서비스를 사용하여 여러 대의 서버를 쉽게 시작할 수 있게 되었기 때문에 Hadoop을 사용하여 데이터 처리를 원하는 경우에만 클라우드에 Hadoop 클러스터를 구축할 수 있다. 게다가 성능이 불충분하면 서버를 추가하거나 리소스가 남아 있으면 서버를 줄이고 한 가지 처리가 끝난 시점에서 Hadoop 클러스터의 모든 머신을 개방하는 등의 사용법도 가능하기 때문에 앞으로 점점 더 이용되는 장면이 늘어나는 것으로 생각된다.

Hadoop 버전 1까지는 MapReduce만 이었던 병렬 처리 프레임워크이지만, Hadoop 버전 2로부터는 Storm, Spark, Tez/Impala등의 다른 병렬 처리 프레임워크를 이용할 수 있게 되었다. 또한 Hadoop에 있는 데이터에 대한 MapReduce(Java) 이외의 처리 인터페이스가 늘어났다. 예를 들어 Impala와 Tez에서 움직이는 Hive나 Pig를 통해 사용자는 익숙한 SQL과 거의 동등한 쿼리를 사용하여 데이터에 액세스할 수 있다. 게다가 Storm이나 Spark에서는 스트리밍에 의해 실시간 데이터의 처리가 가능하게 되어, HDFS상에 존재하는 데이터 이외에서도 Hadoop 시스템을 이용할 수 있게 되어 있다.

Hadoop의 특징

Hadoop은 다음의 4개의 Core 모듈로 이루어져 있다.

  • Hadoop Distributed File System (HDFS)  
  • Hadoop MapReduce
  • Hadoop Common
  • Hadoop YARN

또한 다음 두 Hadoop 프로젝트와는 별도의 모듈이 있다.

  • Apache Ozone
  • Apache Submarine

HDFS(Hadoop Distributed File System)

Hadoop 고유의 분산 파일 시스템이다. 사용자는 하나의 큰 파일 시스템으로 보이지만 각 노드에 걸쳐 파일을 저장한다. 1개의 노드에 장해가 일어나도 데이터의 결함이 없도록 디폴트로 3개의 노드에 같은 데이터를 보관 유지(3중화)하고 있다.

MapReduce

분산된 데이터에 대해 병렬로 처리를 수행하기 위한 프레임워크이다. Map 스텝에서는 각 슬레이브 노드의 데이터에 대해서 처리를 실시하고, Reduce 스텝에서 Map 스텝으로 복수 노드에 분산·실행된 처리 결과의 집약을 실시한다.

Hadoop Common

Hadoop의 기능을 지원하는 유틸리티 집합이다.

YARN (Yet Another Resource Negotiator)

Hadoop 버전 1까지는 독립된 컴포넌트는 아니었지만, Hadoop 버전 2에서는 자원 관리를 전용으로 하는 모듈로서 독립하였다. MapReduce 리소스, 작업 스케줄링 뿐만 아니라 Giraph, Storm, Spark, Tez/Impala 등의 다른 분산 처리 프레임워크의 리소스 관리도 가능하게 되었다.

Apache Ozone

Hadoop에서 분산 객체 저장소를 실현하기 위한 프로젝트이다. 수천억 수준의 파일과 블록으로 확장할 수 있도록 설계되었으며 YARN 및 Kubernetes와 같은 컨테이너 환경에서의 동작도 지원한다. S3 및 Hadoop File System API 등 여러 프로토콜을 사용하여 액세스할 수 있다. 원래는 Hadoop의 하위 프로젝트였지만 Apache 톱 프로젝트 중 하나로 독립적이었다.

Apache Submarine

YARN과 같은 리소스 관리 플랫폼에서 딥 러닝 애플리케이션(TensorFlow, PyTorch, MxNet 등)을 실행할 수 있도록 하는 프로젝트이다. 원래는 Hadoop의 하위 프로젝트였지만 Apache 톱 프로젝트 중 하나로 독립적이었다. Hadoop 2.7.3 이상에서 사용할 수 있다.

Hadoop 사용 사례

Hadoop은 MapReduce 대신에 더 빨르게 처리할 수 있는 Apache Spark를 사용할 수 있다. 자세한 것은 여기(https://openstandia.jp/solution/hadoop-spark/)을 참조하길 바란다.

Hadoop 운영 환경

Hadoop은 Java 언어로 만들어져 있으므로 JVM이 필요하다. 2022년 4월 현재 스테이블 버전인 Hadoop 3.3.2에서는 Java 8 및 Java 11을 지원한다. JVM이 실행되는 환경이면 OS는 뭐든 상관 없다.

Hadoop이 실행되는 운영체제

  • 주요 Linux 배포판
  • Windows
  • MacOSX

Hadoop은 OpenJDK에서 정상적으로 작동하는 것으로 확인되었다. 각 JDK의 동작 검증 결과는 아래의 Hadoop Wiki 페이지에서 확인할 수 있다.
https://cwiki.apache.org/confluence/display/HADOOP/Hadoop+Java+Versions

Hadoop은 컴파일된 바이너리 패키지와 사용자가 직접 컴파일하는 소스 버전을 모두 제공한다.
컴파일된 바이너리 패키지는 곧바로 사용할 수 있게 되어 있는 반면, 확장할 수 없는 설정도 있기 때문에, 유저가 필요한 기능을 유효하게 하려면 소스로부터 빌드할 필요가 있는 경우도 있다.

Hadoop 라이센스

Hadoop은 Apache의 최상위 프로젝트 중 하나이다.
라이센스는 Apache License 2.0이며, 사용자는 소프트웨어의 사용, 배포, 수정, 파생판 배포에 제한을 받지 않는다.

Hadoop 공식 사이트

Hadoop의 공식 사이트는 아래 URL이다. http://hadoop.apache.org/

또한 Hadoop 공식 Wiki 페이지에는 Hadoop에 대한 다양한 정보가 있다. https://cwiki.apache.org/confluence/display/HADOOP/Home

Hadoop 다운로드

https://hadoop.apache.org/releases.html

Hadoop을 구성하는 세 개의 레이어

Hadoop 아키텍처는 주로 다음 세 가지 레이어로 구성된다.

  • 분산 처리 엔진 (Hadoop에서는 Hadoop MapReduce 사용)
  • 리소스 관리자 (Hadoop에서는 Hadoop YARN 사용)
  • 분산 파일 시스템 (Hadoop에서는 HDFS 사용)

그리고, Hadoop은 데이터에 액세스하기 위해 쿼리 엔진을 사용하는 경우가 많다.

Hadoop은 모든 컴퓨터에 위의 구성을 설치하고 데이터 읽기/쓰기 및 처리를 분산한다.

분산 처리 엔진

분산 처리 엔진은 Hadoop에서 병렬 분산 처리를 담당하는 소프트웨어 그룹이다.

기본적으로 MapReduce라는 분산 처리 엔진이 실행된다.

대표적인 분산 처리 엔진의 특징은 다음과 같다. 아래로 갈수록 빠르다.

  • MapReduce: 중간 결과를 HDFS(스토리지)로 내보내기
  • Tez: 중간 결과를 YARN 컨테이너(스토리지)로 내보내기
  • Spark: 중간 결과를 메모리에 내보내기

덧붙여서 MapReduce는 끝나지 않는 컨텐츠인 것으로 보여, Tez나 Spark 를 사용하는 것을 추천한다.

리소스 관리자

리소스 관리자는 Hadoop에서 리소스(CPU, 메모리) 관리를 담당한다.

MapReduce에서 사용하는 리소스 관리자는 응용 프로그램 수준 컨테이너를 관리하는 Hadoop YARN이다.

그 외에도 OS 레벨 컨테이너를 관리하는 Apache Mesos도 있다. 이곳은 docker와 같은 기술(Linux 컨테이너)을 이용한다.

분산 파일 시스템

분산 파일 시스템 은 Hadoop에서 데이터 읽기/쓰기 분산을 담당한다. Hadoop에서 사용되는 분산 파일 시스템 에는 다음이 포함된다.

  • HDFS: Hadoop 표준 파일 시스템
  • EMRFS: Amazon S3를 스토리지로 사용하는 파일 시스템
  • MapR-FS : C 언어로 HDFS를 다시 작성한 파일 시스템. 빠르다.

그 외에도 Cloud Storage 또는 Blob Storage를 스토리지 로 사용할 수 있는 것처럼 보이지만, 내부적으로 어떤 분산 파일 시스템을 사용할지는 알 수 없다.

Hadoop 에코시스템 목록

기본값이 아닌 Hadoop을 구성하는 소프트웨어 또는 주변 소프트웨어를 Hadoop 에코 시스템이라고 한다.

Hadoop 에코시스템은 다음과 같이 조합하여 다양한 분산 처리를 수행할 수 있다.

  • 데이터 웨어하우스 구성 예: Hadoop + Tez + Hive
    • Hive 를 사용하여 Hadoop을 SQL 로 조작할 수 있다.
  • 기계 학습 구성 예: Hadoop + Spark
    • 기계 학습에서 자주 발생하는 반복 처리를 Spark 의 인 메모리 처리를 이용하여 효율적이다.
  • 전체 텍스트 검색 구성 예: Hadoop + Elasticsearch
    • Elasticsearch for Apache Hadoop을 사용하여 전체 텍스트 검색 서비스를 구현할 수 있다.
    • Hadoop의 분산 파일 시스템 으로 Elasticsearch 클러스터를 활용한다.
  • 스트림 처리 구성 예: 각 서버 및 IoT 장치 –> Kafka –> Hadoop
    • 여러 서버 및 IoT 장치에서 스트림 처리를 수행하고 Hadoop에 데이터를 집계하려면 Kafka 를 사용한다.

아래에 대표적인 Hadoop 에코시스템과 관련 시스템과 그 기능을 소개한다.

Hadoop 에코시스템 실현하는 기능
Apache Accumulo KVS 형의 NoSQL. 보안 중시
Apache Atlas 거버넌스 제어, 컴플라이언스 대응
Cascading MapReduce를 쉽게 다루는 API
아파치 드릴 에지 장비 데이터를 조작하는 분산 SQL 엔진
Apache falcon 데이터 라이프사이클 관리
Apache Flume 여러 데이터 소스에서 Hadoop으로 구조화되지 않은 데이터 를 집계(스트림 데이터 처리)
Apache HBase KVS형 NoSQL
아파치 하이브 SQL 라이크(HiveQL)인 쿼리로 데이터를 조작할 수 있다. 대장애성 중시하는 경우. DWH 실현
Apache Hue Hadoop 및 Hadoop 생태계 GUI로 작업
Apache Impala SQL 라이크(Impala SQL )인 쿼리로 데이터를 조작할 수 있다. 속도를 중시하는 경우. 실시간 처리 실현
Apache Kafka 복수의 데이터 소스로부터 Hadoop에 비구조화 데이터 를 집계(스트림 데이터 처리). flume과의 차이는 여기
Apache Knox 중앙 집중식 인증 및 액세스 관리
Apache Mahout 선형 대수, 통계 분석, 기계 학습 라이브러리
Apache Mesos OS 레벨 컨테이너를 관리하는 리소스 관리자
Apache Oozie 직업 스케줄러
Apache Phoenix HBase를 데이터 스토어로 사용하는 실시간 RDB
Apache Pig 데이터 처리(ETL) 도구
Apache Ranger 인증 된 사용자에게 속성 기반 액세스 권한 부여
Apache Sentry 인증 된 사용자에게 역할 기반 액세스 권한 부여
Apache Slider YARN 애플리케이션 제어. 장시간 기동하고 있는 경우는 Kill 하는 등
Apache Solr 전체 텍스트 검색 ( Elasticsearch 에서 사용된다.)
Apache Spark 기계 학습, SQL 조작, R 언어, 그래프를 메모리 내에서 처리
Apache Sqoop RDBMS에서 Hadoop으로 구조화된 데이터 가져오기, 내보내기
Apache Tez MapReduce보다 빠른 분산 처리 프레임워크
Presto 중간 결과를 메모리에 출력하는 SQL 쿼리 엔진.


최종 수정 : 2022-12-24