2017-05-04 9 views
0

가상 세그먼트 메모리/코어 할당 나는 질의 -에 대한 세션 수준에서 Hawq 구성 아래 조정할하려고

SET hawq_rm_stmt_nvseg = 40; 
SET hawq_rm_stmt_vseg_memory = '4gb'; 

Hawq이

Minumum Hawq queue Used capacity 5% 
hawq_rm_nvseg_perquery_perseg_limit = 6 
hawq_rm_min_resource_perseg = 4 

때와 원사 자원 관리자에서 실행 내 쿼리를 실행하면 30 개의 컨테이너 만 실행됩니다. 40 개의 컨테이너 (가상 세그먼트 당 코어 1 개)가 아닌가? 가상 세그먼트 메모리 또는 코어가 어떻게 할당되는지 이해해주십시오.

답변

1

hawq_rm_stmt_nvseg는 할당량 한도입니다. 기본적으로이 값은 0입니다. 따라서이 값을 40으로 설정하면 vseg 수는 늘어나지 않고 제한됩니다.

hawq_rm_nvseg_perquery_perseg_limit는 생성 할 수 있고 기본값 6을 사용하는 vseg 수를 제어합니다. 따라서 vseg 수는 6 * 노드 수 여야합니다. 30이 표시되면 5 개의 노드가있는 것입니다.

임의로 분산 된 테이블을 사용하는 경우 hawq_rm_nvseg_perquery_perseg_limit를 늘리면 쿼리에서 더 많은 vseg가 작동합니다.

해시 분산 테이블을 사용하는 경우 bucketnum 값이 큰 테이블을 다시 만들면 쿼리 할 때 더 많은 vseg가 제공됩니다.

+0

노드 수 (물리적 HAWQ 세그먼트)는 10입니다. 이상적으로는 40 개의 실 컨테이너로 된 40 개의 vseg (물리적 세그먼트 당 4 개)가되어야하지만 30 개의 실 컨테이너를보고 있습니다. 내가 여기서 뭐라도 놓치고 있니? –

+0

hawq_rm_min_resource_perseg가 4로 설정되어 있으므로 4 * 10 = 40으로 나타났습니다. vseg 수는 동적이며 액세스중인 테이블을 기반으로합니다. 작은 테이블은 더 많은 vseg를 ​​사용할 필요가 없습니다. Yarn 통합에 대한 자세한 내용 : http://hdb.docs.pivotal.io/220/hawq/resourcemgmt/YARNIntegration.html –