복붙노트

[HADOOP] AM 컨테이너가 할당되기를 기다리는 MapReduce 작업이 중지됨

HADOOP

AM 컨테이너가 할당되기를 기다리는 MapReduce 작업이 중지됨

MapReduce 작업으로 간단한 단어 수를 계산하려고했습니다. 로컬에서 실행할 때 모든 것이 잘 작동합니다 (모든 작업은 이름 노드에서 수행됩니다). 그러나 YARN을 사용하는 클러스터에서 실행하려고하면 (mapreduce.framework.name = yarn을 mapred-site.conf에 추가) 작업이 중단됩니다.

비슷한 문제가 발생했습니다. MapReduce 작업이 수락 됨 상태에서 멈춤

작업 출력 :

*** START ***
15/12/25 17:52:50 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
15/12/25 17:52:51 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
15/12/25 17:52:51 INFO input.FileInputFormat: Total input paths to process : 5
15/12/25 17:52:52 INFO mapreduce.JobSubmitter: number of splits:5
15/12/25 17:52:52 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1451083949804_0001
15/12/25 17:52:53 INFO impl.YarnClientImpl: Submitted application application_1451083949804_0001
15/12/25 17:52:53 INFO mapreduce.Job: The url to track the job: http://hadoop-droplet:8088/proxy/application_1451083949804_0001/
15/12/25 17:52:53 INFO mapreduce.Job: Running job: job_1451083949804_0001

mapred-site.xml :

<configuration>

<property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
</property>

<property>
   <name>mapreduce.job.tracker</name>
   <value>localhost:54311</value>
</property> 

<!--
<property>
   <name>mapreduce.job.tracker.reserved.physicalmemory.mb</name>
   <value></value>
</property>

<property>
   <name>mapreduce.map.memory.mb</name>
   <value>1024</value>
</property>

<property>
   <name>mapreduce.reduce.memory.mb</name>
   <value>2048</value>
</property>    

<property>
   <name>yarn.app.mapreduce.am.resource.mb</name>
   <value>3000</value>
   <source>mapred-site.xml</source>
</property> -->

</configuration>

yarn-site.xml

<configuration>
 <property>
   <name>yarn.nodemanager.aux-services</name>
   <value>mapreduce_shuffle</value>
 </property>
 <property>
   <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
   <value>org.apache.hadoop.mapred.ShuffleHandler</value>
 </property>

<!--
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>3000</value>
<source>yarn-site.xml</source>
</property>

<property>
  <name>yarn.scheduler.minimum-allocation-mb</name>
  <value>500</value>
</property>

<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>3000</value>
</property>
-->

</configuration>

// 나는 왼쪽의 주석 처리 된 옵션 - 문제를 해결하지 못했다.

YarnApplicationState : ACCEPTED : AM 컨테이너가 할당되고 시작되고 RM에 등록되기를 기다립니다.

무엇이 문제 일 수 있습니까?

편집하다:

NameNode (8GB RAM) + 2x DataNode (4GB RAM)와 같은 컴퓨터에서이 구성 (주석 처리)을 시도했습니다. 나는 같은 효과를 얻습니다 : 잡은 ACCEPTED 상태에서 정지합니다.

EDIT2 : 구성 변경 (감사합니다 @ Manjunath Ballur) :

yarn-site.xml :

