복붙노트

[HADOOP] 원사 : 전체 클러스터 리소스를 활용하는 방법?

HADOOP

원사 : 전체 클러스터 리소스를 활용하는 방법?

그래서 7 개의 작업 노드가있는 cloudera 클러스터가 있습니다.

다음은 내 클러스터의 성능 조정에 중요한 (Google의) 일부 구성입니다. 나는 다음과 같이 달리고있다.

이제는 내 ResourceManager를 볼 때 119GB로 사용 가능한 메모리가 표시됩니다. 그러나 무거운 sqoop 작업을 실행하고 클러스터가 최고점에 이르렀을 때 ~ 59GB의 메모리 만 사용하여 ~ 60GB의 메모리를 사용하지 않았습니다.

내가 보는 한 가지 방법은 사용하지 않는 메모리 문제를 해결할 수 있습니다. map | reduce.memory를 4GB로 늘리면 노드 당 최대 16GB를 사용할 수 있습니다.

다른 방법은 컨테이너의 수를 늘리는 것입니다. 컨테이너의 수를 늘리는 방법은 확실하지 않습니다.

이 경우 클러스터 성능을 향상시키기 위해 올바른 구성을 설정해야합니다. 컨테이너 당 개수를 늘릴 수 있습니까? 예를 들어 코어 당 컨테이너 2 개를 늘릴 수 있습니까? 그리고 그것은 추천입니까?

클러스터 구성에 대한 도움이나 제안은 매우 높이 평가 될 것입니다. 감사.

해결법

  1. ==============================

    1.입력 데이터가 26 분할 인 경우 YARN은 병렬로 해당 분할을 처리하기 위해 26 개의 매퍼를 만듭니다.

    입력 데이터가 26 분할 인 경우 YARN은 병렬로 해당 분할을 처리하기 위해 26 개의 매퍼를 만듭니다.

    26 개의 스플릿을위한 2GB 매퍼가있는 7 개의 노드가있는 경우 다음과 같이 다시 분할해야합니다.

    따라서 모든 맵퍼가 동시에 실행되는 경우 맵에 사용 된 총 메모리는 26x2 = 52GB가됩니다. 아마도 감속기 (들)와 ApplicationMaster 컨테이너로 메모리 사용자를 추가한다면, 말했던 것처럼 어느 시점에서 59 기가 바이트에 도달 할 수 있습니다.

    이것이 당신이 목격하고있는 행동이고, 26 명의 매퍼가 끝난 후에 일이 끝나면, 아무 것도 잘못된 것이 아닙니다. 컨테이너 슬롯을 비울 때까지 기다리지 않고 모든 노드에 작업을 분산시켜 작업을 완료하는 데 약 60GB 만 있으면됩니다. 다른 무료 60 GB는 필요하지 않기 때문에 기다리고 있습니다. 모든 메모리를 사용하기 위해 힙 크기를 늘리더라도 반드시 성능이 향상되지는 않습니다.

    편집 됨 :

    그러나 스케줄링을 기다리고있는 많은 매퍼가있는 경우에는 vcores를 사용하여 컨테이너 할당을 계산하도록 설치가 구성되지 않았기 때문일 수도 있습니다. 이것은 Apache Hadoop의 기본값은 아니지만 다음과 같이 구성 할 수 있습니다.

    yarn.nodemanager.resource.cpu-vcores를 4로 정의 했으므로 각 매퍼는 기본적으로 1 개의 vcore를 사용하기 때문에 한 번에 노드 당 4 개의 매퍼 만 실행할 수 있습니다.

    이 경우 yarn.nodemanager.resource.cpu-vcores의 값을 8로 두 배로 늘릴 수 있습니다.이 값은 임의의 값으로 매퍼의 수를 두 배 늘려야합니다.

  2. from https://stackoverflow.com/questions/37791362/yarn-how-to-utilize-full-cluster-resources by cc-by-sa and MIT license