Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
impala [impala]쿼리 수행중 발생하는 오류(due to memory pressure: the memory usage of this transaction, Failed to write to server)
다음과 같은 오류가 발생하면서 쿼리가 실패할때 확인 및 조치 내용을 정리합니다.
<오류내용>
Kudu error(s) reported, first error: Timed out: Failed to write batch of 838 ops to tablet 754b956462d840f6b2a7065efc817900 after 589 attempt(s): Failed to write to server: (no server available):
Write(tablet: 754b956462d840f6b2a7065efc817900, num_ops: 838, num_attempts: 589) passed its deadline: Illegal state: Tablet not RUNNING: FAILED: IO error: failing tablet
Impala Version: impalad version 3.2.0-cdh6.3.4 RELEASE (build 5fe4723ad8fe1c3aaecbeb32c7533048be2420cf)
<확인사항>
1. datanode12 호스트의 TServer 로그에서 실패한 태블릿 ID 1개(754b956462d840f6b2a7065efc817900)를 확인했으며 다음 메시지를 볼 수 있습니다.
"W0924 02:47:02.611682 3793 leader_election.cc:348] T 754b956462d840f6b2a7065efc817900 P 4755be7391934535b21ec5be91e87bdd [CANDIDATE]: Term 9109 pre-election: Tablet error from VoteRequest() call to peer 9c863beb35d64899a11b0a570eb19cc3 (datanode05.gooper.com:7050): Illegal state: cannot vote while shut down"
2. 이번에는 datanode05에서 피어 Tserver 로그를 확인했습니다. 같은 날 02:47 이전에 다음과 같은 경고 메시지가 많이 있음을 알 수 있습니다.
"W0924 02:43:43.869937 18241 transaction_tracker.cc:156] transaction on tablet de58f99d829b43f88f3c527de4009904 rejected due to memory pressure: the memory usage of this transaction (10493974) plus the current consumption (62963844) exceeds the transaction memory limit (67108864) or the limit of an ancestral memory tracker. [suppressed 18 similar messages]"
3. 위의 경고의 결과로 트랜잭션 커밋이 지연되는 것을 볼 수 있습니다.
W0924 02:45:36.688170 13986 tablet_replica.cc:862] Time spent Committing in-flights took a long time.: real 15.343s user 0.000s sys 0.001s
4. Tablet_transaction_memory_limit_mb의 기본값을 초과하여 태블릿 선택에 실패했습니다.
https://kudu.apache.org/docs/configuration_reference.html#kudu-tserver_tablet_transaction_memory_limit_mb
<조치내용>
Tablet_transaction_memory_limit_mb의 값을 64M에서 128M으로 늘리고 Tablet Sever들을 모두 restart하고 결과를 모니터링 하면 됩니다.
CM ->Kudu -> Configuration -> Tablet Server Advanced Configuration Snippet (Safety Valve) for gflagfile
--tablet_transaction_memory_limit_mb =128