spark+hive执行时报java.lang.OutOfMemoryError:GC overhead limit exceeded

java.lang.OutOfMemoryError:GC overhead limit exceeded

今天临时接到了一个统计数据的需求,架构就是通过scala+spark来统计hive中的表,首先要明确这里的scala语言运行在JVM上,所以看到上面的这个报错对于java开发来说应该会见到,应该是GC的问题。

GC出问题了,整体上就要从两个方面去考虑,一是自己写的程序代码是不是有问题,由于我这里的代码很简单,只是见到的执行了一个sql,而且sql没有更好的优化方案了,所以排除了程序代码的问题;二就是相应的内存是不是给的少了,因为这里要处理的表的数据量特别大,不是java经常操作的mysql这种数据库处理的量级,所以第一时间去看了spark-shell的执行脚本里的一些配置,也从网上百度了一些博客,有的告诉调整executor-memory的大小,我试了没有效果,后来是看到了另一篇博客告诉修改driver-memory的大小(2g调整到了8g),解决上面出现的问题

解决了这个问题之后,自己对于spark-shell脚本里的这些配置都是干嘛的,就特别想弄清楚,于是在spakr的中文文档里找到了一些配置相关的信息,有需要可以自行去找个中文文档里去看一下,下面我列出几个我想弄明白的一些配置

--num-executors  配置Executor的数量
--driver-memory  配置Driver内存
--executor-memory  配置每个Executor的内存大小
--executor-cores  配置每个Executor的CPU core数量

官网上还有其它的一些配置,我这里就不一一列举了,我在spakr简单了解这篇博客简单介绍了使用spark来更快速的操作hive中的表,但是这些driver,executor什么的对于我来说还是有点陌生,所以决定了解一下spark这些组件和它的执行流程

首先spakr中有master,worker,driver,executor等等几个名词,master,worker是物理节点,driver,executor是进程

一个spark集群可以有多个master和多个worker节点,一台机器既可以作为master,也可以作为worker,master节点负责管理worker节点,我们要执行的应用也从这里发起;worker节点管理executor进程,并且与master节点进行通讯;

driver(也叫驱动器)在我们执行我们的代码的时候就会创建一个driver进程,并且根据相关的配置会占据一部分资源,主要是cpu core和memory,driver首先会向集群管理(standalone,yarn,mesos)申请执行代码需要的资源,也就是executor,
并且负责将任务切分成多个stage交给executor执行。driver既可以运行在master节点,也可以运行在worker节点,和配置有关。

executor(也叫执行器)运行在worker节点,上面提到driver会将应用切分成多个stage,交给executor执行,每个stage里又一个taskSet,每个taskSet里有多个task,一个task需要一个线程来执行,并且executor可以将每个task执行的中间结果保存在内存中,来提高运算的速度。

下面这几篇博客介绍的要比我写的更清楚,更清晰

参考博客:
https://blog.csdn.net/weixin_34404393/article/details/92525052
https://blog.csdn.net/hongmofang10/article/details/84587262?utm_source=app&app_version=4.15.2
https://blog.csdn.net/Young_IT/article/details/133808672

# 是不是一定要有所失,才能有所悟

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值