大数据技术之Hive on Spark调优

第1章 集群环境概述
1.1 集群配置概述
所用集群由5台节点构成,其中2台为master节点,用于部署HDFS的NameNode,Yarn的ResourceManager等角色,另外3台为worker节点,用于部署HDFS的DataNode、Yarn的NodeManager等角色。
Master节点配置为16核CPU、64G内存。
Workder节点配置为32核CPU、128G内存。
1.2 集群规划概述
具体集群规划如下图所示:
hadoop100 hadoop101 hadoop102 hadoop103 hadoop104
master master worker worker worker
NameNode NameNode DataNode DataNode DataNode
ResourceManager ResourceManager NodeManager NodeManager NodeManager
JournalNode JournalNode JournalNode
Zookeeper Zookeeper Zookeeper
Kafka Kafka Kafka
Hiveserver2 Metastore hive-client hive-client hive-client
Spark Spark Spark Spark
DS-master DS-master DS-worker DS-worker DS-worder
Maxwell
mysql
flume flume
第2章 Yarn配置
2.1 Yarn配置说明
需要调整的Yarn参数均与CPU、内存等资源有关,核心配置参数如下。
(1)yarn.nodemanager.resource.memory-mb
该参数的含义是,一个NodeManager节点分配给Container使用的内存。该参数的配置,取决于NodeManager所在节点的总内存容量和该节点运行的其他服务的数量。
考虑上述因素,此处可将该参数设置为64G,如下:

yarn.nodemanager.resource.memory-mb
65536

(2)yarn.nodemanager.resource.cpu-vcores
该参数的含义是,一个NodeManager节点分配给Container使用的CPU核数。该参数的配置,同样取决于NodeManager所在节点的总CPU核数和该节点运行的其他服务。
考虑上述因素,此处可将该参数设置为16。

yarn.nodemanager.resource.cpu-vcores
16

(3)yarn.scheduler.maximum-allocation-mb
该参数的含义是,单个Container能够使用的最大内存。由于Spark的yarn模式下,Driver和Executor都运行在Container中,故该参数不能小于Driver和Executor的内存配置,推荐配置如下:

yarn.scheduler.maximum-allocation-mb
16384

(4)yarn.scheduler.minimum-allocation-mb
该参数的含义是,单个Container能够使用的最小内存,推荐配置如下:

yarn.scheduler.minimum-allocation-mb
512

2.2 Yarn配置实操
(1)修改$HADOOP_HOME/etc/hadoop/yarn-site.xml文件
(2)修改如下参数

yarn.nodemanager.resource.memory-mb
65536


yarn.nodemanager.resource.cpu-vcores
16


yarn.scheduler.maximum-allocation-mb
16384


yarn.scheduler.minimum-allocation-mb
512

(3)分发该配置文件
(4)重启Yarn。
第3章 Spark配置
3.1 Executor配置说明
3.1.1 Executor CPU核数配置
单个Executor的CPU核数,由spark.executor.cores参数决定,建议配置为4-6,具体配置为多少,视具体情况而定,原则是尽量充分利用资源。
此处单个节点共有16个核可供Executor使用,则spark.executor.core配置为4最合适。原因是,若配置为5,则单个节点只能启动3个Executor,会剩余1个核未使用;若配置为6,则只能启动2个Executor,会剩余4个核未使用。
3.1.2 Executor内存配置
Spark在Yarn模式下的Executor内存模型如下图所示:

