복붙노트

[HADOOP] Hadoop의 메모리 부족 오류

HADOOP

Hadoop의 메모리 부족 오류

이 http://hadoop.apache.org/common/docs/stable/single_node_setup.html 문서에 따라 Hadoop 설치를 시도했습니다. 이걸 실행하려했을 때

bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+' 

나는 다음 예외를 얻고있다.

java.lang.OutOfMemoryError: Java heap space

예제를 시도 할 수 있도록 솔루션을 제안하십시오. 전체 예외 사항은 다음과 같습니다. 나는 하둡에 처음이다. 나는 바보 같은 짓을했을지도 모른다. 어떤 제안이라도 높게 평가 될 것입니다.

anuj@anuj-VPCEA13EN:~/hadoop$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
11/12/11 17:38:22 INFO util.NativeCodeLoader: Loaded the native-hadoop library
11/12/11 17:38:22 INFO mapred.FileInputFormat: Total input paths to process : 7
11/12/11 17:38:22 INFO mapred.JobClient: Running job: job_local_0001
11/12/11 17:38:22 INFO util.ProcessTree: setsid exited with exit code 0
11/12/11 17:38:22 INFO mapred.Task:  Using ResourceCalculatorPlugin : org.apache.hadoop.util.LinuxResourceCalculatorPlugin@e49dcd
11/12/11 17:38:22 INFO mapred.MapTask: numReduceTasks: 1
11/12/11 17:38:22 INFO mapred.MapTask: io.sort.mb = 100
11/12/11 17:38:22 WARN mapred.LocalJobRunner: job_local_0001
java.lang.OutOfMemoryError: Java heap space
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:949)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:428)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)
11/12/11 17:38:23 INFO mapred.JobClient:  map 0% reduce 0%
11/12/11 17:38:23 INFO mapred.JobClient: Job complete: job_local_0001
11/12/11 17:38:23 INFO mapred.JobClient: Counters: 0
11/12/11 17:38:23 INFO mapred.JobClient: Job Failed: NA
java.io.IOException: Job failed!
    at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1257)
    at org.apache.hadoop.examples.Grep.run(Grep.java:69)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
    at org.apache.hadoop.examples.Grep.main(Grep.java:93)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:68)
    at org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:139)
    at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:64)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:156)

