멀티 스테이지 쿼리 엔진용 지속 스토리지
멀티 스테이지 쿼리 엔진용 지속 스토리지 (Durable storage for the multi-stage query engine)
딥 스토리지 쿼리와 SQL 기반 인제스트의 신뢰성을 높이기 위해 지속 스토리지(durable storage)를 사용하는 방법을 설명하는 문서예요. 설정 방법과 쿼리 컨텍스트 파라미터 사용법을 다루어요.
출처: 문서
본문
지속 스토리지를 사용하면 딥 스토리지에서의 쿼리와 SQL 기반 인제스트의 성능을 개선할 수 있어요.
info: S3, Google Storage, Azure Blob Storage가 지속 스토리지 위치로 지원돼요.
딥 스토리지 쿼리용 지속 스토리지는 딥 스토리지 쿼리의 결과를 쓸 수 있는 위치를 제공해요. SQL 기반 인제스트용 지속 스토리지는 중간 파일을 임시로 보관하는 데 사용되어 신뢰성을 높일 수 있어요.
지속 스토리지를 활성화하면 데이터 정렬 중 생성되는 중간 파일같은 임시 파일을 저장하기 위해 로컬 디스크도 함께 사용할 수 있게 돼요. 태스크는 "Task 스토리지 크기 구성" 문서에 설명된 것처럼 임시 사용을 위해 설정된 값을 사용해요. 설정된 한도가 너무 낮으면 Druid는 NotEnoughTemporaryStorageFault 오류를 던질 수 있어요.
지속 스토리지 활성화 (Enable durable storage)
지속 스토리지를 활성화하려면 다음 공통 서비스 프로퍼티를 설정해야 해요.
S3의 경우:
druid.msq.intermediate.storage.enable=true
druid.msq.intermediate.storage.type=s3
# Remote storage location
druid.msq.intermediate.storage.bucket=YOUR_BUCKET
druid.msq.intermediate.storage.prefix=YOUR_PREFIX
# Local temporary directory (on each Druid server)
druid.msq.intermediate.storage.tempDir=/path/to/your/temp/dir
Google Storage의 경우:
druid.msq.intermediate.storage.enable=true
druid.msq.intermediate.storage.type=google
# Remote storage location
druid.msq.intermediate.storage.bucket=YOUR_BUCKET
druid.msq.intermediate.storage.prefix=YOUR_PREFIX
# Local temporary directory (on each Druid server)
druid.msq.intermediate.storage.tempDir=/path/to/your/temp/dir
Azure Blob Storage의 경우:
druid.msq.intermediate.storage.enable=true
druid.msq.intermediate.storage.type=azure
# Remote storage location
druid.msq.intermediate.storage.container=YOUR_CONTAINER
druid.msq.intermediate.storage.prefix=YOUR_PREFIX
# Local temporary directory (on each Druid server)
druid.msq.intermediate.storage.tempDir=/path/to/your/temp/dir
이 설정들과 지속 스토리지 관련 추가 설정에 대한 자세한 내용은 지속 스토리지 설정 문서를 참고하세요.
SQL 기반 인제스트 쿼리에 지속 스토리지 사용 (Use durable storage for SQL-based ingestion queries)
쿼리를 실행할 때 컨텍스트 파라미터 durableShuffleStorage를 포함시키고 true로 설정하세요.
워커에 대한 내결함성(fault tolerance)을 사용하려는 쿼리의 경우 faultTolerance를 true로 설정하면 durableShuffleStorage도 자동으로 true로 설정돼요.
딥 스토리지 쿼리에 지속 스토리지 사용 (Use durable storage for queries from deep storage)
예상하는 결과의 크기에 따라, 딥 스토리지 쿼리의 최종 결과를 지속 스토리지에 저장하는 것이 필요할 수 있어요.
기본적으로 Druid는 딥 스토리지 쿼리의 최종 결과를 태스크 리포트에 저장해요. 일반적으로 작은 결과 집합에는 괜찮지만, 큰 결과 집합에서는 타임아웃이 발생할 수 있어요.
쿼리를 실행할 때 컨텍스트 파라미터 selectDestination을 포함시키고 durableStorage로 설정하세요.
"context":{
...
"selectDestination": "durableStorage"
}
더 나은 신뢰성을 위해 중간 결과도 지속 스토리지에 쓸 수 있어요(durableShuffleStorage). 워커가 중간 결과를 쓰는 위치는 최종 결과가 저장되는 위치와 달라요. 즉, 중간 결과를 지속 스토리지에 쓰지 않더라도 결과용 지속 스토리지를 활성화할 수 있어요.
딥 스토리지 쿼리 결과를 지속 스토리지에 쓴다면, 태스크가 메타데이터 저장소에서 제거될 때 결과도 정리돼요.
지속 스토리지 정리 (Durable storage clean up)
태스크가 임시 파일을 정리하지 못한 경우 지속 스토리지가 가득 차는 것을 막기 위해, 실행 중인 컨트롤러 태스크가 없는 디렉터리를 정리하도록 주기적인 클리너(cleaner)를 예약할 수 있어요. 이 클리너는 스토리지 커넥터를 사용해 지속 스토리지에 대해 작업해요. 지속 스토리지 위치는 클러스터의 MSQ 태스크 출력만 저장하는 데 사용해야 해요. 위치에 다른 파일이나 디렉터리가 있다면 그것들도 함께 정리돼요.
클리너 구성에는 druid.msq.intermediate.storage.cleaner.enabled와 druid.msq.intermediate.storage.cleaner.delaySeconds를 사용해요. 자세한 내용은 지속 스토리지 설정 문서를 참고하세요.
쿼리 결과를 지속 스토리지에 쓰도록 선택하면, 태스크가 메타데이터 저장소에서 제거될 때 결과가 정리된다는 점을 유의하세요.
더 알아보기 (Learn more)
- MSQ 참조 문서에서 지속 스토리지 관련 설정 전체를 확인해 보세요.
- 태스크(Task) 문서에서 태스크 스토리지 크기 구성 방법을 살펴보아요.
- HTTP 압축 등 운영 문서에서 기타 서버 설정도 함께 확인해 보아요.