클라이언트 프로토콜
클라이언트 프로토콜 (Client protocol)
Trino 클라이언트 프로토콜은 클라이언트가 SQL 쿼리를 제출하고 결과를 받을 수 있게 하는 HTTP 기반 프로토콜이에요.
출처: 문서
본문
이 프로토콜은 Trino 클러스터의 코디네이터에 대한 일련의 REST API 호출이에요. 다음은 높은 수준의 개요예요:
- 클라이언트가 SQL 쿼리 텍스트를 Trino 클러스터의 코디네이터에 제출해요.
- 코디네이터가 쿼리 처리를 시작해요.
- 코디네이터가 결과 집합과 코디네이터의 URI
nextUri를 반환해요. - 클라이언트가 결과 집합을 받고 URI
nextUri에서 더 많은 데이터를 요청하는 다른 요청을 시작해요. - 코디네이터가 쿼리 처리를 계속하고 새 URI로 추가 데이터를 반환해요.
- 모든 결과 집합 데이터가 클라이언트에 반환되거나 클라이언트가 더 이상 데이터를 요청하지 않을 때까지 클라이언트와 코디네이터가 4단계와 5단계를 계속해요.
- 클라이언트가 결과 집합을 가져오지 못하면 코디네이터는 추가 처리를 시작하지 않고 쿼리를 실패시키며
USER_CANCELED오류를 반환해요. - 쿼리가 완료되면 최종 응답은
FINISHED예요.
클라이언트 프로토콜은 두 가지 모드를 지원해요. 클라이언트의 최적 처리량을 위해 스풀링 프로토콜을 구성하세요.
스풀링 프로토콜 (Spooling protocol)
스풀링 프로토콜은 오브젝트 스토리지 위치를 사용해 클라이언트가 검색할 데이터를 저장해요. 코디네이터와 모든 워커가 결과 집합 데이터를 스토리지에 병렬로 쓸 수 있어요. 코디네이터는 오브젝트 스토리지의 개별 데이터 세그먼트 URL만 클러스터에 제공해요. 스풀링 프로토콜은 데이터 압축도 허용해요.
오브젝트 스토리지의 데이터는 클라이언트가 다운로드한 후 자동으로 제거돼요.
스풀링 프로토콜은 직접 프로토콜과 비교해 다음 특성이 있어요.
- 더 많은 데이터를 반환하는 쿼리에서 특히 데이터 전송 처리량이 더 높아요.
- 데이터를 오브젝트 스토리지에서 읽으므로 클라이언트가 모든 데이터를 가져오는 것과 무관하게 클러스터에서 쿼리 처리가 더 빨리 완료돼요.
- Trino 클러스터에 오브젝트 스토리지와 구성이 필요해요.
- 코디네이터의 CPU와 I/O 부하를 줄여줘요.
- 스풀링 프로토콜을 사용해도 이점이 없는 쿼리는 직접 프로토콜로 자동 폴백해요.
- 스풀링 프로토콜을 지원하고 그 사용을 적극적으로 요청하는 최신 클라이언트 드라이버나 클라이언트 애플리케이션이 필요해요.
- 클라이언트가 오브젝트 스토리지에 접근할 수 있어야 해요.
- 스풀링 프로토콜을 지원하지 않는 이전 클라이언트 드라이버·애플리케이션은 직접 프로토콜로 자동 폴백해서 동작해요.
설정 (Configuration)
Trino 클러스터에서 스풀링 프로토콜 지원을 구성하려면 다음 단계가 필요해요:
- 설정 속성에서 스풀링 프로토콜 속성을 사용해 스풀링 프로토콜 사용을 구성하세요.
- Trino 클러스터와 클라이언트가 접근할 수 있는 적절한 오브젝트 스토리지를 선택하세요.
- 오브젝트 스토리지에 어떤 오브젝트 스토리지 카탈로그나 다른 Trino 클러스터의 스풀링과 공유되지 않는 위치를 만드세요.
- 스풀링 파일 시스템 속성을 사용해
etc/spooling-manager.properties에서 오브젝트 스토리지를 구성하세요.
설정 속성의 최소 구성:
protocol.spooling.enabled=true
protocol.spooling.shared-secret-key=jxTKysfCBuMZtFqUf8UJDQ1w9ez8rynEJsJqgJf66u0=
etc/spooling-manager.properties에서 오브젝트 스토리지 구성:
spooling-manager.name=filesystem
fs.s3.enabled=true
fs.location=s3://spooling
s3.endpoint=http://minio:9080/
s3.region=fake-value
s3.aws-access-key=minio-access-key
s3.aws-secret-key=minio-secret-key
s3.path-style-access=true
더 알아보기 (Learn more)
스풀링 프로토콜 속성 값이 궁금하다면 클라이언트 프로토콜 속성 문서를 이어서 읽어 보세요.