해결법

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

    1.conf / mapred-site.xml 파일을 편집하고 속성을 추가하여 더 많은 메모리를 할당 할 수 있습니다.

    conf / mapred-site.xml 파일을 편집하고 속성을 추가하여 더 많은 메모리를 할당 할 수 있습니다.

      <property>
        <name>mapred.child.java.opts</name>
        <value>-Xmx1024m</value>
      </property>
    

    그러면 힙 공간이 많은 hadoop JVM이 시작됩니다.

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

    2.RPM 또는 DEB 패키지를 사용하는 모든 사람에게 설명서 및 일반적인 조언은 오해의 소지가 있습니다. 이 패키지는 hadoop 설정 파일을 / etc / hadoop에 설치합니다. 이러한 설정은 다른 설정보다 우선합니다.

    RPM 또는 DEB 패키지를 사용하는 모든 사람에게 설명서 및 일반적인 조언은 오해의 소지가 있습니다. 이 패키지는 hadoop 설정 파일을 / etc / hadoop에 설치합니다. 이러한 설정은 다른 설정보다 우선합니다.

    /etc/hadoop/hadoop-env.sh는 Hadoop의 최대 자바 힙 메모리를 기본값으로 설정합니다 :

       export HADOOP_CLIENT_OPTS="-Xmx128m $HADOOP_CLIENT_OPTS"

    이 Xmx 설정이 너무 낮습니다. 간단히이 설정으로 변경하고 다시 실행하십시오.

       export HADOOP_CLIENT_OPTS="-Xmx2048m $HADOOP_CLIENT_OPTS"
  3. ==============================

    3.또 다른 가능성은 export HADOOP_CLIENT_OPTS = "- Xmx128m $ HADOOP_CLIENT_OPTS"를 포함하는 hadoop-env.sh 편집입니다. 필자의 경우 128m에서 1024m로 변경 (데비안의 Hadoop 1.0.0.1).

    또 다른 가능성은 export HADOOP_CLIENT_OPTS = "- Xmx128m $ HADOOP_CLIENT_OPTS"를 포함하는 hadoop-env.sh 편집입니다. 필자의 경우 128m에서 1024m로 변경 (데비안의 Hadoop 1.0.0.1).

  4. ==============================

    4.이렇게 많은 조합을 시도한 후에 마침내 내 환경에서 동일한 오류가 발생합니다 (Ubuntu 12.04, Hadoop 1.0.4)는 두 가지 문제로 인한 것입니다.

    이렇게 많은 조합을 시도한 후에 마침내 내 환경에서 동일한 오류가 발생합니다 (Ubuntu 12.04, Hadoop 1.0.4)는 두 가지 문제로 인한 것입니다.

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

    5.{map | reduce} .java.opts와 mapreduce. {map | reduce} .memory.mb를 조정해야합니다.

    {map | reduce} .java.opts와 mapreduce. {map | reduce} .memory.mb를 조정해야합니다.

    예 :

      hadoop jar <jarName> <fqcn> \
          -Dmapreduce.map.memory.mb=4096 \
          -Dmapreduce.map.java.opts=-Xmx3686m
    

    이 질문에 대한 답변으로 좋은 자료가 있습니다.

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

    6./etc/hadoop/hadoop-env.sh 파일을 편집하여이 문제를 해결할 수 있습니다.

    /etc/hadoop/hadoop-env.sh 파일을 편집하여이 문제를 해결할 수 있습니다.

    Hadoop은 conf 디렉토리보다 / etc / hadoop config 디렉토리 우선 순위를 부여하고있었습니다.

    나는 또한 같은 상황을 만났다.

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

    7.아래처럼 당신의 직업을 운영하십시오 :

    아래처럼 당신의 직업을 운영하십시오 :

    bin/hadoop jar hadoop-examples-*.jar grep -D mapred.child.java.opts=-Xmx1024M input output 'dfs[a-z.]+' 
    

    힙 공간은 기본적으로 32MB 또는 64MB로 설정됩니다. 튜더가 지적한대로 특성 파일에서 힙 공간을 늘리거나 특정 작업에 대해이 특성을 설정하여이 특정 작업에 대해 힙 공간을 변경할 수 있습니다.

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

    8.바이너리 타르에서 hadoop 1.0.4를 설치했고 메모리 부족 문제가있었습니다. 나는 Tudor 's, Zach Garner 's, Nishant Nagwani 's 및 Andris Birkmanis의 솔루션을 시도했지만 그들 중 누구도 나를 위해 일하지 않았습니다.

    바이너리 타르에서 hadoop 1.0.4를 설치했고 메모리 부족 문제가있었습니다. 나는 Tudor 's, Zach Garner 's, Nishant Nagwani 's 및 Andris Birkmanis의 솔루션을 시도했지만 그들 중 누구도 나를 위해 일하지 않았습니다.

    $ HADOOP_CLIENT_OPTS를 무시하도록 bin / hadoop을 편집하면 저에게 효과적입니다.

    ...
    elif [ "$COMMAND" = "jar" ] ; then
         CLASS=org.apache.hadoop.util.RunJar
        #Line changed this line to avoid out of memory error:
        #HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"
        # changed to:
         HADOOP_OPTS="$HADOOP_OPTS "
    ...
    

    나는 이것을 할 수있는 더 좋은 방법이 있다고 생각하고 있지만 그것을 찾을 수는 없습니다.

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

    9.Ubuntu, Hadoop 1.1.1에서도 같은 예외가 있습니다. 해결책은 간단합니다 - 일부 초기화 스크립트에 의해 설정된 쉘 변수 $ HADOOP_CLIENT_OPTS를 편집하십시오. 그러나 그것을 발견하는 데 오랜 시간이 걸렸습니다 = (

    Ubuntu, Hadoop 1.1.1에서도 같은 예외가 있습니다. 해결책은 간단합니다 - 일부 초기화 스크립트에 의해 설정된 쉘 변수 $ HADOOP_CLIENT_OPTS를 편집하십시오. 그러나 그것을 발견하는 데 오랜 시간이 걸렸습니다 = (

  10. ==============================

    10.우리는 같은 상황에 직면했다.

    우리는 같은 상황에 직면했다.

    hadoop-env.sh를 변경하면 나에게 효과적이다.

    EXPORT HADOOP_HEAPSIZE는 주석을 달고 주석 처리를 제거하고 원하는 크기를 제공합니다.

    기본적으로 지정된 HEAPSIZE는 1000MB입니다.

  11. ==============================

    11.다음 명령을 실행하여 변수를 내보내는 것이 효과적입니다.

    다음 명령을 실행하여 변수를 내보내는 것이 효과적입니다.

    . conf/hadoop-env.sh
    
  12. ==============================

    12.DEB install을 사용하는 Ubuntu에서 (적어도 Hadoop 1.2.1의 경우) /etc/history/hadoop-env.sh에 만들어진 /etc/profile.d/hadoop-env.sh 심볼릭 링크가있을 때마다로드됩니다. 로그인하십시오. / usr / bin / hadoop 랩퍼 자체가 결국 (/usr/libexec/hadoop-config.sh를 통해) 호출하므로 내 경험상이 작업은 필요하지 않습니다. 필자의 시스템에서는 심볼릭 링크를 제거했으며 HADOOP_CLIENT_OPTIONS에서 -Xmx의 값을 변경할 때 이상한 문제를 일으키지 않습니다. 왜냐하면 hadoop-env.sh 스크립트가 실행될 때마다 클라이언트 옵션 환경 변수가 업데이트되기 때문입니다. 이전 값)

    DEB install을 사용하는 Ubuntu에서 (적어도 Hadoop 1.2.1의 경우) /etc/history/hadoop-env.sh에 만들어진 /etc/profile.d/hadoop-env.sh 심볼릭 링크가있을 때마다로드됩니다. 로그인하십시오. / usr / bin / hadoop 랩퍼 자체가 결국 (/usr/libexec/hadoop-config.sh를 통해) 호출하므로 내 경험상이 작업은 필요하지 않습니다. 필자의 시스템에서는 심볼릭 링크를 제거했으며 HADOOP_CLIENT_OPTIONS에서 -Xmx의 값을 변경할 때 이상한 문제를 일으키지 않습니다. 왜냐하면 hadoop-env.sh 스크립트가 실행될 때마다 클라이언트 옵션 환경 변수가 업데이트되기 때문입니다. 이전 값)

  13. ==============================

    13.지난 주에 비슷한 문제로 끝났습니다. 사용하고 있던 입력 파일에는 볼 수없는 커다란 엉덩이 라인이있었습니다. 그 줄은 내 파일 크기의 거의 95 % (1GB의 95 %! 상상해보십시오!). 먼저 입력 파일을 살펴 보시기 바랍니다. 살펴볼 잘못된 입력 파일이있을 수 있습니다. 입력 파일을 확인한 후에 힙 공간을 늘려보십시오.

    지난 주에 비슷한 문제로 끝났습니다. 사용하고 있던 입력 파일에는 볼 수없는 커다란 엉덩이 라인이있었습니다. 그 줄은 내 파일 크기의 거의 95 % (1GB의 95 %! 상상해보십시오!). 먼저 입력 파일을 살펴 보시기 바랍니다. 살펴볼 잘못된 입력 파일이있을 수 있습니다. 입력 파일을 확인한 후에 힙 공간을 늘려보십시오.

  14. ==============================

    14.mapreduce.child.java.opts에 mapred 작업을 실행하는 데 필요한 메모리가 충분한 지 확인하십시오. 또한 mapreduce.task.io.sort.mb가 mapreduce.child.java.opts보다 작아야합니다.

    mapreduce.child.java.opts에 mapred 작업을 실행하는 데 필요한 메모리가 충분한 지 확인하십시오. 또한 mapreduce.task.io.sort.mb가 mapreduce.child.java.opts보다 작아야합니다.

    예:

     mapreduce.child.java.opts=Xmx2048m
    
     mapreduce.task.io.sort.mb=100
    

    그렇지 않으면 hadoop-env.sh의 HADOOP_CLIENT_OPTS가 구성되어 있어도 메모리가 충분할지라도 OOM 문제가 발생합니다.

  15. from https://stackoverflow.com/questions/8464048/out-of-memory-error-in-hadoop by cc-by-sa and MIT license