노드 스케줄러 속성
노드 스케줄러 속성 (Node scheduler properties)
Trino가 워커 노드에 스플릿(split)을 어떻게 배치할지 결정하는 노드 스케줄러 관련 속성들이에요.
출처: 문서
본문
node-scheduler.include-coordinator
- 타입: boolean
- 기본값:
true
코디네이터에도 작업을 스케줄링해서 한 머신이 코디네이터와 워커 역할을 동시에 하도록 허용할지 여부예요. 대형 클러스터에서는 코디네이터에서 작업을 처리하면 그 머신의 리소스를 쿼리 실행을 스케줄링·관리·모니터링하는 중요한 코디네이터 태스크에 쓸 수 없게 되어 쿼리 성능에 부정적인 영향을 줄 수 있어요.
스플릿 (Splits)
node-scheduler.max-splits-per-node
- 타입: integer
- 기본값:
256
모든 스플릿이 표준 스플릿 가중치(weight)를 가진다고 가정할 때, 각 워커 노드에서 실행될 수 있는 총 스플릿 수의 목표 값이에요.
쿼리를 대량 배치로 제출할 때(예: 주기적으로 대규모 리포트 그룹을 실행) 또는 많은 스플릿을 빨리 완료하지만 스플릿 스케줄러에 그걸 표현할 가중치 값을 지원하지 않는 커넥터라면 값을 높이는 것이 권장돼요. 값을 올리면 워커가 충분한 스플릿을 갖춰 완전히 활용되도록 보장해 쿼리 지연 시간이 개선될 수 있어요.
커넥터가 가중치 기반 스플릿 스케줄링을 지원할 때는 개별 스플릿의 가중치에 따라 할당되는 스플릿 수가 달라져요. 스플릿이 작으면 그만큼 각 워커에 더 많은 스플릿이 할당되어 보정돼요.
이 값을 너무 높게 설정하면 메모리를 낭비하고 스플릿이 워커 간에 균형을 이루지 못해 성능이 낮아질 수 있어요. 이상적으로는 항상 처리 대기 중인 스플릿이 최소 하나는 있도록 설정하되, 그 이상 높이지는 않는 게 좋아요.
node-scheduler.min-pending-splits-per-task
- 타입: integer
- 기본값:
16
태스크가 처리할 남은 스플릿이 있을 때 단일 태스크에 대해 (노드가 이미 총 스플릿 수 한도에 있더라도) 표준 스플릿 가중치로 스케줄링되는 것이 보장되는 미처리(outstanding) 스플릿의 최소 수예요. 스테이지당 최소 스플릿 수를 허용하는 것은 스타베이션(starvation)과 데드락을 막는 데 필요해요.
이 값은 max-adjusted-pending-splits-per-task와 node-scheduler.max-splits-per-node보다 작거나 같아야 하며, 보통 같은 이유로 증가시키고 너무 높게 설정하면 비슷한 단점이 있어요.
node-scheduler.max-adjusted-pending-splits-per-task
- 타입: integer
- 기본값:
2000
태스크가 처리할 남은 스플릿이 있을 때 단일 태스크에 대해 (노드가 이미 총 스플릿 수 한도에 있더라도) 표준 스플릿 가중치로 스케줄링되는 것이 보장되는 미처리 스플릿의 최대 수예요. 스플릿 큐 크기는 스플릿 스케줄링 중 동적으로 조정되며 node-scheduler.max-adjusted-pending-splits-per-task를 초과할 수 없어요. 노드가 스플릿을 받는 속도보다 빨리 처리하면 태스크당 스플릿 큐 크기는 위로 조정돼요.
보통 node-scheduler.max-splits-per-node와 같은 이유로 증가시키며, 너무 높게 설정해도 단점은 더 작아요.
참고 (Note)
uniform스케줄러 정책에서만 적용돼요.
node-scheduler.max-unacknowledged-splits-per-task
- 타입: integer
- 기본값:
2000
코디네이터에 큐에 있지만 아직 보내지 않았거나 워커가 받았음을 확인(acknowledge)하지 않은 스플릿의 최대 수예요. 이 제한은 node-scheduler.max-splits-per-node나 node-scheduler.max-adjusted-pending-splits-per-task 같은 다른 기존 스플릿 한도 구성보다 우선하며, 쿼리를 실패시킬 수 있는 큰 태스크 업데이트 요청을 방지하도록 설계됐어요.
node-scheduler.min-candidates
- 타입: integer
- 최솟값:
1 - 기본값:
10
스플릿의 대상 노드를 고를 때 노드 스케줄러가 평가하는 후보 노드의 최소 수예요. 이 값을 너무 낮게 설정하면 스플릿이 모든 워커 노드에 제대로 균형을 이루지 못할 수 있어요. 너무 높게 설정하면 쿼리 지연 시간이 늘고 코디네이터의 CPU 사용이 증가할 수 있어요.
node-scheduler.policy
- 타입: string
- 허용 값:
uniform,topology - 기본값:
uniform
스플릿을 스케줄링할 때 사용할 노드 스케줄러 정책을 설정해요. uniform은 모든 호스트에 걸쳐 균일한 분포를 유지하면서 데이터가 있는 호스트에 스플릿을 스케줄링하려고 시도해요. topology는 노드와 스플릿 사이의 토폴로지 거리에 따라 스플릿을 스케줄링하려고 해요. 분산 스토리지가 Trino 워커와 같은 노드에서 실행되는 클러스터에서는 uniform을 사용하는 것이 권장돼요.
네트워크 토폴로지 (Network topology)
node-scheduler.network-topology.segments
- 타입: string
- 기본값:
machine
네트워크 위치의 각 세그먼트가 무엇을 의미하는지 설명하는 쉼표로 구분된 문자열이에요. 예를 들어 region,rack,machine으로 설정하면 네트워크 위치가 세 개의 세그먼트를 포함한다는 뜻이에요.
node-scheduler.network-topology.type
- 타입: string
- 허용 값:
flat,file,subnet - 기본값:
flat
네트워크 토폴로지 유형을 설정해요. 이 옵션을 사용하려면 node-scheduler.policy가 topology로 설정되어 있어야 해요.
flat: 토폴로지에 세그먼트가 하나뿐이고, 각 머신마다 값 하나가 있어요.file: 다음 섹션에서 설명하는node-scheduler.network-topology.file와node-scheduler.network-topology.refresh-period속성을 사용해 파일에서 토폴로지를 로드해요.subnet: 다음 섹션에서 설명하는node-scheduler.network-topology.subnet.cidr-prefix-lengths와node-scheduler.network-topology.subnet.ip-address-protocol속성을 통해 제공된 서브넷 구성에 기반해 토폴로지를 유도해요.
파일 기반 네트워크 토폴로지 (File based network topology)
node-scheduler.network-topology.file
- 타입: string
파일에서 네트워크 토폴로지를 로드해요. 이 옵션을 사용하려면 node-scheduler.network-topology.type이 file로 설정되어 있어야 해요. 각 줄에는 호스트 이름과 네트워크 위치 사이의 매핑이 공백으로 구분되어 들어 있어요. 네트워크 위치는 앞에 /로 시작해야 하고 세그먼트는 /로 구분돼요.
192.168.0.1 /region1/rack1/machine1
192.168.0.2 /region1/rack1/machine2
hdfs01.example.com /region2/rack2/machine3
이렇게 하면 네트워크상 위치를 반영해서 스플릿을 가장 가까운 노드에 배치할 수 있어요.
더 알아보기 (Learn more)
스플릿과 워커 리소스 관리 전반이 궁금하다면 리소스 관리 속성(Resource management properties) 문서를 이어서 읽어 보세요.