HDInsight의 Hive 및 Azure Data Lake Storage Gen1에 대한 성능 조정 지침

서로 다른 여러 사용 사례 간에 적절한 성능을 제공하도록 기본 설정이 지정되었습니다. I/O 집약적인 쿼리의 경우 Azure Data Lake Storage Gen1로 더 나은 성능을 얻도록 Hive를 조정할 수 있습니다.

필수 구성 요소

매개 변수

Data Lake Storage Gen1 성능 향상을 위해 조정할 가장 중요한 설정은 다음과 같습니다.

  • hive.tez.container.size – 각 태스크에 사용된 메모리 양

  • tez.grouping.min-size – 각 매퍼의 최소 크기

  • tez.grouping.max-size – 각 매퍼의 최대 크기

  • hive.exec.reducer.bytes.per.reducer – 각 리듀서의 크기

hive.tez.container.size - 컨테이너 크기에 따라 각 태스크에 사용 가능한 메모리 양이 결정됩니다. Hive에서 동시성을 제어하기 위한 기본 입력입니다.

tez.grouping.min-size – 이 매개 변수를 통해 각 매퍼의 최소 크기를 설정할 수 있습니다. Tez에서 선택한 매퍼 수가 이 매개 변수 값보다 작은 경우 Tez에서 여기서 설정된 값을 사용합니다.

tez.grouping.max-size – 매개 변수를 통해 각 매퍼의 최대 크기를 설정할 수 있습니다. Tez에서 선택한 매퍼 수가 이 매개 변수 값보다 큰 경우 Tez에서 여기에 설정된 값을 사용합니다.

hive.exec.reducer.bytes.per.reducer – 이 매개 변수는 각 리듀서의 크기를 설정합니다. 기본적으로 각 리듀서는 256MB입니다.

지침

hive.exec.reducer.bytes.per.reducer 설정 – 데이터가 압축되지 않은 경우 기본 값이 제대로 작동합니다. 압축된 데이터의 경우 리듀서의 크기를 줄여야 합니다.

Set hive.tez.container.size – 각 노드에서 메모리는 yarn.nodemanager.resource.memory-mb에 의해 지정되고 기본적으로 HDI 클러스터에서 제대로 설정해야 합니다. YARN에서 적절한 메모리 설정에 대한 추가 정보는 이 게시물을 참조하세요.

I/O 집약적인 워크로드의 경우 Tez 컨테이너 크기를 줄여 더 많은 병렬 처리의 이점을 얻을 수 있습니다. 이렇게 하면 사용자에게 더 많은 컨테이너가 제공되어 동시성이 증가합니다. 하지만 일부 Hive 쿼리에는 상당한 양의 메모리가 필요합니다(예: MapJoin). 태스크에 충분한 메모리가 없는 경우 런타임 중에 메모리 부족 예외가 발생합니다. 메모리 부족 예외가 발생하면 메모리를 늘려야 합니다.

병렬 처리에서 실행 중인 동시 태스크 수는 총 YARN 메모리의 제약을 받습니다. YARN 컨테이너 수에 따라 실행할 수 있는 동시 태스크 수가 결정됩니다. 노드당 YARN 메모리를 찾으려면 Ambari로 이동할 수 있습니다. YARN으로 이동하여 Configs 탭을 확인합니다. 이 창에 YARN 메모리가 표시됩니다.

총 YARN 메모리 = 노드 * 노드당 YARN 메모리(YARN 컨테이너 수) = 총 YARN 메모리/Tez 컨테이너 크기

Data Lake Storage Gen1을 사용하여 성능을 개선하기 위한 핵심은 가능한 동시성을 늘리는 것입니다. Tez가 생성할 태스크 수를 자동으로 계산하므로 설정할 필요가 없습니다.

계산 예

8 노드 D14 클러스터가 있다고 가정해 보겠습니다.

총 YARN 메모리 = 노드 * 노드당 YARN 메모리(총 YARN 메모리) = 8개 노드 * 96GB = 768GB의 YARN 컨테이너 수 = 768GB / 3072MB = 256

제한 사항

Data Lake Storage Gen1 제한

Data Lake Storage Gen1에서 제공하는 대역폭 한도에 도달한 경우 작업 오류가 표시되기 시작합니다. 작업 로그에서 제한 오류를 확인하여 파악할 수 있습니다. Tez 컨테이너 크기를 늘려 병렬 처리를 줄일 수 있습니다. 작업에 대한 동시성이 더 필요한 경우 문의하세요.

제한 여부를 확인하려면 클라이언트 쪽에서 디버그 로깅을 사용하도록 설정해야 합니다. 그 방법은 다음과 같습니다.

  1. Hive 구성의 log4j 속성에 다음 속성을 입력합니다. 이 작업은 Ambari 보기인 log4j.logger.com.microsoft.azure.datalake.store=DEBUG에서 수행할 수 있습니다. 구성을 적용하려면 모든 노드/서비스를 다시 시작합니다.

  2. 제한이 적용되면 hive 로그 파일에 HTTP 429 오류 코드가 표시됩니다. hive 로그 파일은 /tmp/<user>/hive.log에 있습니다.

Hive 조정에 대한 추가 정보

Hive 쿼리를 조정하는 데 도움이 되는 몇 가지 블로그는 다음과 같습니다.