쿼리 처리 복원력 향상
쿼리 처리 복원력 향상 (Improve query processing resilience)
Trino를 쿼리 처리 중 발생하는 실패에 더 탄력적으로 동작하게 구성할 수 있어요. 내결함성 실행(fault-tolerant execution)을 활성화하면 워커 노드 중단으로 쿼리가 실패하는 일 없이, 배치 작업 같은 더 큰 쿼리를 처리할 수 있어요.
출처: 문서
본문
내결함성 실행을 활성화하면 Trino가 쿼리 처리 중 발생하는 실패에 더 탄력적으로 대응하도록 구성할 수 있어요. 이렇게 하면 배치 작업 같은 더 큰 쿼리를 워커 노드 중단으로 쿼리가 실패하는 일 없이 처리할 수 있어요.
구성되면 Trino 클러스터는 쿼리 처리 중 워커들이 사용하는 데이터를 버퍼링해요. 네트워크 장애나 자원 부족 등 어떤 이유로 워커 노드에서 처리가 실패하면, 코디네이터(coordinator)가 실패한 작업 조각을 다른 워커에서 재스케줄링해요. 이로써 버퍼링된 데이터를 사용해 쿼리 처리를 계속할 수 있어요.
아키텍처 (Architecture)
코디네이터 노드는 구성된 exchange manager 서비스를 사용해, 쿼리 처리 중 데이터를 S3 객체 스토리지 버킷 같은 외부 위치에 버퍼링해요. 워커 노드는 쿼리 작업을 실행하면서 버퍼로 데이터를 보내요.
모범 사례와 고려 사항 (Best practices and considerations)
내결함성 클러스터는 큰 배치 쿼리에 가장 적합해요. 사용자가 내결함성 클러스터에서 짧게 실행되는 쿼리를 대량으로 발행하면 지연(latency) 같은 현상을 겪을 수 있어요. 그래서 배치 작업을 처리하는 전용 내결함성 클러스터를, 더 높은 쿼리 볼륨을 위한 클러스터와 분리해서 운영하는 것이 권장돼요.
다음 커넥터를 사용하는 카탈로그는 읽기·쓰기 작업 모두에서 내결함성 실행을 지원해요.
- Delta Lake 커넥터
- Hive 커넥터
- Iceberg 커넥터
- MySQL 커넥터
- PostgreSQL 커넥터
- SQL Server 커넥터
다른 커넥터를 사용하는 카탈로그는 읽기 작업의 내결함성 실행만 지원해요. 클러스터에서 내결함성 실행이 활성화되면, 그 작업의 내결함성 실행을 지원하지 않는 카탈로그에서 쓰기 작업은 실패해요.
exchange manager는 교환 스토리지(exchange storage)에 많은 양의 데이터를 보낼 수 있어 그 스토리지에 높은 I/O 부하가 걸릴 수 있어요. exchange manager가 사용할 여러 스토리지 위치를 구성해 I/O 부하를 분산시킬 수 있어요.
구성 (Configuration)
다음 단계는 S3 기반 교환(exchange)으로 Trino 클러스터를 내결함성 실행으로 구성하는 방법을 설명해요.
-
교환 스토리지로 사용할 S3 버킷을 설정해요. 이 예시에서는 AWS S3 버킷을 사용하지만, 다른 스토리지 옵션도 레퍼런스 문서에 설명돼 있어요. 교환 스토리지에 여러 S3 버킷을 사용할 수 있어요.
AWS의 각 버킷에 대해 다음 정보를 수집해요:
- 버킷의 S3 URI 위치(예:
s3://exchange-spooling-bucket) - 버킷이 위치한 리전(예:
us-west-1) - 버킷의 AWS 액세스 키와 시크릿 키
- 버킷의 S3 URI 위치(예:
-
Kubernetes 배포의 경우, 수집한 S3 버킷 정보를 사용해 Helm 차트의
server.exchangeManager와additionalExchangeManagerProperties섹션에 다음 exchange manager 구성을 추가해요.server: exchangeManager: name=filesystem base-directories=s3://exchange-spooling-bucket-1,s3://exchange-spooling-bucket-2 additionalExchangeManagerProperties: exchange.s3.region=us-west-1 exchange.s3.aws-access-key=example-access-key exchange.s3.aws-secret-key=example-secret-keyKubernetes가 아닌 설치에서는 같은 프로퍼티를 코디네이터와 모든 워커 노드의
exchange-manager.properties구성 파일에 정의해야 해요. -
Helm 차트의
additionalConfigProperties:섹션에 내결함성 실행을 위한 다음 구성을 추가해요.additionalConfigProperties: retry-policy=TASKKubernetes가 아닌 설치에서는 같은 프로퍼티를 코디네이터와 모든 워커 노드의
config.properties파일에 정의해야 해요. -
Trino 인스턴스를 다시 배포하거나, Kubernetes가 아닌 설치에서는 클러스터를 재시작해요.
이제 Trino 클러스터가 내결함성 쿼리 실행으로 구성됐어요. 클러스터에서 실행된 쿼리가 이전에는 쿼리 처리 중단으로 실패했을 상황에서도, 내결함성 실행이 쿼리 처리를 재개해 쿼리가 성공적으로 실행되도록 해요.
다음 단계 (Next steps)
내결함성 실행에 대한 더 자세한 내용(exchange manager가 필요 없는 단순 쿼리 재시도, 고급 구성 작업 포함)은 레퍼런스 문서를 참고하세요.
더 알아보기 (Learn more)
내결함성 실행으로 쿼리 복원력을 높일 수 있어요. 이어서 Trino에 연결하는 클라이언트(Clients)에 대해 살펴보면 좋아요.