Data Engineer/Hadoop Ecosystem

하둡 에코시스템 기초

benlee73 2021. 11. 4. 11:16

하둡 에코시스템은 빅데이터를 효율적으로 다루기 위한 프로젝트들의 집합니다.

 

빅데이터 저장을 위한 HDFS

빅데이터 처리를 위한 MapReduce

두 가지를 코어 프로젝트 외에도 많은 프로젝트들이 존재한다.

자바 기반의 프레임워크이다.

 

  1. HDFS
  2. MapReduce
  3. YARN
  4. Sqoop
  5. Hive
  6. IMPALA
  7. KUDU
  8. Ranger
  9. HUE
  10. Zookeeper
  11. nifi
  12. Oozie
  13. Ozone
  14. Spark
  15. Kafka
  16. Cassandra
  17. Pig
  18. STORM
  19. FLUME
  20. Tajo
  21. MAHOUT
  22. Ambari

HDFS

- 하둡 네트워크에 연결된 기기에 데이터를 분산해서 저장한다.

- 분산된 데이터는 복사본(보통 3개)을 만들어 나누어 저장하기 때문에 높은 가용성을 가진다.

고가용성(high ability) : 하나가 문제가 생겨도 안정적으로 사용할 수 있도록 하는 특성

- Scale out 방식으로 서버 규모를 축소, 확장할 수 있다.

- 대규모 파일을 Block(128MB)로 분할하여 저장한다.

 

MapReduce

: 큰 작업을 나누어 수행하는 빅데이터 처리 기법

- Map 함수 : 흩어진 데이터를 key, value 값 형태로 데이터를 묶는다.

- Recude 함수 : 데이터를 필터링/정렬해서 데이터를 추출한다.

- https://velog.io/@kimdukbae/MapReduce

 

YARN

- 하둡 환경의 component가 늘어나고 동시에 수행되면서 병목 현상이 일어나고 각 서버의 리소스가 부족해졌다.

- 그래서 리소스를 관리하고 스케줄링하는 YARN이 탄생하고 HADOOP 2.0이 만들어졌다.

- 이렇게 하둡 프로젝트들의 스케줄리을 담당하기 때문에 Data Operating System이라는 용어가 붙은 것 같다.

- hadoop 3.0 : 3 replica 기능이 erasure coding으로 개선되었다. 기존에는 4배 정도의 자원이 필요했지만 개선되면서 1.5배로 줄었다.

 

구성요소

Resource Manager

    : 마스터 노드에 위치하고, 이중화로 인해 고가용성을 가진다.

    - Scheduler : 실행될 application의 리소스를 할당하고 scheduling을 진행한다.

    - Application Manager : application을 실행하기 전에 Application master를 실행시킬 수 있는지 검토하고 문제가 없다면 특정 데이터 노드에 Application Master를 할당한다.

 

Node Manager

    - application이 실행되는 데이터 노드(워커 노드)에 위치하고, 노드 내 컨테이너 생성 및 시작을 담당한다.

    - 해당 노드를 모니터링 하면서 Resource manager에게 보고한다.

 

Application Manager

    - 1개의 application 별로 Resource Manager로부터 생성되어 lifecycle을 관리하고 resource 요청을 담당한다. (lifecycle을 관리한다는 것은 시작부터 종료될 때까지 관리한다는 것 같다.)

    - 요청한 resource를 받으면 task 생성과 수행을 요청한다.

    - Node manager와 비슷하게 application의 상태를 지속적으로 보고한다.

 

동작 과정

1. Client가 필요한 데이터와 함께 application을 Resource Manager에게 요청한다.

2. Resource Manager는 특정 노드에 Application Master를 실행시키고 Resource Manager에 등록한다.

3. Application Master는 필요한 resource를 Resource Manager에게 요청한 뒤 할당받는다.

4. Application Master가 특정 노드의 Node Manager에게 container 생성을 요청하면 application이 container에서 수행된다.

 

- https://taaewoo.tistory.com/entry/Hadoop-YARN-Yet-Another-Resource-Negotiator

 

Sqoop

