GOOD4ME

[TEZ] Apache TEZ 프레임워크 본문

개발.오류.정리/Hive

[TEZ] Apache TEZ 프레임워크

de_youn 2022. 12. 2. 15:50
반응형
MapReduce

 

분산 데이터 처리 프레임워크MapReduce
임의의 자바 프로그램을 실행시킬 수 있어
비구조화된 데이터를 가공하는데 적합하다

Map은 데이터를 변형하며
Reduce는 Map의 결과 데이터를 집계한다

데이터의 Reduce 작업이 끝나면
중간 결과HDFS에 저장한 뒤,
다시 M-R 작업이 이루어지기 때문에,
Disk I/O가 발생하여 작업 속도가 저하된다

 

TEZ

 

TEZ는 MapReduce처럼
분산 데이터 처리 프레임워크이다

미리 실행계획을 계산하여
DAG를 통해 Disk에 저장하는 과정없이
Map 단계의 데이터를 메모리에 저장 후, Reduce에 전달함으로써
작업 속도가 MapReduce에 비해 빠르다.
간단한 작업에 대해서는 처리 속도 향상률이 낮은건 비밀...😂

MapReduce vs. TEZ

 

Hive는 기본적으로 MapReduce를 엔진으로 사용하지만,
대용량 데이터를 처리하는 경우엔
MapReduce보단 TEZ를 사용하는 것이 효율적이다.

Hive에서 TEZ를 사용하기 위해서는
hive-site.xml에서 아래의 설정 부분을 찾아 수정 또는 추가해야한다.

~
    <name>hive.execution.engine</name>
    <value>tez</value>
~

또는 hive에 접속 후 하단처럼 환경설정을 하여 엔진 변경이 가능하다.

 > SET hive.execution.engine = tez;

 

TEZ 사용 시, 주의사항

 

TEZ는 Map 작업이 종료되면
MapReduce와 달리 메모리에 데이터를 저장하기 때문에
충분한 크기의 메모리가 필요하다

또한 TEZ 설정 시,
여러가지 메모리 크기를 설정하는 부분이 있는데,
이를 자신의 메모리에 맞게 수정해야
메모리 오류를 피할 수 있다.

~
    <name>tez.am.resource.memory.mb</name>
    <value>2048</value>
~
~
    <name>tez.am.java.opts</name>
    <value>-Xmx1600m</value>
~
~
    <name>hive.tez.container.size</name>
    <value>2048</value>
~
~
    <name>hive.tez.java.opts</name>
    <value>-Xmx1600m</value>
~
~
    <name>tez.runtime.io.sort.mb</name>
    <value>800</value>
~
~
    <name>hive.auto.convert.join.noconditionaltask.size</name>
    <value>600</value>
~

또는 hive에 접속 후 하단처럼 환경설정을 하여 메모리 설정이 가능하다.

// Application Master 메모리
 > SET tez.am.resource.memory.mb=2048;

// Application Master가 사용할 힙메모리 사이즈
// tez.am.resource.memory.mb의 80%
 > SET tez.am.java.opts=-Xmx1600m;

// tez 작업을 진행하는 컨테이너의 메모리 크기
 > SET hive.tez.container.size=2048;

// 컨테이너에서 사용할 수 있는 힙의 메모리 크기
// hive.tez.container.size의 80%
 > SET hive.tez.java.opts=-Xmx1600m;

// 출력결과를 정렬해야 할 때 사용하는 메모리
// hive.tez.container.size의 40%
 > SET tez.runtime.io.sort.mb=800;

// 맵조인에 사용하는 메모리
// hive.tez.container.size의 33%
> SET hive.auto.convert.join.noconditionaltask.size=600;
반응형
Comments