【问题标题】:Hadoop streaming "GC overhead limit exceeded"Hadoop 流“超出 GC 开销限制”
【发布时间】:2015-10-26 08:38:50
【问题描述】:

我正在运行这个命令:

hadoop jar hadoop-streaming.jar -D stream.tmpdir=/tmp -input "<input dir>"  -output "<output dir>" -mapper "grep 20151026" -reducer "wc -l"

其中&lt;input dir&gt; 是一个包含许多avro 文件的目录。

得到这个错误:

线程“主”java.lang.OutOfMemoryError 中的异常:GC 开销 超出限制 org.apache.hadoop.hdfs.protocol.DatanodeID.updateXferAddrAndInvalidateHashCode(DatanodeID.java:287) 在 org.apache.hadoop.hdfs.protocol.DatanodeID.(DatanodeID.java:91) 在 org.apache.hadoop.hdfs.protocol.DatanodeInfo.(DatanodeInfo.java:136) 在 org.apache.hadoop.hdfs.protocol.DatanodeInfo.(DatanodeInfo.java:122) 在 org.apache.hadoop.hdfs.protocolPB.PBHelper.convert(PBHelper.java:633) 在 org.apache.hadoop.hdfs.protocolPB.PBHelper.convert(PBHelper.java:793) 在 org.apache.hadoop.hdfs.protocolPB.PBHelper.convertLocatedBlock(PBHelper.java:1252) 在 org.apache.hadoop.hdfs.protocolPB.PBHelper.convert(PBHelper.java:1270) 在 org.apache.hadoop.hdfs.protocolPB.PBHelper.convert(PBHelper.java:1413) 在 org.apache.hadoop.hdfs.protocolPB.PBHelper.convert(PBHelper.java:1524) 在 org.apache.hadoop.hdfs.protocolPB.PBHelper.convert(PBHelper.java:1533) 在 org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getListing(ClientNamenodeProtocolTranslatorPB.java:557) 在 sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:187) 在 org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102) 在 com.sun.proxy.$Proxy15.getListing(未知来源) org.apache.hadoop.hdfs.DFSClient.listPaths(DFSClient.java:1969) 在 org.apache.hadoop.hdfs.DistributedFileSystem$DirListingIterator.hasNextNoFilter(DistributedFileSystem.java:888) 在 org.apache.hadoop.hdfs.DistributedFileSystem$DirListingIterator.hasNext(DistributedFileSystem.java:863) 在 org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:267) 在 org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:228) 在 org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:313) 在 org.apache.hadoop.mapreduce.JobSubmitter.writeOldSplits(JobSubmitter.java:624) 在 org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:616) 在 org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:492) 在 org.apache.hadoop.mapreduce.Job$10.run(Job.java:1296) 在 org.apache.hadoop.mapreduce.Job$10.run(Job.java:1293) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:415)

如何解决这个问题?

【问题讨论】:

    标签: hadoop out-of-memory hadoop-streaming


    【解决方案1】:

    花了一些时间,但我找到了解决方案here

    在命令前添加HADOOP_CLIENT_OPTS="-Xmx1024M" 可以解决问题。

    最后的命令行是:

    HADOOP_CLIENT_OPTS="-Xmx1024M" hadoop jar hadoop-streaming.jar -D stream.tmpdir=/tmp -input "<input dir>"  -output "<output dir>" -mapper "grep 20151026" -reducer "wc -l"
    

    【讨论】:

      猜你喜欢
      • 2011-05-21
      • 2017-12-27
      • 2013-07-13
      • 2018-03-29
      • 2012-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多