RDBMS(MySQL, Oracle)HDFS(Hive, HBase)간 데이터를 전송하기 위해 사용하는 툴

- HDFS 저장소를 기준으로 import(RDBMS -> HDFS), export(HDFS -> RDBMS) 기능을 제공

- MapReduce방식으로 동작한다.

- CLI 제공

- 기본 DB는 PostgreSQL이고 우리는 MariaDB를 별도로 설치한다.

- https://dydwnsekd.tistory.com/61

 

sqoop이란 ?

sqoop이란? sqoop은 일반적으로 사용하는 RDBMS(MySQL, Oracle)와 HDFS(Hive, HBase)간 데이터를 전송하기 위해 사용하는 툴로 HDFS 저장소를 기준으로 import(RDBMS -> HDFS), export(HDFS -> RDBMS) 기능을 제공..

dydwnsekd.tistory.com

 

Hive

: SQL 기반으로 데이터를 처리하는 데이터 웨어하우스용 솔루션

- SQL과 유사한 HiveQL을 작성하면 맵리듀스 코드가 생성되기 때문에, 어려운 맵리듀스 코드를 작성할 필요가 없다.

- 행 단위 데이터 수정 및 삭제가 안되는 단점이 있다. (https://www.slideshare.net/madvirus/ss-28761748)

 

- 모든 데이터베이스 및 테이블 데이터 파일은 기본적으로 /user/hive/warehouse HDFS 위에 저장된다.

- 2개의 저장소가 있다.

1) Hive Metastore : 데이터베이스 및 테이블에 대한 메타 데이터 저장. (MySQL, PostgreSQL). 이름은 metastore_db

2) Hive Data warehouse Location : HDFS에 위치. 사용자가 만든 모든 데이터베이스의 디렉토리와 사용하는 테이블 이름을 찾을 수 있다.

- https://sequencedata.tistory.com/38

 

- RDB의 데이터베이스 및 테이블과 같은 형태로 HDFS에 저장된 데이터의 구조를 정의하는 방법을 제공

- 저장된 데이터를 대상으로 HiveQL 쿼리를 이용하여 조회하는 방법을 제공

- RDB처럼 미리 스키마를 정의하고 그 틀에 맞게 데이터를 입력하는 것이 아니라, 데이터를 저장하고 거기에 스키마를 입히는(메타스토어를 입력하는) 것이 가장 큰 특징이다.

- 스키마 : 어떤 구조로 데이터가 저장되는지 나타내는 데이터베이스의 구조와 제약조건

- https://spidyweb.tistory.com/238

 

- HDFS에 저장된 데이터를 SQL문을 이용한 맵리듀스 연산으로 구조화시켜 저장하고 요약/분석에 사용한다.

- 그 저장된 데이터에 대한 스키마를 메타스토어에 저장하고 plan을 생성할 때 활용한다.

- https://www.slideshare.net/MahmoodRezaEsmailiZa/apache-hive-introduction

 

구성요소

- Driver : 쿼리를 다양한 DB와 연결하기 위한 드라이버 제공

- Compiler : 메타 스토어를 참고하여 쿼리 구문을 분석하고 실행 계획(plan)을 생성
- Metastore : DB, table, partition의 정보를 저장
- Execution Engine : 컴파일러에 의해 생성된 plan을 실행

- https://wikidocs.net/23282

 

실행 순서

1. 사용자가 SQL문을 제출

2. 드라이버가 컴파일러에게 요청하면, 메타스토어를 이용해 적합한 형태로 컴파일

3. 컴파일된 SQL을 실행엔진으로 실행

4. 리소스 매니저가 클러스터의 자원을 적절히 활용하여 실행

5. 실행 중 사용하는 원천데이터는 HDFS등의 저장장치를 이용

6. 실행 결과를 사용자에게 반환

 

Impala

: HDFS의 데이터를 SQL로 실시간 분석

- 데이터 조회용으로 만들었기 때문에 적재 기능에는 제한이 있을 수 있다.(?)

 

hive와 비교

- kudu 형태를 읽을 수 있다.

