복붙노트

[HADOOP] YARN 응용 프로그램 마스터가 리소스 관리자에 연결할 수 없습니다.

HADOOP

YARN 응용 프로그램 마스터가 리소스 관리자에 연결할 수 없습니다.

4 노드 클러스터 (1 네임 노드 / 리소스 관리자 3 datanodes / 노드 관리자)

간단한 tez 예제를 실행하려고합니다. ordersWordCount

hadoop jar C:\HDP\tez-0.4.0.2.1.1.0-1621\tez-mapreduce-examples-0.4.0.2.1.1.0-1621.jar orderedwordcount sample/test.txt /sample/out

작업이 수락되면 응용 프로그램 마스터와 컨테이너가 설정되지만 nodemanager에서이 로그를 봅니다.

구성 가능한 시간 초과 후 작업이 실패 함

이 문제를 조사한 결과 항상 yarn.resourcemanager.scheduler.address 구성을 지적했습니다. 모든 내 자원 관리자 노드와 노드 관리자에서이 구성이 올바르게 정의되었지만 어떤 이유로 그 구성이 선택되지 않았습니다.

<property>
<name>yarn.resourcemanager.hostname</name>
<value>10.234.225.69</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>${yarn.resourcemanager.hostname}:8033</value>
</property>

해결법

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

    1.작업자 노드 (예 : NodeManager)가 IPv4를 사용하여 ResourceManager에 연결하는 동안 ResourceManager가 IPv6 포트에서 수신 대기 중일 수 있습니다

    작업자 노드 (예 : NodeManager)가 IPv4를 사용하여 ResourceManager에 연결하는 동안 ResourceManager가 IPv6 포트에서 수신 대기 중일 수 있습니다

    이 경우 신속하게 확인하려면

    netstat -aln | grep 8030
    

    ::: 8030과 유사한 것을 얻으면 ResourceManager는 실제로 IPv6 포트에서 수신 대기합니다. IPv4 포트 인 경우 0.0.0.0:8030과 비슷한 것을보아야합니다.

    이 문제를 해결하려면 모든 컴퓨터에서 IPv6을 사용하지 않도록 설정하고 다시 시도하십시오.

  2. ==============================

    2.yarn.resourcemanager.scheduler.address를 설정하면 Hadoop2 코드에 문제가 있습니다 (예 :

    yarn.resourcemanager.scheduler.address를 설정하면 Hadoop2 코드에 문제가 있습니다 (예 :

    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>qadoop-nn001.apsalar.com:8030</value>
    </property>
    

    현재 'conf'구성에 제대로 배치되지 않았습니다. hadoop-yarn-project / hadoop-yarn / common / src / main / java / org / apache / hadoop / yarn / client / RMProxy.java

    문제를 증명하기 위해 우리는 해당 파일을 패치하여 스케줄러 주소를 직접 주입했습니다. 아래의 패치는 해킹입니다. 근본 원인은 'conf'객체를로드해야하는 것입니다. property "yarn.resourcemanager.scheduler.address".

        @Private
    protected static <T> T createRMProxy(final Configuration configuration, final Class<T> protocol, RMProxy instance) throws IOException {
        YarnConfiguration conf = (configuration instanceof YarnConfiguration)
            ? (YarnConfiguration) configuration
            : new YarnConfiguration(configuration);
        LOG.info("LEE: changing the conf to include yarn.resourcemanager.scheduler.address at 10.1.26.1");
        conf.set("yarn.resourcemanager.scheduler.address", "10.1.26.1");
        RetryPolicy retryPolicy = createRetryPolicy(conf);
        if (HAUtil.isHAEnabled(conf)) {
          RMFailoverProxyProvider<T> provider =
              instance.createRMFailoverProxyProvider(conf, protocol);
          return (T) RetryProxy.create(protocol, provider, retryPolicy);
        } else {
          InetSocketAddress rmAddress = instance.getRMAddress(conf, protocol);
          LOG.info("LEE: Connecting to ResourceManager at " + rmAddress);
          T proxy = RMProxy.<T>getProxy(conf, protocol, rmAddress);
          return (T) RetryProxy.create(protocol, proxy, retryPolicy);
        }   
    } 
    

    편집 : 우리는 CLASSPATH에 yarn-site.xml을 추가하여이 문제를 해결했습니다.       RMProxy.java를 수정할 필요가 없습니다.

  3. ==============================

    3.자원 관리자에게 도달 할 수 없기 때문입니다. 다른 노드에서 자원 관리자에게 ping을 시도하고 작동하는지 확인하십시오. 클러스터 전체에서 이러한 구성을 일관되게 유지하십시오.

    자원 관리자에게 도달 할 수 없기 때문입니다. 다른 노드에서 자원 관리자에게 ping을 시도하고 작동하는지 확인하십시오. 클러스터 전체에서 이러한 구성을 일관되게 유지하십시오.

  4. from https://stackoverflow.com/questions/25771286/yarn-application-master-unable-to-connect-to-resource-manager by cc-by-sa and MIT license