본문 바로가기
Big Data/Hadoop

하둡 에코시스템(Hadoop EcoSystem) - 하둡 프로젝트와 생태계

by ssenim 2023. 8. 21.

출처: https://1004jonghee.tistory.com/m/entry/1004jonghee-%ED%95%98%EB%91%A1%EC%97%90%EC%BD%94%EC%8B%9C%EC%8A%A4%ED%85%9CHadoop-Eco-System-Ver-10?category=419383

 

이전에 작성한 글을 통해 하둡으로 대용량 데이터를 저장하고 처리할 수 있다고 말씀드렸습니다.

하지만, 아쉽게도 하둡 단 하나만을 가지고 할 수 있는 것은 거의 없습니다.

빅데이터는 수집, 정제, 적재, 분석, 시각화 등의 여러 단계를 거칩니다.

이 단계를 거치는 동안 빅데이터는 여러 가지 기술을 이용하여 처리되고, 이 기술들이 통틀어 에코시스템인 셈입니다.

즉, 하둡에서 데이터를 분석, 유지, 저장, 관리 등을 할 때 필요한 모든 것들을 의미합니다.

 


 

하둡 에코시스템(Hadoop EcoSystem)

하둡은 효율적인 데이터 처리와 분석을 위해 HDFS와 MapReduce 말고도 많은 구성요소로 포함됩니다.

여기서 HDFS와 MapReduce는 하둡의 코어 프로젝트이며, 이를 제외한 많은 구성요소인 서브 프로젝트가 존재합니다.

그리고 이러한 서브 프로젝트들의 모임을 하둡 에코시스템이라고 합니다.

쉽게 말해, 하둡 에코 시스템은 다양한 Framework를 이루고 있는 다양한 서브 프로젝트들의 모임입니다.

 

지금부터 살펴볼 내용들은 기존의 데이터가 아닌 분산데이터이기 때문에 새롭게 생긴 용어들입니다.

사실상 기존의 데이터를 다루는 데 사용되는 개념들이지만,

분산되어 저장된 데이터를 처리하는 방식에 이름을 붙인 것이라고 할 수 있습니다.

결국, 하둡 서브 프로젝트를 분산 데이터를 다루기 위해 만들어진 추가 프로젝트로 볼 수 있습니다.

 

출처: 시작하세요! 하둡 프로그래밍(위키북스)

위와 같이, 하둡은 에코시스템은 각기 다른 프로그램들이 결합되어 있는, 생태계(Ecosystem)를 형성하고 있습니다.

각각 버전이 업그레이드되는 것이 다르며, 호환이 잘 맞지는 않습니다.

따라서 통합관리가 필요하며, 우리는 이에 따라 통합관리가 되어있는 배포판을 사용하는 것이 좋습니다.

 

아래는 예시로 든 간략한 하둡의 작업 흐름도입니다.

 HDFS (하둡 저장 시스템)  →  MapReduce (데이터를 key/value로 변경) 
      →  Hbase (변경된 데이터를 데이터 베이스로 저장)  →  Pig, Hive, Mahout, Oozie (데이터를 분석해 주는 툴)

 

이제 하둡 에코시스템의 여러 프로그램들을 목적별로 분류하여 살펴보겠습니다.

 

1. 데이터 수집

수집 기술은 빅데이터 분석을 위한 원천 데이터를 수집하는 기술입니다.

원천 데이터를 수집하는 기술은 크게 배치 데이터 수집과 실시간 데이터 수집 기술로 나눌 수 있습니다.

** 참고로 원천데이터의 종류에도 로그 데이터, DB데이터, API 호출 데이터 등 여러 가지 종류가 있습니다.

 

1.1 Chukwa

야후에서 개발한 분산 환경에서 생성되는 데이터를 HDFS에 안정적으로 저장하는 플랫폼

  • 분산된 각 서버에서 에이전트를 실행하고, collector가 에이전트로부터 데이터를 받아 HDFS에 저장
  • 콜렉터는 100개의 에이전트당 하나씩 구동
  • 데이터 중복 제거 등 맵리듀스로 처리

1.2 Flume

Chukwa처럼 분산된 서버에 에이전트가 설치되고, 에이전트로부터 데이터를 전달받는 콜렉터로 구성

  • 데이터의 흐름을 관리하는 마스터 서버가 있음
  • 즉, 데이터를 어디서 수집하고, 어떤 방식으로 전송하며, 어디에 저장할지 변경할 수 있음
  • 클라우데라에서 개발하였음

1.3 Kafka

링크드인에서 개발한 데이터 스트림을 실시간으로 관리하기 위한 분산 메시징 시스템

  • 데이터 손실을 막기 위해 디스크에 데이터를 저장
  • 파티셔닝을 지원하여 다수의 Kafka 서버에서 메시지를 분산 처리할 수 있음
  • 시스템 안정성을 위해 로드밸런싱과 내고장성(Fault Tolerant)을 보장함
  • 대용량 이벤트 처리에 특화됨
  • 발행(publish) - 구독(subscribe) 모델로 구성됨

1.4 Scribe

