탄력적 컴퓨팅 노드
탄력적 컴퓨팅 노드는 특수한 유형의 BE 노드로, 데이터 저장 기능 없이 데이터 연산만 담당합니다. 따라서 컴퓨팅 노드는 무상태 BE 노드로 볼 수 있으며, 쉽게 추가하거나 제거할 수 있습니다.
레이크하우스 데이터 분석 시나리오에서는 탄력적 컴퓨팅 노드를 사용하여 Hive, Iceberg, Hudi, Paimon, JDBC 등의 외부 데이터 소스를 쿼리할 수 있습니다. Doris는 외부 데이터 소스의 데이터 저장을 담당하지 않으므로, 탄력적 컴퓨팅 노드를 사용하면 외부 데이터 소스에 대한 연산 성능을 손쉽게 확장할 수 있습니다. 또한 컴퓨팅 노드에 캐시 디렉터리를 구성하여 외부 데이터 소스에서 자주 사용하는 데이터를 캐시하면 데이터 읽기 속도를 더욱 높일 수 있습니다.
탄력적 컴퓨팅 노드는 스토리지·컴퓨팅 통합 모드와 스토리지·컴퓨팅 분리 모드에서 모두 사용할 수 있습니다. 주로 데이터 레이크(외부 테이블) 쿼리의 컴퓨팅 리소스를 내부 테이블 쿼리의 컴퓨팅 리소스와 격리하는 데 사용합니다.
- 스토리지·컴퓨팅 통합 모드: BE 노드의 기본 유형은
mix이며, 저장과 연산을 모두 담당합니다. 외부 테이블 쿼리 전용으로computation유형의 BE 노드 그룹을 별도로 배포하면 내부 테이블 데이터 저장에 영향을 주지 않고 노드 수를 탄력적으로 늘리거나 줄일 수 있습니다. - 스토리지·컴퓨팅 분리 모드: BE 노드는 이미 무상태이므로 노드 수를 쉽게 늘리거나 줄일 수 있습니다. 이 모드에서도 일부 BE 노드를
computation유형으로 설정하여 데이터 레이크(외부 테이블) 쿼리 전용으로 사용하면, 내부 테이블 쿼리를 처리하는 BE 노드와 워크로드를 격리할 수 있습니다.
computation유형으로 설정된 BE 노드는 데이터 레이크(외부 테이블) 쿼리만 처리하며, 내부 테이블 쿼리 요청은 전혀 처리하지 않습니다. 클러스터의 모든 BE 노드를computation으로 설정하면 내부 테이블 쿼리가has no queryable replicas오류와 함께 실패합니다. 내부 테이블 쿼리를 처리할 수 있도록 클러스터에mix유형의 BE 노드를 하나 이상 유지해야 합니다.- 스토리지·컴퓨팅 분리 모드에서는
NodeRole열이SHOW BACKENDS에서 항상mix로 표시되며, BE 구성 파일의be_node_role설정과는 관계가 없습니다. 이는 알려진 표시 동작이며, 노드의 실제 역할은 여전히be_node_role값이be.conf에 어떻게 설정되어 있는지에 따라 결정됩니다.
컴퓨팅 노드 사용 방법
BE 노드 유형
스토리지·컴퓨팅 통합 모드에서 BE 노드는 두 유형으로 나뉩니다.
-
Mix
혼합 노드입니다. BE 노드의 기본 유형으로, 연산과 Doris 내부 테이블 데이터 저장을 모두 담당합니다.
-
Computation
탄력적 컴퓨팅 노드입니다. 데이터 저장은 담당하지 않고 데이터 연산만 수행합니다.
컴퓨팅 노드 추가
BE의 be.conf 구성 파일에 다음 설정을 추가합니다.
be_node_role=computation
이후 BE 노드를 시작하면 Computation 유형으로 실행됩니다.
그런 다음 Doris에 연결하여 다음을 실행합니다.
ALTER SYSTEM ADD BACKEND
이 명령으로 해당 BE 노드를 추가합니다. 추가에 성공하면 노드 유형이 computation으로 표시됩니다. 이 정보는 NodeRole 열에 표시되며, SHOW BACKENDS로 확인할 수 있습니다.
컴퓨팅 노드 사용
컴퓨팅 노드를 활성화하고 동작을 제어하려면 FE 구성 파일인 fe.conf에 다음 매개변수를 설정해야 합니다.
| 매개변수 이름 | 설명 |
|---|---|
prefer_compute_node_for_external_table | 기본값은 false입니다. true로 설정하면 외부 테이블 쿼리를 컴퓨팅 노드에 우선 할당합니다. false이면 외부 테이블 쿼리를 모든 BE 노드에 할당할 수 있습니다. 클러스터에 컴퓨팅 노드가 없으면 이 매개변수는 아무런 영향을 주지 않습니다. |
min_backend_num_for_external_table | prefer_compute_node_for_external_table이 true일 때만 적용됩니다. 클러스터의 컴퓨팅 노드 수가 이 값보다 적으면 외부 테이블 쿼리에 일부 혼합 노드를 추가로 할당하여 전체 노드 수가 이 값에 도달하도록 시도합니다. 클러스터의 컴퓨팅 노드 수가 이 값보다 많으면 외부 테이블 쿼리를 컴퓨팅 노드에만 할당합니다. 2.0 버전까지는 이 매개변수의 기본값이 3이었습니다. 2.1 버전 이후에는 기본값이 -1이며, 현재 존재하는 컴퓨팅 노드 수만큼만 사용한다는 의미입니다. |
min_backend_num_for_external_table에 대한 추가 설명:
클러스터에 컴퓨팅 노드 3개와 혼합 노드 5개가 있다고 가정합니다.
min_backend_num_for_external_table을 3 이하로 설정하면 외부 테이블 쿼리는 컴퓨팅 노드 3개만 사용합니다. 3보다 큰 값, 예를 들어 6으로 설정하면 외부 테이블 쿼리는 컴퓨팅 노드 3개에 혼합 노드 3개를 추가하여 연산을 수행합니다.
이 매개변수는 주로 외부 테이블 연산에 참여할 BE 노드의 최소 수를 지정하는 데 사용되며, 컴퓨팅 노드를 우선 선택합니다. 이 값을 높이면 컴퓨팅 노드를 포함한 더 많은 BE 노드가 외부 테이블 쿼리 처리에 참여할 수 있습니다. 값을 낮추면 외부 테이블 쿼리 처리에 참여하는 BE 노드 수를 제한할 수 있습니다.
참고:
2.1 버전 이후에는
min_backend_num_for_external_table을-1로 설정할 수 있습니다. 이전 버전에서는 이 매개변수를 양수로 설정해야 합니다. 이 매개변수는prefer_compute_node_for_external_table = true일 때만 적용됩니다.
min_backend_num_for_external_table값이 전체 BE 노드 수보다 크면 최대 전체 BE 노드가 선택됩니다.위 매개변수는
ADMIN SET FRONTEND CONFIG명령으로 동적으로 변경할 수 있으며, FE 노드를 다시 시작할 필요가 없습니다. 모든 FE 노드에 설정해야 합니다. 또는fe.conf에 설정을 추가하고 FE 노드를 다시 시작할 수도 있습니다.
모범 사례
페더레이션 쿼리의 리소스 격리 및 탄력적 확장
페더레이션 쿼리 시나리오에서는 외부 테이블 데이터를 쿼리하기 위한 전용 컴퓨팅 노드 그룹을 배포할 수 있습니다. 이를 통해 외부 테이블 쿼리 부하(예: Hive에 대한 대규모 분석)를 내부 테이블 쿼리 부하(예: 지연 시간이 짧은 고속 데이터 분석)와 격리할 수 있습니다.
또한 컴퓨팅 노드는 무상태 BE 노드이므로 노드 수를 쉽게 늘리거나 줄일 수 있습니다. 예를 들어 k8s를 사용하여 탄력적 컴퓨팅 노드 클러스터를 배포하면, 업무량이 많은 시간대에는 더 많은 컴퓨팅 노드를 데이터 레이크 분석에 사용하고 업무량이 적은 시간대에는 신속하게 노드 수를 줄여 비용을 절감할 수 있습니다.
자주 묻는 질문
- 혼합 노드와 컴퓨팅 노드를 서로 전환할 수 있나요?
컴퓨팅 노드는 혼합 노드로 전환할 수 있습니다. 그러나 혼합 노드는 컴퓨팅 노드로 전환할 수 없습니다.
- 컴퓨팅 노드에도 데이터 저장 디렉터리를 설정해야 하나요?
예. 컴퓨팅 노드의 데이터 저장 디렉터리에는 사용자 데이터가 저장되지 않으며, cluster_id와 같은 BE 노드 자체의 정보 파일과 실행 중 생성되는 일부 임시 파일만 저장됩니다.
컴퓨팅 노드의 저장 디렉터리에는 소량의 디스크 공간(MB 수준)만 필요하며, 노드와 함께 언제든지 삭제해도 사용자 데이터에 영향을 주지 않습니다.
- 컴퓨팅 노드와 혼합 노드에 파일 캐시 디렉터리를 설정할 수 있나요?
파일 캐시는 최근에 접근한 원격 저장소 시스템(HDFS 또는 객체 스토리지)의 데이터 파일을 캐시하여 동일한 데이터에 대한 후속 쿼리 속도를 높입니다.
컴퓨팅 노드와 혼합 노드 모두 파일 캐시 디렉터리를 설정할 수 있습니다. 파일 캐시 디렉터리는 미리 생성해야 합니다.
- 컴퓨팅 노드는 DECOMMISION 작업을 통해 사용 중지해야 하나요?
아니요. 컴퓨팅 노드는 DROP BACKEND 작업으로 바로 삭제할 수 있습니다.
- 컴퓨팅 노드에서 내부 테이블을 쿼리하면 왜
has no queryable replicas오류가 발생하나요?
이는 정상적인 동작입니다. computation 유형의 BE 노드는 내부 테이블 쿼리를 전혀 처리하지 않습니다. 클러스터의 모든 BE 노드가 computation 유형이거나 클러스터의 mix 유형 노드가 내부 테이블의 복제본을 저장하기에 부족하면 내부 테이블 쿼리가 이 오류와 함께 실패합니다.
해결 방법: 내부 테이블 쿼리를 처리할 수 있도록 클러스터에 mix 유형의 BE 노드를 하나 이상 유지하거나 추가합니다.
- 스토리지·컴퓨팅 분리 모드에서는
NodeRole값이SHOW BACKENDS에서 항상mix로 표시되는데, 이는be_node_role = computation설정이 적용되지 않았다는 뜻인가요?
아니요. 스토리지·컴퓨팅 분리 모드에서 NodeRole 열은 SHOW BACKENDS에서 항상 mix로 표시됩니다. 이는 알려진 표시 동작이며, 실제 be_node_role 설정(be.conf)과는 관계가 없습니다. 이 매개변수는 스토리지·컴퓨팅 분리 모드에서도 적용됩니다. computation으로 설정된 노드는 외부 테이블 쿼리에만 참여합니다.