<configuration>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop-droplet</value>
  </property>

  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>hadoop-droplet:8031</value>
  </property>
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>hadoop-droplet:8032</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>hadoop-droplet:8030</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>hadoop-droplet:8033</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>hadoop-droplet:8088</value>
  </property>
  <property>
    <description>Classpath for typical applications.</description>
    <name>yarn.application.classpath</name>
    <value>
        $HADOOP_CONF_DIR,
        $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
        $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
        $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
        $YARN_HOME/*,$YARN_HOME/lib/*
    </value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce.shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/data/1/yarn/local,/data/2/yarn/local,/data/3/yarn/local</value>
  </property>
  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/data/1/yarn/logs,/data/2/yarn/logs,/data/3/yarn/logs</value>
  </property>
  <property>
    <description>Where to aggregate logs</description>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/var/log/hadoop-yarn/apps</value>
  </property>
  <property> 
    <name>yarn.scheduler.minimum-allocation-mb</name> 
    <value>50</value>
  </property>
  <property> 
    <name>yarn.scheduler.maximum-allocation-mb</name> 
    <value>390</value>
  </property>
  <property> 
    <name>yarn.nodemanager.resource.memory-mb</name> 
    <value>390</value>
  </property>
</configuration>

mapred-site.xml :

<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

<property>  
    <name>yarn.app.mapreduce.am.resource.mb</name>  
    <value>50</value>
</property>
<property> 
    <name>yarn.app.mapreduce.am.command-opts</name> 
    <value>-Xmx40m</value>
</property>
<property>
    <name>mapreduce.map.memory.mb</name>
    <value>50</value>
</property>
<property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>50</value>
</property>
<property>
    <name>mapreduce.map.java.opts</name>
    <value>-Xmx40m</value>
</property>
<property>
    <name>mapreduce.reduce.java.opts</name>
    <value>-Xmx40m</value>
</property>
</configuration>

그래도 작동이 안되는. 추가 정보 : 클러스터 미리보기에서 아무 노드도 볼 수 없습니다 (유사 문제 : 여기서는 Slave 노드가 Yarn ResourceManager에 없음).

해결법

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

    1.클러스터의 노드 관리자 상태를 확인해야합니다. NM 노드의 디스크 공간이 부족하면 RM은 "비정상"으로 표시되고 해당 NM은 새 컨테이너를 할당 할 수 없습니다.

    클러스터의 노드 관리자 상태를 확인해야합니다. NM 노드의 디스크 공간이 부족하면 RM은 "비정상"으로 표시되고 해당 NM은 새 컨테이너를 할당 할 수 없습니다.

    1) 비정상적인 노드를 확인하십시오. http : // : 8088 / cluster / nodes / unhealthy

    "상태 보고서"탭에 "local-dirs are bad"라고 표시되면 이러한 노드에서 디스크 공간을 정리해야한다는 의미입니다.

    2) hdfs-site.xml에서 DFS dfs.data.dir 등록 정보를 확인하십시오. hdfs 데이터가 저장된 로컬 파일 시스템의 위치를 ​​가리 킵니다.

    3) 해당 기계에 로그인하고 df -h & hadoop fs-du -h 명령을 사용하여 점유 공간을 측정하십시오.

    4) hadoop 휴지통을 확인하고 차단되면 삭제하십시오. hadoop fs -du -h /user/user_name/.Trash 및 hadoop fs -rm -r /user/user_name/.Trash/*

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

    2.기억이 나빠서

    기억이 나빠서

    YARN 구성의 튜닝을 이해하기 위해, 나는 이것을 아주 좋은 소스로 발견했다 : http://www.cloudera.com/content/www/en-us/documentation/enterprise/latest/topics/cdh_ig_yarn_tuning.html

    나는이 블로그에 제시된 지시 사항을 따르고 일자리를 얻을 수 있었다. 노드에있는 실제 메모리에 비례하여 설정을 변경해야합니다.

    기억해야 할 중요한 사항은 다음과 같습니다.

    다음은 내가 사용하는 설정이며 완벽하게 작동합니다.

    yarn-site.xml :

    <property> 
        <name>yarn.scheduler.minimum-allocation-mb</name> 
        <value>1228</value>
    </property>
    <property> 
        <name>yarn.scheduler.maximum-allocation-mb</name> 
        <value>9830</value>
    </property>
    <property> 
        <name>yarn.nodemanager.resource.memory-mb</name> 
        <value>9830</value>
    </property>
    

    mapred-site.xml

    <property>  
        <name>yarn.app.mapreduce.am.resource.mb</name>  
        <value>1228</value>
    </property>
    <property> 
        <name>yarn.app.mapreduce.am.command-opts</name> 
        <value>-Xmx983m</value>
    </property>
    <property>
        <name>mapreduce.map.memory.mb</name>
        <value>1228</value>
    </property>
    <property>
        <name>mapreduce.reduce.memory.mb</name>
        <value>1228</value>
    </property>
    <property>
        <name>mapreduce.map.java.opts</name>
        <value>-Xmx983m</value>
    </property>
    <property>
        <name>mapreduce.reduce.java.opts</name>
        <value>-Xmx983m</value>
    </property>
    

    또한 여기에 답변을 참조 할 수 있습니다 : 컨테이너 이해 및 조정 얀

    컨테이너 할당이 CPU를 고려하도록하려면 vCore 설정을 추가 할 수 있습니다. 그러나 이것이 작동하려면 DominantResourceCalculator에 CapacityScheduler를 사용해야합니다. 여기에 대한 토론을 참조하십시오 : MapReduce2에서 vcores 및 메모리를 기반으로 컨테이너를 만드는 방법은 무엇입니까?

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

    3.이것은이 오류에 대한 내 사건을 해결했습니다 :

    이것은이 오류에 대한 내 사건을 해결했습니다 :

    <property>
      <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
      <value>100</value>
    </property>
    
  4. ==============================

    4.마스터 및 슬레이브 노드에서 호스트 파일을 확인하십시오. 나는이 문제가 정확히 발생했다. 내 호스트 파일은 마스터 노드에서 이와 같이 보입니다 (예 :

    마스터 및 슬레이브 노드에서 호스트 파일을 확인하십시오. 나는이 문제가 정확히 발생했다. 내 호스트 파일은 마스터 노드에서 이와 같이 보입니다 (예 :

    127.0.0.0 localhost
     127.0.1.1 master-virtualbox
     192.168.15.101 master 
    

    나는 아래처럼 그것을 바꿨다.

    192.168.15.101 master master-virtualbox localhost
    

    그래서 효과가있었습니다.

  5. ==============================

    5.이 라인들

    이 라인들

    <property>
      <name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
      <value>100</value>
    </property>
    

    디스크 사용량이 95 % 이상일 때 노드가 비정상으로 표시 될 것이므로 yarn-site.xml에서 문제가 해결되었습니다. 솔루션은 주로 의사 분산 모드에 적합합니다.

  6. ==============================

    6.각각의 인스턴스에 512MB의 RAM이 있으며 yarn-site.xml 및 mapred-site.xml의 모든 메모리 구성은 500MB에서 3GB입니다. 클러스터에서 아무 것도 실행할 수 없습니다. 모든 것을 ~ 256 MB로 변경하십시오.

    각각의 인스턴스에 512MB의 RAM이 있으며 yarn-site.xml 및 mapred-site.xml의 모든 메모리 구성은 500MB에서 3GB입니다. 클러스터에서 아무 것도 실행할 수 없습니다. 모든 것을 ~ 256 MB로 변경하십시오.

    또한 mapred-site.xml이 원사를 사용하여 프레임 워크를 사용하고 있으며 올바르지 않은 구직자 주소가 있습니다. resourcemanager 웹 주소를 포함하여 다중 노드 클러스터의 yarn-site.xml에 자원 관리자 관련 매개 변수가 있어야합니다. 그것으로 클러스터는 클러스터가 어디에 있는지 알지 못합니다.

    두 XML 파일을 다시 방문해야합니다.

  7. ==============================

    7.어쨌든 그건 저에게 효과적입니다. 많이 감사합니다! @ 카프

    어쨌든 그건 저에게 효과적입니다. 많이 감사합니다! @ 카프

    그게 내 yarn-site.xml이야.

    <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>MacdeMacBook-Pro.local</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.address</name>
                <value>${yarn.resourcemanager.hostname}:8088</value>
        </property>
        <property>
           <name>yarn.nodemanager.resource.memory-mb</name>
    <value>4096</value>
    </property>
    <property>
       <name>yarn.scheduler.minimum-allocation-mb</name>
       <value>2048</value>
    </property>
    <property>
    <name>yarn.nodemanager.vmem-pmem-ratio</name>
    <value>2.1</value>
    

    그건 내 mapred-site.xml입니다.

    <configuration>
    <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
    

  8. ==============================

    8.첫 번째는 원사 자원 관리자 로그를 확인하는 것입니다. 나는이 문제에 관해 인터넷에서 매우 오랜 시간 동안 수색을 해왔지만, 아무도 실제로 일어나고있는 것을 발견하는 법을 알려주지 못했습니다. 실 리소스 관리자 로그를 확인하는 것은 간단하고 간단합니다. 나는 사람들이 왜 로그를 무시하는지 혼란 스럽다.

    첫 번째는 원사 자원 관리자 로그를 확인하는 것입니다. 나는이 문제에 관해 인터넷에서 매우 오랜 시간 동안 수색을 해왔지만, 아무도 실제로 일어나고있는 것을 발견하는 법을 알려주지 못했습니다. 실 리소스 관리자 로그를 확인하는 것은 간단하고 간단합니다. 나는 사람들이 왜 로그를 무시하는지 혼란 스럽다.

    나를 위해 로그에 오류가있었습니다.

    Caused by: org.apache.hadoop.net.ConnectTimeoutException: 20000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=172.16.0.167/172.16.0.167:55622]
    

    그것은 내 직장에서 WiFi 네트워크를 바꿔서 내 컴퓨터 IP가 바뀌었기 때문입니다.

  9. ==============================

    9.이전 질문이지만, 최근에 동일한 문제가 발생했으며, 제 경우에는 마스터에서 코드를 수동으로 로컬로 설정했기 때문입니다.

    이전 질문이지만, 최근에 동일한 문제가 발생했으며, 제 경우에는 마스터에서 코드를 수동으로 로컬로 설정했기 때문입니다.

    conf.setMaster ( "local [*]")를 검색하여 제거하십시오.

    희망이 도움이됩니다.

  10. from https://stackoverflow.com/questions/34467308/mapreduce-job-hangs-waiting-for-am-container-to-be-allocated by cc-by-sa and MIT license