본문 바로가기

Big DATA/Impala

Impala Timeout

Setting Timeout Periods for Daemons, Queries, and Sessions

CDH 클러스터의 상태에 따라 다양한 timeout 옵션의 값을 조정할 필요가 있습니다. Impala 쿼리가 평소보다 느리지만 지속적으로 처리되는 환경에서는 timeout 옵션에 의해 쿼리 수행이 취소되지 않도록 조치하는 것이 바람직하며, 동작하는 쿼리가 장시간동안 hang 상태로 유지되거나 Connection이 idle 상태로 오랫동안 유지되는 경우 timeout 값을 짧게 설정하는 것이 더 효율적일 수 있습니다.

Increasing the Statestore Timeout

예를 들어 수백 개의 데이터베이스, 수만 개의 테이블등과 같이 대량의 Impala 스키마가 있는 환경에서, Impala 서비스를 실행 시점에 Catalog 서비스가 Impala Statestore를 통해 모든 Impala 노드에게 대량의 메타데이터 장 시간동안 동기화하는 과정에서 timeout 에러가 발생될 수 있습니다. 실행 시점에 timeout 에러 상황을 개선하기 위해서, statestore timeout 값(Default: 10초)을 늘리십시오. 

  • StateStore 서비스용 "statestore_subscriber_timeout_seconds" 옵션의 값을 Startup 옵션으로 지정.

  • 시작 시점에 다음과 같은 에러 메시지가 출력하는 경우, 위의 옵션을 지정합니다: 

Connection with state-store lost
Trying to re-register with state-store

Setting the Idle Query and Idle Session Timeouts for impalad 

오랜 시간동안 실행되는 쿼리를 유지하거나 idle session을 정리하기 위해서 개별 쿼리 수준 또는 전체 세션에 대한 Timeout Interval을 설정할 수 있습니다.

다음과 같은impalad 데몬용 실행 옵션을 지정하십시오:

  • --idle_query_timeout 옵션: Idle 쿼리가 취소하기 위한 시간(초)를 지정합니다. 이는 쿼리 결과를 가져왔지만 close되지 않은 쿼리이거나 클라이언트에서 쿼리 수행 결과를 받은 후 Connection을 close하지 않은 상태일 수도 있습니다. 이와 같은 현상은 Impala-shell 보다는 JDBC나 ODBC를 사용하는 클라이언트 프로그램에서 발생할 확률이 높습니다. 쿼리가 취소되는 경우 클라이언트는 결과를 회수할 수 없습니다.
  • --idle_session_timeout 옵션: Idle 세션을 만료하기 위한 시간(초)를 지정합니다. 세션이 idle 상태이고 해당 세션에서 신규 쿼리가 실행되지 않는 상태에 대한 Connection을 정리하는 용도로 활용됩니다. 세션이 만료되면, 해당 세션에 새로운 쿼리를 요청할 수 없습니다. idle 세션의 정확한 상태는 세션이 open되어 있는 상태지만, 해당 세션에서는 단지 close 요청만을 수행할 수 있음을 의미합니다. 기본 설정 값이 0이며 이 값의 의미는 세션이 만료되지 않음을 의미합니다.

"QUERY_TIMEOUT_S " 쿼리 옵션을 사용하여 idle query timeout을 설정할 수 있습니다. 쿼리 옵션으로 지정된 값이 실행 옵션인 "--idle_query_timeout" 보다 우선으로 적용됩니다.


QUERY_TIMEOUT_S Query Option (CDH 5.2 or higher only)

QUERY_TIMEOUT_S(단위:초) 쿼리 옵션은 세션용 Idle query timeout 값을 의미합니다. 이 옵션에 지정된 시간보다 오랫동안 idle 상태로 유지되는 쿼리는 자동으로 취소됩니다. 실행 옵션으로 "--idle_query_timeout" 가 설정되어 있는 환경에서는 "QUERY_TIMEOUT_S " 옵션의 값이 이 실행 옵션의 값보다 같거나 작게 설정해야 합니다.  

Syntax:

SET QUERY_TIMEOUT_S=seconds;

Type: numeric

Default: 0 (no timeout if --idle_query_timeout not in effect; otherwise, use --idle_query_timeout value)


Setting Timeout and Retries for Thrift Connections to the Backend Client

백앤드 클라이언트에 대한 Impala Connection은 네트워크에 과부하가 걸리는 경우에 실패되어 질 수 있습니다. 일시적인 네트워크 문제로 인한 쿼리 실패를 방지하기 위해서는 다음 옵션을 사용하여 Thrift 연결 재시도 횟수를 구성할 수 있습니다:

  • --backend_client_connection_num_retries: 이 옵션은 첫 번째 연결 시도가 실패된 경우, Impala가 연결을 재시도하는 횟수를 의미합니다. 기본 값으로 Impalad는 연결 실패의 결과를 보고하기 전에 3번의 재시도를 수행합니다.

백-엔드 클라이언트로 부터 데이터 송/수신에 대한 타임아웃을 구성할 수 있습니다. 쿼리에 행이발생한 경우, Impala는 무한정 응답을 대기하는 것이 아니라 구성된 시간 이후 연결을 강제종료합니다. 

  • --backend_client_rpc_timeout_ms: Impala가 연결을 종료하고 실패를 보고하기 전에 백앤드 클라이언트로 부터 응답을 대기하는 시간입니다. 기본 값으로는 300000 밀리세컨드 즉, 5분 동안 대기합니다.


참고자료:

  • https://www.cloudera.com/documentation/enterprise/5-8-x/topics/impala_timeouts.html#impalad_timeout
  • https://www.cloudera.com/documentation/enterprise/5-8-x/topics/impala_query_timeout_s.html#query_timeout_s