페이스북에서 개발한 데이터 수집 플랫폼

  • 데이터를 중앙 집중 서버로 전송
  • 최종 데이터는 HDFS 외 다양한 저장소를 활용할 수 있음
  • 설치와 구성이 쉽도록 다양한 프로그래밍 언어를 지원함
  • HDFS에 데이터를 저장하기 위해 JNI(Java Native Interface)을 이용

 

2. 데이터 저장

2.1 Hbase

HDFS 기반의 칼럼 기반 데이터베이스

  • 실시간 랜덤 조회 및 업데이트 가능
  • 개인의 데이터를 비동기적으로 업데이트
  • 단, 맵리듀스는 일괄 처리 방식으로 수행됨
  • 트위터, 야후, 어도비, 국내 NHN(모바일 메신저 Line)

2.2 Tajo

고려대 정보통신대학 컴퓨터학과 DB연구실 박사 과정 학생들이 개발한 하둡 기반의 DW 시스템

  • 데이터 저장소는 HDFS를 사용하되, 표준 DB 언어인 SQL을 통해 실시간으로 데이터 조회 가능
  • Hive보다 2~3배 빠르며, 클라우데라의 Impala와 비슷한 속도를 보여줌
  • Impala는 클라우데라의 하둡을 써야 하는 제약이 존재하지만 Tajo는 특정 업체 솔루션에 종속되지 않음

2.3 Kudu

속성 기반 스토리지로, 하둡 에코 시스템에 새로 추가됨

  • 빠르게 변화하는 데이터에 대한 빠른 분석을 위해 설계
  • 클라우데라에서 시작된 프로젝트로, 15년 말 아파치 인큐베이션 프로젝트로 선정되었음

2.4 HDFS

 

 

3. 데이터 전송

3.1 Hiho

대용량 데이터 전송 솔루션

  • 하둡에서 데이터를 가져오기 위한 SQL을 지정할 수 있음
  • JDBC 인터페이스를 지원함
  • Oracle과 MySQL의 데이터 전송만을 지원함

3.2 Sqoop

대용량 데이터 전송 솔루션

  • HDFS, RDBMS, DW, NoSQL 등 다양한 저장소에 대용량 데이터를 신속하게 전송할 수 있는 방법을 제공
  • 상용 RDBMS도 지원하고, MySQL, PostgreSQL 오픈소스 RDBMS도 지원함

sqoop은 관계형 데이터베이스와 하둡 간 데이터를 쉽게 주고받을 수 있게 해주는 프레임워크입니다.

보통 sqoop과 hiho는 정형화된 데이터를 수집하는 기술로 많이 쓰이며,

flume, chuckwa, scribe는 SNS에서 만들어지는 비정형 데이터를 수집하는 기술로 쓰입니다.

 

 

4. 데이터 직렬화

4.1 Avro

원격 프로시저 호출(Remote Procedure Call, RPC) 및 데이터 직렬화 프로토콜

  • JSON을 이용해 데이터 형식과 프로토콜을 정의
  • 작고 빠른 바이너리 포맷으로 데이터를 직렬화

 

5. 데이터 처리

5.1 Pig

  • 야후에서 개발하였으며, 현재 아파치 프로젝트에 속함
  • 복잡한 맵리듀스 프로그래밍을 대체할 Pig Latin이라는 자체 언어를 제공
  • 복잡한 맵리듀스 API를 크게 단순화함
  • SQL과 유사한 형태이지만, SQL 활용이 어려운 편임

5.2 Hive

데이터웨어하우징용 솔루션

  • 페이스북에서 개발하였으며, 현재 아파치 프로젝트에 속함
  • SQL과 매우 유사한 HiveQL 쿼리를 제공 (내부적으로 맵리듀스 잡으로 변환되어 실행됨)
  • 자바를 모르는 데이터 분석가들도 쉽게 하둡 데이터를 분석할 수 있도록 도와줌
  • 사용들에게 쉽게 조회(Query)할 수 있는 방법을 제공하지만, 처리 속도가 느린 문제점을 여전히 가지고 있으며, HiveQL 언어는 표준 SQL의 규칙을 준수하지 않아 사용자들은 이러한 차이점을 다시 배워야 하는 문제점이 있음
  • 짧은 임시쿼리보다는 일괄적인 맵리듀스 처리에 이상적임

맵리듀스를 구현하려면 여러 언어들을 사용해야 하는데 기본적으로 하둡은 자바로 개발되어 있기 때문에

가장 많이 활용되는 언어는 자바입니다. 따라서 초창기에는 맵리듀스를 구현하기 위해 자바로 직접 코딩을 했습니다.

그러나 자바 코드는 굉장히 길기 때문에 자바가 자동으로 작동할 수 있도록 스크립트 언어를 만들었는데,

이 언어가 바로 Pig와 Hive입니다. 결국 Pig와 Hive의 탄생으로 자바를 통해 맵리듀스를 구현할 필요가 없어졌습니다.

 

