data engineering/hadoop

Hadoop Ecosystem 쓱 보기 -4 (Hive의 대안. Impala)

nani-jin 2024. 9. 26. 09:15

https://nani-log.tistory.com/160

 

Hadoop Ecosystem 쓱 보기 -3 (Hive)

https://nani-log.tistory.com/159?category=720053 Hadoop Ecosystem -2 (Mapreduce2, YARN)https://nani-log.tistory.com/158 Hadoop Ecosystem -1 (HDFS, MapReduce1)데이터 웨어하우스를 공부하다보니, 분산시스템의 근간인 하둡 에코시

nani-log.tistory.com

 

앞서 Hive는 Mapreduce를 기반으로해 실시간 분석 쿼리엔 적합하지 않아 대안들인 프레임워크가 개발되었다고 언급했다. 그중 하나가 Impala다. Impala는 클라우데라에서 개발한 SQL 기반의 실시간 쿼리 엔진으로 대용량 데이터에 대한 실시간 분석을 지원하는 MPP 기반의 시스템이다

 

설계적 특성

설계적 특성은 다음과 같다

  1. 자체 실행 엔진
    • 자체 실행 엔진을 사용해 Mapreduce에 의존하지 않는다. 이로 인해 중간 결과를 디스크에 저장하지 않고 메모리 내에서 직접 처리해 빠른 응답 속도로 제공할 수 있다
  2. MPP 아키텍처
    • 분산 병렬 처리를 위해 설계된 MPP 아키텍처를 사용한다. 클러스터 내 여러 노드가 각자 데이터를 처리해 하나의 쿼리를 동시에 수행하고, 그 결과를 병합한다
  3. 데이터 지역성 최적화
    • 데이터 지역성을 고려해 쿼리에 필요한 데이터가 있는 노드에서 처리를 실행한다. 이로써 네트워크 I/O를 최소화하고 성능을 향상시킨다
  4. Hive metastore 사용
    • Hive metastore를 사용해 메타데이터를 관리한다. 이를 통해 테이블 스키마, 파티션 정보 등을 공유할 수 있고 다른 프레임워크들과의 호환성을 높인다
  5. DAG를 기반으로 실행 계획 생성
    • DAG를 기반으로 실행 계획을 생성해, 각 노드가 어떻게 데이터를 처리할지 계획을 세우고 병렬로 처리한다. DAG를 기반으로 처리하면 스케줄링 및 태스크 최적화가 가능하다
  6. 멀티 스레딩
    • Mapreduce는 기본적으론 각 노드에서 하나의 프로세스만 실행된 반면, Impala는 각 노드에서 멀티스레드로 쿼리를 처리해 병렬 처리를 극대화한다
  7. 메모리 사용
    • Hive는 디스크 기반으로 처리하는 반면, Impala는 인메모리로 처리한다
    • 메모리가 부족할 경우 쿼리 실행을 중단하지 않고 메모리 사용을 조절하거나 스필링(디스크에 데이터를 쓰는 것)을 통해 처리한다. 이로써 안정성이 보장된다

자체 실행 엔진을 사용하고 MPP 아키텍처로 병렬 처리를 극대화한다는 점, 인메모리로 처리한다는 점이 성능을 높일 수 있었던 지점이다

 

 

아키텍처

Impala는 Impala demon, State store, Catalog Service로 구성되며, 테이블의 메타데이터는 Hive metastore에서 참조한다

[출처] https://impala.apache.org/overview.html

 

  1. Impala Daemon(Query Planner + Coordinator + Exec Engine)
    • Impala의 핵심 요소로, 각 데이터 노드에 배포되어 실행된다
    • SQL 쿼리 계획, 실행, 처리를 담당하며 쿼리 실행시 데이터를 직접 메모리에서 처리해 고속으로 결과를 반환할 수 있다
  2. State store
    • 클러스터 내 데몬간의 상태 정보를 동기화한다
    • 각 데몬의 상태, 장애 발생시 대체 노드, 쿼리 분산 처리 상태 등을 관리해 클러스터의 안정성과 가용성을 높인다
  3. Catalog Service
    • 메타데이터 관리 서비스로, Hive metastore와 통합해 테이블 스키마, 파티션 정보 등을 저장하고 제공한다
    • 사용자가 Impala에서 테이블을 생성하고 변경할때마다 메타데이터를 업데이트해 Impala 클러스터 전체에 전달한다

 

클라이언트가 쿼리를 실행하면, Impala는 한 Daemon의 쿼리 코디네이터가 받아 쿼리를 분석하고 실행 계획을 생성한다. 실행 계획을 기반으로 각 Daemon에게 일부를 분배하면 각 데이터 노드는 HDFS나 다른 저장소에서 데이터를 읽고 쿼리의 일부를 처리한 결과를 코디네이터로 보낸다. 코디네이너는 각 노드에서 전달된 결과를 취합하고 클라이언트에게 반환한다

 

 

Hive metastore와의 결합

왜 자체 메타스토어로만 운용하는 것이 아닌 Hive metastore와 결합할까?

 

 

 

아래 그림을 통해 Hive metastore와 결합해 사용하는 각 프레임워크들의 위치를 확인할 수 있다

[출처] https://hive.apache.org/

 

 

정리

Impala의 성능이 더 뛰어날 수 있었던 이유는 메모리 기반 처리와 병렬 처리 구조 덕분이다. 구축한 클러스터의 활용성을 극대화하려는 노력 덕분에 Impala는 Hive를 대체할 수 있었고 실시간 쿼리와 대화형 분석에 적합한 성능을 제공할 수 있었다

 

이런 특성들은 현대의 클라우드 서비스인 데이터 웨어하우스 제품들과도 많이 닮아있다. Redshift, Bigquery 등 한순간에 뚝딱 나온게 아니라, 여러 기술적 발전이 결합되어 제품으로 이어졌다는 것을 이해하는 것이 중요할 것 같다