코알못

[EMR] hive Async Initialization failed. abortRequested=false OutOfMemoryError 오류 본문

BIG DATA

[EMR] hive Async Initialization failed. abortRequested=false OutOfMemoryError 오류

코린이s 2022. 8. 4. 14:17
728x90

두개의 테이블을 조인 하는 쿼리가 있었으며 해당 쿼리 실행시 아래와 같은 오류 발생하였다.

Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Async Initialization failed. abortRequested=false
	at org.apache.hadoop.hive.ql.exec.Operator.completeInitialization(Operator.java:466)
	at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:400)
	at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:573)
	at org.apache.hadoop.hive.ql.exec.Operator.initializeChildren(Operator.java:525)
	at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:386)
	at org.apache.hadoop.hive.ql.exec.tez.MapRecordProcessor.init(MapRecordProcessor.java:335)
	... 15 more
Caused by: java.lang.OutOfMemoryError: Java heap space
	at org.apache.hadoop.hive.serde2.WriteBuffers.nextBufferToWrite(WriteBuffers.java:261)
	at org.apache.hadoop.hive.serde2.WriteBuffers.write(WriteBuffers.java:237)
	at org.apache.hadoop.hive.ql.exec.vector.mapjoin.fast.VectorMapJoinFastValueStore.addMore(VectorMapJoinFastValueStore.java:691)
	at

백터화 처리를 비활성화 하는 옵션을 추가하며

백터화는 한번에 처리하는 데이터의 양을 늘려 처리속도를 빠르게 하는 기법이라 CPU, 메모리를 많이 사용한다.

자원이 없다면 끈다.

set hive.vectorized.execution.enabled=false;

조인 하는 테이블 모두 많은 양의 데이터 일시 해당 옵션을 끈다.

false 일때 map join 기법을 사용하지 않는것으로 map join 을 사용하게 되면 가장 작은테이블의 데이터를 메모리에 올리고 처리하기에 테이블 모두 양이 많다면 끄는것이 좋다.

set hive.auto.convert.join=false;

아래는 map 작업에 대한 집계를 한번 거치는 작업인데 해당 작업을 하면 성능은 좋아지지만 메모리를 많이 잡아먹어 OOM(out of memory) 에러를 발생 시킨다. 

만약 메모리가 없다면 아래 옵션을 끈다.

set hive.map.aggr=false;
728x90
Comments