Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hadoop中的内存不足错误_Java_Hadoop - Fatal编程技术网

Java Hadoop中的内存不足错误

Java Hadoop中的内存不足错误,java,hadoop,Java,Hadoop,我试着按照这个文档安装Hadoop。 当我试着执行这个的时候 bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+' 我得到以下异常 java.lang.OutOfMemoryError: Java heap space 请提出一个解决方案,以便我可以尝试这个例子。下面列出了整个例外情况。我是Hadoop新手,我可能做了一些愚蠢的事情。如有任何建议,将不胜感激 anuj@anuj-VPCEA13EN:~/had

我试着按照这个文档安装Hadoop。 当我试着执行这个的时候

bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+' 
我得到以下异常

java.lang.OutOfMemoryError: Java heap space
请提出一个解决方案,以便我可以尝试这个例子。下面列出了整个例外情况。我是Hadoop新手,我可能做了一些愚蠢的事情。如有任何建议,将不胜感激

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)
anuj@anuj-VPCEA13EN:~/hadoop$bin/hadoop jar hadoop示例-*.jar grep输入输出'dfs[a-z.]+'
11/12/11 17:38:22 INFO util.NativeCodeLoader:加载了本机hadoop库
11/12/11 17:38:22信息映射。文件输入格式:要处理的总输入路径:7
11/12/11 17:38:22信息映射。作业客户端:正在运行作业:作业\u本地\u 0001
11/12/11 17:38:22 INFO util.ProcessTree:setsid已退出,退出代码为0
11/12/11 17:38:22信息映射。任务:使用ResourceCalculatorPlugin:org.apache.hadoop.util。LinuxResourceCalculatorPlugin@e49dcd
11/12/11 17:38:22信息映射。映射任务:numReduceTasks:1
11/12/11 17:38:22 INFO mapred.MapTask:io.sort.mb=100
11/12/11 17:38:22警告映射。本地JobRunner:job\u local\u 0001
java.lang.OutOfMemoryError:java堆空间
位于org.apache.hadoop.mapred.MapTask$MapOutputBuffer。(MapTask.java:949)
位于org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:428)
位于org.apache.hadoop.mapred.MapTask.run(MapTask.java:372)
位于org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)
11/12/11 17:38:23信息映射。作业客户端:映射0%减少0%
11/12/11 17:38:23信息映射。JobClient:作业完成:作业\u本地\u 0001
11/12/11 17:38:23信息映射。作业客户端:计数器:0
11/12/11 17:38:23信息映射。作业客户端:作业失败:NA
java.io.IOException:作业失败!
位于org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1257)
位于org.apache.hadoop.examples.Grep.run(Grep.java:69)
位于org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
位于org.apache.hadoop.examples.Grep.main(Grep.java:93)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:68)
位于org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:139)
位于org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:64)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.apache.hadoop.util.RunJar.main(RunJar.java:156)

您可以通过编辑conf/mapred-site.xml文件并添加以下属性来分配更多内存:

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

mapred.child.java.opts
-Xmx1024m

这将使用更多堆空间启动hadoop JVM。

按如下方式运行作业:

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

堆空间默认设置为32MB或64MB。Tudor指出,您可以增加属性文件中的堆空间,也可以通过为此特定作业设置此属性来更改此特定作业的堆空间。

另一种可能是编辑
hadoop env.sh
,其中包含
导出hadoop\u CLIENT\u OPTS=“-Xmx128m$hadoop\u CLIENT\u OPTS”

将128m更改为1024m对我的情况很有帮助(Debian上的Hadoop 1.0.0.1)。

您可以通过编辑文件
/etc/Hadoop/Hadoop env.sh
来解决此问题

Hadoop赋予/etc/Hadoop config目录优先于conf目录


我也遇到了同样的情况。

对于任何使用RPM或DEB软件包的人来说,文档和常见建议都是误导性的。这些包将hadoop配置文件安装到/etc/hadoop中。这些设置将优先于其他设置

/etc/hadoop/hadoop-env.sh设置hadoop的最大java堆内存,默认为:

export HADOOP_CLIENT_OPTS="-Xmx128m $HADOOP_CLIENT_OPTS" export HADOOP_CLIENT_OPTS=“-Xmx128m$HADOOP_CLIENT_OPTS” 此Xmx设置太低,只需将其更改为此,然后重新运行

export HADOOP_CLIENT_OPTS="-Xmx2048m $HADOOP_CLIENT_OPTS"
export HADOOP_CLIENT_OPTS=“-Xmx2048m$HADOOP_CLIENT_OPTS”我从二进制tar安装了HADOOP 1.0.4,出现了内存不足问题。我试过都铎、扎克·加纳、尼桑·纳格瓦尼和安德里斯·伯克曼尼斯的解决方案,但都不适合我

编辑bin/hadoop以忽略$hadoop_CLIENT_选项对我来说很有用:

...
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 "
...
. conf/hadoop-env.sh

我假设有更好的方法可以做到这一点,但我找不到。

在尝试了这么多组合之后,最后我得出结论,我的环境(Ubuntu 12.04,Hadoop 1.0.4)上的相同错误是由于两个问题造成的

  • 和上面提到的扎克玩家一样
  • 不要忘记先执行“ssh localhost”。信不信由你!ssh也不会在Java堆空间上抛出错误消息

  • Ubuntu也有同样的例外,Hadoop 1.1.1。解决方案很简单——编辑shell变量$HADOOP\u CLIENT\u OPTS,由一些init脚本设置。但是我们花了很长时间才找到答案,我们面临着同样的情况

    修改hadoop env.sh对我来说是可行的

    EXPORT HADOOP\u HEAPSIZE
    将被注释,取消注释并提供您选择的大小


    默认情况下,
    HEAPSIZE
    assigned为1000MB。

    通过运行以下命令导出变量对我有效:

    ...
    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 "
    ...
    
    . conf/hadoop-env.sh
    

    在使用DEB安装的Ubuntu上(至少对于Hadoop 1.2.1),有一个
    /etc/profile.d/Hadoop env.sh
    符号链接被创建为
    /etc/Hadoop/Hadoop env.sh
    ,这会导致每次登录时加载它。根据我的经验,这不是必需的,因为
    /usr/bin/Hadoop
    包装器本身最终会调用它(通过
    /usr/libexec/hadoop config.sh
    )。在我的系统上,我删除了符号链接,并且在更改
    -Xmx<property>  
       <name>mapreduce.map.java.opts</name>  
       <value>-Xmx1638m</value>
    </property>
    <property>  
       <name>mapreduce.reduce.java.opts</name>  
       <value>-Xmx3278m</value>
    </property>
    
    [
      {
        "Classification": "hadoop-env",
        "Properties": {},
        "Configurations": [
          {
            "Classification": "export",
            "Properties": {
              "HADOOP_HEAPSIZE": "2048"
            },
            "Configurations": []
          }
        ]
      }
    ]