HIVE -Tez(테즈) Engine에 대해 알아보자

해진·2021년 2월 8일
post-thumbnail

HIVE를 이용한 쿼리 실행 시 집계 등 MapReduce작업이 필요한 경우, 컴파일된 SQL을 실행 엔진을 통해 수행합니다.
HIVE 실행 엔진은 MR(MapReduce), TEZ, SPARK 중 하나를 설정하여 사용할 수 있습니다.
작년 수행한 프로젝트에서 HIVE 3.1 버전을 사용하였는데, HIVE 2.0버전부터는 기본적으로 TEZ엔진을 사용합니다.
그래서 오늘은 이 중 TEZ(테즈)엔진에 대해 정리해보겠습니다.

TEZ란 ?

TEZ는 YARN기반의 데이터 처리를 위한 프레임워크입니다.

방향성 비순환 그래프(DAG)를 사용해서 Dataflow Gragh 정의한다는 점이 특징입니다.
이러한 특징 덕분에 SQL실행 전에 작업량, 리소스에 대해 최적화된 실행 계획을 설계할 수 있습니다. 실행중에 동적으로 그래프를 변경하며 실행 계획을 최적화하는데 도움을 줄 수 있습니다.

TEZ는 MapReduce동작 방식과 동일하게 Yarn을 통해 container를 할당받는데 이러한 container를 재사용합니다. 재사용함으로써 container 리소스를 재할당 받는 메모리의 오버헤드를 줄일 수 있습니다.

TEZ vs MapReduce

이미지 출처 : https://docs.cloudera.com

결론을 먼저 말하면, TEZ엔진은 MR엔진보다 성능이 좋습니다.

MR은 Map단계에서 데이터를 읽고 중간 산출물을 생성하고, Reduce 단계에서 중간 산출물을 다시 읽어드려 처리하고 최종 결과를 출력합니다. MR 엔진 위에서는 앞의 절차를 HDFS에 쓰고 읽으며 진행됩니다. 작업 중간에 발생되는 임시 데이터도 모두 디스크 상에 읽고 쓰는 방식으로 처리하기 때문에 IO 작업이 빈번히 일어나고 이에따른 오버헤드가 발생됩니다.

TEZ는 각 STAGE에서 나온 중간 산출물(Map단계의 결과물)을 메모리에 저장 후 Reduce단계로 넘겨 처리하기 때문에 IO가 줄고 속도가 빨라집니다.
HDFS에 읽고 쓰는 불필요한 단계를 감소시킴으로써 기존 MapReduce의 단점을 해결했습니다.

TEZ 실행엔진 설정

HIVE에서 실행 엔진을 설정할 수 있습니다.

-- hive 엔진 설정
set hive.execution.engine=tez;
set hive.execution.engine=mr;
set hive.execution.engine=spark;



정리한 내용 중 잘못된 정보가 있다면 피드백 부탁드립니다.

profile
서버 개발자

0개의 댓글