我在进行两个大表的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文件,添加或修改
该参数设置了任务进程的jvm的使用内存,我设置为1G,可视个人情况来定。
Java has a couple of settings that help control how much memory it uses:
这个参数只能使从修改过的服务器提交的任务占有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参数下。