背景:
最近大数据平台为租户经分系统提供运算及存储能力,经分的资源需求如下
Memory: 6T
CPU: 1600 c
存储: 600T
文件系统:HDFS
运算组件: hive on spark
权限管理:sentry
问题描述:
为经分系统分配完租户在运行SPARK作业的时候,会重现任力僵死的情况,后台hiveserver2登录,一直卡在登录命令行,查看hive日志发现过多的GC 等待
通过jstat 查看FGC记录(注,这是更改后的图,更改前的GC图未保存,当时FGC 一分钟达到200多次,E,O区一直在100%)。
再通过jmap 查看下heap信息(此图也是更改后的图,当时原图未保留,原MaxHeapSize=512M)。
通过以上分析可以定们到JVM的堆信息太小,但当时部署时更改了hive-env.sh中的JVM信息了
但我们通过jmap查看只分到了512M内存,问题在哪儿呢。
通过jinfo看下加载的命令信息。
看到加载了xmx=512M,但为何是512M呢,经分析,是hive做为hadoop的客户端加载hadoop的配置文件,hadoop-env.sh,如下图
[
在hivesiver2加载的时候会先加载hive-env.sh再加载hadoop-env.sh 的客户端参数HADOOP_CLIENT_OPTS,即然我们知道是加载的HADOOP_CLIENT_OPTS参数。我们只要更改hive-env.sh
增加如下配置。
重启hiveserver2可以看到hiveserver2的heap大小已变为8192M,前台作业及hive
on spark作业正常(经15天的运行再未出出僵死的情况。)