Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
impala [impala]insert into db명.table명 select a, b from db명.table명 쿼리 수행시 "Memory limit exceeded: Failed to allocate memory for Parquet page index"오류 조치 방법
impala admission control에서 해당 pool의 mininum query memory 값이 5G로 설정되고 "insert into db명.table명(a, b) partiton(b) select a, b from db명.table명" 쿼리 수행시 Query Status: "Memory limit exceeded: Failed to allocate memory for Parquet page index"라는 오류가 발생하면서 쿼리가 실패하는 경우는 select하여 Parquet테이블에 insert하면서 partition한개 전체를 한 노드에 모으는 과정(default: SHUFFLE)과 sort가 발생하면서 메모리 제한(5G)에 걸린것이다.
이때는 /* +NOSHUFFLE */의 hint를 주면 당장의 쿼리를 수행할 수는 있으나 compute stat를 수행하거나 파티션을 세분화하는 등의 작업을 통해서 한 노드에서 메모리를 과도하게 사용하지 않도록 하는 방법을 강구해야 한다.
(hint사용 예, "insert into db명.table명(a, b) partition(b) /* +NOSHUFFLE */ select a, b from db명.table명")
* query profile에서 다음과 같은 부분이 확인된다.
Query(004855a129b89197:2172266000000000): memory limit exceeded. Limit=5.00 GB Reservation=4.00 GB ReservationLimit=4.00 GB OtherMemory=1.03 GB Total=5.03 GB Peak=5.03 GB
Fragment 004855a129b89197:2172266000000008: Reservation=0 OtherMemory=0 Total=0 Peak=523.09 MB
HDFS_SCAN_NODE (id=0): Reservation=0 OtherMemory=0 Total=0 Peak=518.61 MB
KrpcDataStreamSender (dst_id=1): Total=0 Peak=1.01 MB
Fragment 004855a129b89197:217226600000001c: Reservation=4.00 GB OtherMemory=1.03 GB Total=5.03 GB Peak=5.03 GB
SORT_NODE (id=2): Reservation=4.00 GB OtherMemory=40.00 KB Total=4.00 GB Peak=4.00 GB
EXCHANGE_NODE (id=1): Reservation=0 OtherMemory=0 Total=0 Peak=21.31 MB
KrpcDeferredRpcs: Total=0 Peak=4.34 MB
HdfsTableSink: Total=1.03 GB Peak=1.03 GB
CodeGen: Total=1.23 KB Peak=669.00 KB
CodeGen: Total=1.45 KB Peak=247.50 KB