我在进行两个大表的join时,任务显示成功,但Hadoop出现以下异常:
报出错误如下:
java.lang.RuntimeException:java.lang.reflect.InvocationTargetException
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:81)
at org.apache.hadoop.io.WritableUtils.clone(WritableUtils.java:231)
at com.***.***.ajoin.Exception.regroup(ExecReducer.java:239)
at com.***.***.ajoin.Exception.reduce(ExecReducer.java:263)
at com.***.***.ajoin.Exception.regroup(ExecReducer.java:1)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:430)
at org.apache.hadoop.mapred.child.main(Child.java:155)
Caused by:java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedConstructorAccessor6.newInstance(Unknow Source)
at sun.reflect.DelegationConstructorAccessorImp1.newInstance(DelegatingConstructorA
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:79)
... 6 more
Caused by:java.lang.OutOfMemoryError:java heap space
at java.nio.ByteBuffer.allocate(ByteBuffer.java:312)
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:760)
at org.apache.hadoop.io.Text.encode(Text.java:388)
at org.apache.hadoop.io.Text.set(Text.java:178)
at org.apache.hadoop.io.Text.(Text.java:81)
at org.apache.hadoop.contrib.utils.join.TaggedMapOutput.(TaggedMapOut.java:37)
at com.***.***.ajoin.AjoinTaggedMapOutput.(AjoinTaggedMapOutput.java:15)
... 10 more
以及exception: java.lang.OutOfMemoryError: GC overhead limit exceeded
hadoop给每一个进程的空间默认是200M以上(具体不清楚,就是很小),可将这个参数调整以下,调整方法如下:
进入hadoop安装目录,conf文件下,编辑hadoop-site.xml文件,添加或修改
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx1024m</value>
</property>
该参数设置了任务进程的jvm的使用内存,我设置为1G,可视个人情况来定。
Java has a couple of settings that help control how much memory it uses:
- -Xmx sets the maximum memory heap size
- -Xms sets the minimum memory heap size
这个参数只能使从修改过的服务器提交的任务占有1G空间,其他服务器提交的保持各自的状态。
修改整个机群:
我首先修改hadoop集群的配置hadoop-release/conf/hadoop-default.xml,将该配置修改为-Xmx2048m
任何同步所有节点的该配置,然后重启这个集群。
然后运行任务发现,那个task的java进程仍然是运行-Xmx200m参数下,为什么?
原来-Xmx200m参数来至与提交job的客户端参数,因为offer提交job的机器在44.1上,在44.1上的hadoop客户端配置是-Xmx200m,这样提交的job会使用该配置。
后面将hadoop客户端配置修改为-Xmx1048m,重新运行一个job,查看hadoop集群的task进程,
已经发现进程已经运行在-Xmx1048m参数下。
分享到:
相关推荐
但是在使用 Hadoop 过程中,我们经常会遇到一些错误和问题,本文将为您提供一些常见的 Hadoop 故障解决方法。 一、Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out 这个错误是由于系统默认的打开...
如果在运行过程中出现`java.lang.OutOfMemoryError: Java heap space`错误,则需要调整JVM参数。在`Run Configurations`中的`VM Arguments`中加入以下参数:`-Xms512m -Xmx1024m -XX:MaxPermSize=256m`。 5. **...
- **java.lang.OutOfMemoryError: Java heap space**:表示Java虚拟机的堆内存不足,可以通过调整JVM的参数来解决。 **7.5 防火墙的端口开放要求** - **与HDFS有关的地址及端口属性**:为了保证HDFS的正常运行,...
在使用Hadoop集群的过程中,可能会遇到一系列的错误和问题,这些问题主要集中在集群的启动、在Master上运行示例以及在Windows环境下使用Eclipse运行程序时。以下是对这些常见错误的详细解析和解决策略: 1. **启动...
在Hive on Spark MR(MapReduce)数据开发中,开发者经常遇到各种问题,这些问题往往阻碍了工作效率。以下是一些常见的问题及其解决方案: 1. **Shuffle in Fetcher#6 错误** 当Hive作业处理大数据量时,可能会...
在启动Hive的过程中可能会遇到不同的错误,比如Java内存溢出错误(java.lang.OutOfMemoryError: Java heap space),这个问题通常是由于JVM配置的堆内存太小,无法满足Hive运行的需求。此时可能需要调整Hadoop或Hive...