Hadoop运行离线任务,Hive跑MR任务时候,出现Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded

一、首先抛出异常问题

Hadoop运行离线任务,Hive跑MR任务时候,出现Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded_第1张图片

二、引发问题原因:

表连接,左表数据100W,右表数据 300W,进行左右表进行表关联,进行Count进行数据统计,等待运行结果!!!

Hadoop运行离线任务,Hive跑MR任务时候,出现Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded_第2张图片

分析问题,查看上述运行流程,即可了解上述异常,查看详细日志信息,URL:即可见到首页出现的问题

三、查看页面可见,有如下图片

Hadoop运行离线任务,Hive跑MR任务时候,出现Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded_第3张图片

四、由上图和图一可知,此MR程序为 Map端出错,出错程序问题问  内存不足,初步怀疑为 Map端内存不足,因为Hadoop体系太大,配置文件最好不要随意更改,调错,需要一个个测试修改,查询百度资料,查询得知:

可以进入HiveClient查看当前客户端的Map端和Reduce端的内存分配情况

①、查看Map端运行环境的内存

set mapreduce.map.java.opts;

②、查看Reduce端运行环境的内存

set mapreduce.reduce.java.opts;

③、查看Map端和Reduce端一个Job可以申请的内存资源

set mapreduce.map.memory.mb;                                    set mapreduce.reduce.memory.mb;

解释

mapreduce.map.memory.mb: 一个 Map Task 可使用的内存上限(单位:MB),默认为 1024。如果 Map Task 实际使用的资源量超过该值,则会被强制杀死。
mapreduce.reduce.memory.mb: 一个 Reduce Task 可使用的资源上限(单位:MB),默认为 1024。如果 Reduce Task 实际使用的资源量超过该值,则会被强制杀死。

优化前:

Hadoop运行离线任务,Hive跑MR任务时候,出现Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded_第4张图片

修改后:

Hadoop运行离线任务,Hive跑MR任务时候,出现Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded_第5张图片

再次运行百万 SQL

Hadoop运行离线任务,Hive跑MR任务时候,出现Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded_第6张图片

当前问题 已经解决 

参考文档:

https://www.cnblogs.com/yjt1993/p/9483032.html

http://ju.outofmemory.cn/entry/224490

你可能感兴趣的:(Hive,大数据)