问题描述:有个hadoop集群,跑hive任务的时候慢,而且经常跑的跑的就挂了,报内存不够等等的相关异常,需要我们给解决,优化一下配置
问题解决:跑hive慢,一方面是hive语句的问题,另一方面就是hadoop中mapreduce已经yarn的相关配置没有配置好,第一方面需要项目组开发人员自己解决了,学习如何根据业务优化一下sql
参数配置优化就需要平衡集群中机器的内存,处理器和磁盘的使用
Yarn和MapReduce的总的可用内存应考虑到保留的内存
保留内存=保留系统内存+保留其它应用所用内存(比如hbase,spark等)
建议保留的内存如下(以hbase为例):
下面的计算是确定每个节点的Container允许的最大数量:
#Container数量=min(2*CORES, 1.8*DISKS, (可用内存)/最低Container的大小)
最低Container的大小这个值是依赖于可用的RAM数量——在较小的存储节点,最小的Container的大小也应较小。下面的表列出了推荐值:
最后计算的每个Container的内存大小是:
每个Container的内存大小 = max(最小Container内存大小, (总可用内存) /Container数))
其中mapred-site.xml中的与性能有关的主要参数如下:
yarn-site.xml中与性能有关的参数如下:
参数的计算方式如下:
例如:集群节点拥有12个CPU核,48GB内存和12块磁盘
保留内存(Reserved Memory)=6GB系统预留内存+(如果有Hbase)8GB的Hbase内存
最小的容器大小(Min container size)=2GB
容器数目(containers)=min(2*12,1.8*12,(48-6-8)/2)=min(24,21.6,17)=17
每个容器的RAM(RAM-per-container)=max(2,(48-6-8)/17)=max(2,2)=2
以下配置具体参数还是要根据给其它系统预留的内存数而定