- 하이브는 맵리듀스 프레임워크를 사용하지만 임팔라는 고유의 분산 질의 엔진을 사용한다.

- 이 엔진은 모든 데이터 노드에 설치된다.

- 그래서 임팔라가 실시간 데이터 처리(조회, 수정)에 유리하다.

- 비슷한 HiveQL을 사용한다.

 

KUDU

: 칼럼 기반의 스토리지이다.

- 빠르게 데이터 접근이 가능하다.

- HDFS는 데이터 추가만 되지만 kudu는 임팔라를 통해 다양한 쿼리 수행이 가능하다.

- 데이터가 칼럼 기반으로 저장되어, 특정 칼럼만 읽을 때는 디스크에서 읽는 양을 크게 줄여 성능을 높일 수 있다.

- 일반 DBMS처럼 primary key를 제공해 랜덤 액세스 속도가 매우 빠르다.

- Parquet와 비슷하게 대규모 순차 읽기(sequential reading)에 매우 최적화돼 있다.

- OLAP, OLTP 성격의 쿼리를 모두 지원한다.

 

Ranger

각 서비스에 대해 유저/그룹의 권한을 관리한다.

- 보통 HDFS, Hive의 권한을 관리한다.

- HIVE의 권한이란 특정 유저는 select만 가능하게 하는 것이고, 임팔라에도 동일하게 적용된다.

- HDFS의 데이터를 가져올 때 앞 4자리만 보여주는 마스킹이나, 특정 범위 값의 데이터만 보여주는 필터링이 가능하다.

 

Atlas

: 메타 데이터를 관리하는 플랫폼

- 데이터 거버넌스 : 기업의 데이터 관리 정책 및 프로세스. 이를 통해 데이터 생성, ETL, DB까지의 흐름, 계보를 볼 수 있다.

- 메타정보 저장에는 Hbase, 검색/그래프 엔진으로 Solr를 사용한다.

 

Hue

: Hive, impala를 사용할 수 있는 UI 제공

- 복잡한 하둡 도구들의 접근성을 높이기 위한 UI(사용자 인터페이스)

- HDFS도 쉽게 시각화해준다.

- S3 정보를 저장하면 S3의 데이터도 시각화해준다.

 

Zookeeper

- 분산된 시스템 간의 정보 공유

- 클러스터에 있는 서버들의 상태 체크

- 분산된 서버들 간의 동기화를 위한 lock

=> 이런 일을 하는 시스템을 코디네이션 서비스 시스템이라고 한다.

 

- 코디네이션 시스템의 장애는 전체 시스템의 장애로 이어지기 때문에 이중화 등으로 고가용성을 유지해야한다.

- 데이터 읽는 속도가 빠르다.

- 자체적으로 장애에 대한 대응성을 가진다.

- 분산 솔루션에서 많이 사용된다. (HBase, Kafka 등)

 

- 주키퍼는 트리 구조로 데이터를 저장하고, 많은 데이터를 보관하는 것은 적합하지 않다.

- 서버들의 설정 정보, 클러스터를 구성할 때 마스터가 어떤 서버인지, 각각의 작업에 할당되어 있는 서버가 무엇인지

 

주키퍼 이름 의미 : 분산 시스템은 동물원이며 이를 통제하기 위한 사육사(주키퍼)가 필요해서 만들어졌다.

https://bcho.tistory.com/1016
https://brunch.co.kr/@timevoyage/77

 

 

nifi

: 시스템 간 데이터 전달을 효율적으로 처리, 관리, 모니터링 하기 위한 최적의 시스템이다.
- Dataflow를 쉽게 개발할 수 있고, 시스템 간의 데이터 이동과 내용을 볼 수 있는 UI를 제공

- 실시간 데이터 전송에 필요한 기능을 제공

- 강력한 자원과 권한 관리를 통해 Multi-tenant(여러 조직이 자원을 공유해 사용)를 지원

- 데이터가 어느 시스템으로부터 왔는지 추적 가능

- https://snepbnt.tistory.com/400

 

oozie

: 하둡의 job을 관리하기 위한 서버 기반의 workflow scheduling 시스템