하이브가 가지고 있는 문제점을 개선하기 위한 하둡 진영은 크게 두 갈래로 나뉘게 됩니다.

  1. "하이브를 완전히 대체하는 새 기술을 쓸 것인가?"
    • 그루터의 타조(Tajo), 클라우데라의 임팔라(Impala)
  2. "하이브를 개선해 속도를 높일 것인가?"
    • 호튼웍스 회사의 스팅어(Stinger)

여기서 임팔라는 조금 특이한 케이스입니다.

일정 규모 이상의 데이터는 임팔라로 분석이 불가능하기 때문입니다.

임팔라는 메모리 기반의 처리 엔진이기 때문에 일정 용량 이상에서는 디스크 환경의 하이브를 사용해야 합니다.

하지만, 전체적인 틀에서는 하이브를 과감히 버리는 쪽으로 무게를 두고 있다고 이해하시면 됩니다.

Hive는 배치성 데이터 조회/분석에, Impala는 OLTP성 데이터 조회/분석에 적합하므로 선별적 사용이 필요합니다.

 

5.3 Mahout

하둡 기반으로 데이터 마이닝 알고리즘을 구현

  • 분류 (Classification)
  • 클러스터링 (Clustering)
  • 추천 및 협업 필터링 (Recommenders / Collaborative filtering)
  • 패턴 마이닝 (Pattern Mining)
  • 회귀 분석 (Regression)
  • 차원 리덕션 (Dimension reduction)
  • 진화 알고리즘 (Evolutionary Algorithms)

머신러닝이나 인공지능 알고리즘을 큰 데이터를 가지고 처리하려면 별도의 알고리즘이 구현되어 있는 구현체가

필요한데, 마하웃은 머신러닝 알고리즘을 분산데이터에서 처리할 수 있도록 만드는 아웃풋 구현체라고 할 수 있습니다.

 

5.4 Spark

대규모 데이터 처리를 위해 빠른 속도로 실행시켜 주는 엔진

  • 병렬 애플리케이션을 쉽게 만들 수 있는 80개 이상의 고급 연산자를 제공
  • python, r 등에서 대화형(인터프리터)으로 사용 가능 

5.5 Impala

클라우데라에서 개발한 하둡 기반의 실시간 SQL 질의 시스템

  • 하둡 기반 분산 엔진
  • MapReduce를 사용하지 않고 C++로 개발한 인메모리 엔진을 사용하여 빠른 성능을 보여줌
  • Impala는 데이터 조회를 위한 인터페이스로 HiveQL을 사용하며, 수초 내에 SQL 질의 결과 조회 가능
  • HBase와 연동 가능

5.6 MapReduce

 

 

6. 작업관리기술 (워크플로우 관리)

6.1 Airflow

에어비앤비에서 개발한 DAGs 기반의 워크플로우

  • 각 잡의 흐름 시각화 및 스케쥴링, 모니터링이 가능
  • 파이썬 기반으로 워크플로우를 작성할 수 있음

6.2 Oozie

하둡 작업을 관리하는 워크플로우 및 코디네이터 시스템

  • 자바 서블릿 컨테이너에서 실행되는 자바 웹 애플리케이션 서버
  • 맵리듀스 작업이나 Pig 작업 같은 특화된 액션으로 구성된 워크플로우를 제어

 

7. 분산 리소스 관리

빅데이터 에코 시스템이 다양한 기술과 언어로 구현되기 때문에 각 언어 간 내부 객체를 공유해야 하는 경우가 많습니다.    이를 효율적으로 처리하기 위해서 데이터 직렬화 기술을 이용합니다.

 

7.1 HCatalog

하둡으로 생성한 데이터를 위한 테이블 및 스토리지 관리 서비스

  • 하둡 에코시스템 간의 상호운용성 향상에 큰 영향을 줌, 이 점이 가장 큰 장점
  • Hcatalog의 이용으로 Hive에서 생성한 테이블이나 데이터모델을 pig나 맵리듀스에서 손쉽게 이용 가능                       (이전엔 모델 공유는 가능했으나, 상당한 백엔드 작업이 필요했었음)

 

8. 분산서버 관리

Zookeeper는 야후에서 처음 개발되었습니다.

Zookeeper는 사육사라는 의미인데 하둡의 서브 프로젝트들이 대부분 동물이름인 것을 보면,

동물들을 관리하는 즉, 분산 환경을 관리한다는 의미라는 것을 쉽게 짐작할 수 있습니다. 

 

8.1 Zookeeper

분산 환경에서 서버 간의 상호 조정이 필요한 다양한 서비스를 제공하는 시스템

  • 하나의 서버에만 서비스가 집중되지 않게 알맞게 분산해 동시에 처리하게 해 줌
  • 하나의 서버에서 처리한 결과를 다른 서버와도 동기화해서 데이터의 안정성을 보장해 줌
  • 운영(active) 서버에 문제가 발생해 서비스를 제공할 수 없을 경우, 다른 대기 중인 서버를 운영서버로 바꿔                 서비스가 중지 없이 제공되게 함
  • 분산 환경을 구성하는 서버들의 환경설정을 통합적으로 관리함
  • 기능에 비해 시스템이 단순하여 많이 사용됨

댓글