Executor相关的参数有:spark.executor.memory和spark.executor.memoryOverhead。spark.executor.memory用于指定Executor进程的堆内存大小,这部分内存用于任务的计算和存储;spark.executor.memoryOverhead用于指定Executor进程的堆外内存,这部分内存用于JVM的额外开销,操作系统开销等。两者的和才算一个Executor进程所需的总内存大小。默认情况下spark.executor.memoryOverhead的值等于spark.executor.memory0.1。
以上两个参数的推荐配置思路是,先按照单个NodeManager的核数和单个Executor的核数,计算出每个NodeManager最多能运行多少个Executor。在将NodeManager的总内存平均分配给每个Executor,最后再将单个Executor的内存按照大约10:1的比例分配到spark.executor.memory和spark.executor.memoryOverhead。
根据上述思路,可得到如下关系:
(spark.executor.memory+spark.executor.memoryOverhead)= yarn.nodemanager.resource.memory-mb * (spark.executor.cores/yarn.nodemanager.resource.cpu-vcores)
经计算,此处应做如下配置:
spark.executor.memory 14G
spark.executor.memoryOverhead 2G
3.1.3 Executor个数配置
此处的Executor个数是指分配给一个Spark应用的Executor个数,Executor个数对于Spark应用的执行速度有很大的影响,所以Executor个数的确定十分重要。
一个Spark应用的Executor个数的指定方式有两种,静态分配和动态分配。
1)静态分配
可通过spark.executor.instances指定一个Spark应用启动的Executor个数。这种方式需要自行估计每个Spark应用所需的资源,并为每个应用单独配置Executor个数。
2)动态分配
动态分配可根据一个Spark应用的工作负载,动态的调整其所占用的资源(Executor个数)。这意味着一个Spark应用程序可以在运行的过程中,需要时,申请更多的资源(启动更多的Executor),不用时,便将其释放。
在生产集群中,推荐使用动态分配。动态分配相关参数如下:
#启动动态分配
spark.dynamicAllocation.enabled true
#启用Spark shuffle服务
spark.shuffle.service.enabled true
#Executor个数初始值
spark.dynamicAllocation.initialExecutors 1
#Executor个数最小值
spark.dynamicAllocation.minExecutors 1
#Executor个数最大值
spark.dynamicAllocation.maxExecutors 12
#Executor空闲时长,若某Executor空闲时间超过此值,则会被关闭
spark.dynamicAllocation.executorIdleTimeout 60s
#积压任务等待时长,若有Task等待时间超过此值,则申请启动新的Executor
spark.dynamicAllocation.schedulerBacklogTimeout 1s
#spark shuffle老版本协议
spark.shuffle.useOldFetchProtocol true
说明:Spark shuffle服务的作用是管理Executor中的各Task的输出文件,主要是shuffle过程map端的输出文件。由于启用资源动态分配后,Spark会在一个应用未结束前,将已经完成任务,处于空闲状态的Executor关闭。Executor关闭后,其输出的文件,也就无法供其他Executor使用了。需要启用Spark shuffle服务,来管理各Executor输出的文件,这样就能关闭空闲的Executor,而不影响后续的计算任务了。
3.2 Driver配置说明
Driver主要配置内存即可,相关的参数有spark.driver.memory和spark.driver.memoryOverhead。
spark.driver.memory用于指定Driver进程的堆内存大小,spark.driver.memoryOverhead用于指定Driver进程的堆外内存大小。默认情况下,两者的关系如下:spark.driver.memoryOverhead=spark.driver.memory
0.1。两者的和才算一个Driver进程所需的总内存大小。
一般情况下,按照如下经验进行调整即可:假定yarn.nodemanager.resource.memory-mb设置为X,
若X>50G,则Driver可设置为12G,
若12G<X<50G,则Driver可设置为4G。
若1G<X<12G,则Driver可设置为1G。
此处yarn.nodemanager.resource.memory-mb为64G,则Driver的总内存可分配12G,所以上述两个参数可配置为。
spark.driver.memory 10G
spark.yarn.driver.memoryOverhead 2G
3.3 Spark配置实操
1)修改spark-defaults.conf文件
(1)修改 H I V E H O M E / c o n f / s p a r k − d e f a u l t s . c o n f s p a r k . m a s t e r y a r n s p a r k . e v e n t L o g . e n a b l e d t r u e s p a r k . e v e n t L o g . d i r h d f s : / / m y N a m e S e r v i c e 1 / s p a r k − h i s t o r y s p a r k . e x e c u t o r . c o r e s 4 s p a r k . e x e c u t o r . m e m o r y 14 g s p a r k . e x e c u t o r . m e m o r y O v e r h e a d 2 g s p a r k . d r i v e r . m e m o r y 10 g s p a r k . d r i v e r . m e m o r y O v

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值