- 반복적이면서 복잡한 후처리 job을 처리하기 위해 등장한 시스템이다.

- DAG을 사용해서 job의 시작, 처리, 분기, 종료점 등의 action으로 구성된 workflow 생성한다.

- workflow : 맵리듀스 작업, SQL 분산 작업 등의 집합, 흐름

 

Oozie 기능

- Scheduling : 특정 시간 / 주기적인 간격 / 이벤트 발생시 action 수행

- Coordinating : 이전 action이 성공적으로 끝나면 다음 action 시작

- Managing : action이 성공하거나 실패하면 이메일 발송. action 수행 시간 및 단계 저장

 

https://kerpect.tistory.com/75

 

Ozone

: 크고 작은 파일을 모두 다루는 데 특화된 key-value 기반 분산 저장소

- HDFS는 대용량 파일을 다루는 데 효율적이지만 작은 파일을 저장하기엔 좋지 않다. 이를 보완한 것이 Ozone이다.

- HDFS의 단점 : 크기에 관계없이 파일마다 시스템 오브젝트(meta data, inode)가 생성되기 때문에 작은 파일들이 많으면 너무 많은 시스템 오브젝트가 생성된다.

- https://www.2e.co.kr/news/articleView.html?idxno=301613

 

Spark

: 빅데이터 분산처리 플랫폼 / 빅데이터 분산처리 엔진

- MapReduce는 디스크에 반복적으로 접근하며 빅데이터를 분산처리한다.

- 메모리가 저렴해지면서 Spark는 연산을 인메모리 상에서 동작시켰고 약 100배의 성능을 향상시켰다. 

- 하둡을 대체하기보다 혼합하여 사용하고, 카프카와도 연계할 수 있어 확장성이 좋다.

 

- Scala, JAVA, Python 등 여러 언어의 고수준 API 제공

- Spark SQL, 실시간으로 데이터 처리하는 Spark Streaming, 머신러닝을 지원하는 MLlib 등을 제공

 

여러 빅데이터 시나리오에 사용할 수 있기 때문에 범용 분산 처리 엔진이라고 한다.

- 대용량 데이터 저장 및 처리

- 비정형 데이터 변환

- 스트리밍 데이터 처리

- ETL

- MLlib를 통한 기계 학습

- GraphX를 통한 그래프 처리

- Spark SQL을 통핸 SQL 및 정형 데이터 처리

 

- Cluster Manager : YARN, Mesos, Kubernetes

- Distributed Storage System : HDFS, MapR-FS, Cassandra, Swift, S3, KUDU

 

- https://docs.microsoft.com/ko-kr/dotnet/spark/what-is-spark

- https://artist-developer.tistory.com/7

 

kafka

: 실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산 데이터 스트리밍 플랫폼

- 여러 소스에서 대규모 데이터 스트림을 처리하고 전달한다.

pub-sub 

 

- Event : Producer와 Consumer가 데이터를 주고 받는 단위

- Producer : 토픽에 이벤트를 게시하는 어플리케이션

- Consumer : 토픽을 구독하고 이벤트를 처리하는 어플리케이션

- Topic : 이벤트가 쓰이는 곳. producer가 토픽에 이벤트를 게시하면 consumer가 토픽에서 이벤트를 가져가 처리한다.

 

- 토픽은 파일 시스템의 폴더와 유사하고, 이벤트는 폴더 안의 파일과 유사하다.

- Producer와 Consumer는 서로를 알지 못한다.

 

 

- https://www.redhat.com/ko/topics/integration/what-is-apache-kafka

- https://galid1.tistory.com/793

 

 

 

 

 

 

 

Cassandra

: 컬럼 기반 NoSQL

 

Pig

: 스크립핑. 맵리듀스 코드 작성 지원

 

STORM

: real-time 데이터

 

FLUME

 

Tajo

 

MAHOUT

 

Ambari

: CDP Manager

 


https://butter-shower.tistory.com/73

https://inkkim.github.io/hadoop/Hadoop-Ecosystem%EC%9D%B4%EB%9E%80/