본문 바로가기
빅데이터/hive

[hive] Vertex's TaskResource is beyond the cluster container capability 오류 처리

by hs_seo 2019. 4. 5.

TEZ를 이용하여 작업을 처리할 때 발생하는 이 오류는 YARN에 지정한 컨테이너에 할당할 수 있는 최대 메모리보다, TEZ 컨테이너 사이즈 설정이 더 클때 발생합니다. YARN에 설정된 최대 메모리 이하로 컨테이너 사이즈를 설정해야 합니다. MR 엔진을 이용할 때도 최대 메모리 이하로 설정해야 합니다.

# YARN에서 관리하는 컨테이너의 최대 메모리 설정
set yarn.scheduler.maximum-allocation-mb=11520;
# TEZ의 컨테이너당 메모리 설정 
set hive.tez.container.size=1440;
# MR의 매퍼 메모리 설정 
set mapreduce.map.memory.mb=2048;
# MR의 리듀서 메모리 설정 
set mapreduce.reduce.memory.mb=2048;  

# 다음의 경우 오류 발생 
yarn.scheduler.maximum-allocation-mb < hive.tez.container.size

# 오류 내용(최대 설정가능한 메모리와 코어개수가 표시됨)
Status: Failed
Vertex's TaskResource is beyond the cluster container capability,Vertex=vertex_1532389969952_635131_1_00 [Map 5], Requested TaskResource=<memory:12960, vCores:1>, Cluster MaxContainerCapability=<memory:11520, vCores:128>

TEZ의 DAGImpl 코드를 보면 로컬 모드가 아닐 때 태스크의 리소스와 클러스터의 정보를 비교해서 오류를 출력하도록 구현되어 있는 것을 알 수 있다.

    // check task resources, only check it in non-local mode
    if (!appContext.isLocal()) {
      for (Vertex v : vertexMap.values()) {
        if (v.getTaskResource().compareTo(appContext.getClusterInfo().getMaxContainerCapability()) > 0) {
          String msg = "Vertex's TaskResource is beyond the cluster container capability," +
              "Vertex=" + v.getLogIdentifier() +", Requested TaskResource=" + v.getTaskResource()
              + ", Cluster MaxContainerCapability=" + appContext.getClusterInfo().getMaxContainerCapability();
          LOG.error(msg);
          addDiagnostic(msg);
          finished(DAGState.FAILED);
          return DAGState.FAILED;
        }
      }
}

TEZ 소스는 DAGImpl 코드에서 확인할 수 있습니다. 

 

https://github.com/zjffdu/tez/blob/a3a7700dea0a315ad613aa2d8a7223eb73878cb5/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/DAGImpl.java

 

zjffdu/tez

Contribute to zjffdu/tez development by creating an account on GitHub.

github.com

 

반응형