[데이터] Hive 로컬/분산 모드

JunMyung Lee·2022년 5월 2일
0

데이터

목록 보기
6/14

현재 클러스터를 테스트/운영으로 구성을 하였다. 두 서버의 차이는 모두 같지만
단지 task노드의 인스턴스 개수뿐,,, ( 운영 : 2, 테스트 : 1)
이때 발생한 이슈가 있는데 같은 Hive쿼리의 속도가 너무 차이가 크게 발생하였다.

테스트 쿼리

select * from table
order by updated_at desc
limit 1;

수행 시간

운영 서버 : 1분 12초
테스트 서버 : 3초

당연하게 속도가 비슷하거나 인스턴스가 하나라도 더 있는 운영이 빨라야 하는데 이게 왠걸? 차이가 나도 너무 났다. 원인을 분석해보다가 다음의 로그에 이상함을 발견

테스트 서버 로그

INFO  : Job running in-process (local Hadoop)
INFO  : 2022-05-02 16:50:18,707 Stage-1 map = 100%,  reduce = 0%
INFO  : 2022-05-02 16:50:19,708 Stage-1 map = 100%,  reduce = 100%

운영 서버 로그

Starting Job = job_1651207074023_0155, Tracking URL = http://ip-10-0-90-20.ap-northeast-2.compute.internal:20888/proxy/application_1651207074023_0155/
INFO  : Kill Command = /usr/lib/hadoop/bin/mapred job  -kill job_1651207074023_0155
INFO  : Hadoop job information for Stage-1: number of mappers: 2; number of reducers: 1
INFO  : 2022-05-02 16:49:38,984 Stage-1 map = 0%,  reduce = 0%
INFO  : 2022-05-02 16:49:48,160 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 3.84 sec
INFO  : 2022-05-02 16:49:55,281 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 5.57 sec
INFO  : MapReduce Total cumulative CPU time: 5 seconds 570 msec
INFO  : Ended Job = job_1651207074023_0155

구글링으로 열심히 찾아본 결과, 운영서버는 yarn을 통한 분산처리가 되고 있었고, 테스트서버는 로컬에서 자체적으로 처리하고 있었다.
즉, yarn을 통한 작업은 굉장히 느리며(작은 업무도 나눠서 전송하고 처리하고 취합해야 하니) 데이터 양도 적으므로 이러한 속도차이가 발생한 것이다.

그렇다면 왜 그럴까? 실제 몇몇 설정을 조회해보니, 테스트서버와 운영 서버 둘다 로컬모드로 강제로 되어있었다.
현재까지 나의 추측은 운영환경에 데이터가 그나마 쌓여 있어서 자체적으로 분산모드로 변경된것이 아닌가.. 한다. ( 확실하게 알수 없음..)
또한 해당 로컬모드 설정은 기본이 false인데 AWS EMR을 통해 구축하면 true로 되어 있다.
( 어떤 좋은 서버를 여러대 해도 결국 기본 로컬모드면 의미 없다는거 아닌가? 이걸 왜 굳이 ? )

설정은 별것없이 하이브 쿼리에 다음과 같이 입력하면 된다.

SET hive.exec.mode.local.auto=false; -- 분산모드
SET hive.exec.mode.local.auto=true;  -- 로컬모드

단, 여기서 true로 변경하면 테스트처럼 똑같이 기본쿼리도 빠르게 될것이라 생각했지만, 이상하게 복잡한 쿼리는 정상적으로 로컬모드로 되었는데 위의 테스트 쿼리로는 그대로 분산모드가 되었다.

결국 간단한 쿼리로 테스트를 하다가 나처럼 안되는것처럼 삽질하지 말고 복잡한 쿼리로 동작하면 그대로 사용하자. 그 이유도 아직까지 찾을 수 없다... 후.

0개의 댓글