以spark1.6为例,使用内存和CPU的无外乎三个:appMaster、driver、executor,下面分别分析spark on yarn的client与cluster模式下的内存和CPU分配
一、vcores
1、driver核数:
	client模式:无
	cluster模式:spark.driver.cores=1(默认)
2、AppMaster核数:
	client模式:spark.yarn.am.cores=1(默认)
	cluster模式:spark.driver.cores=1(默认)
3、executor核数:
	spark.executor.cores=1(默认)
4、executor内每个task使用的核数:
	spark.task.cpus=1(默认)
5、每个executor内能够并行运行的task数:
	spark.executor.cores / spark.task.cpus
6、yarn上启动executor的个数:
	SPARK_EXECUTOR_INSTANCES/spark.executor.instances=2(默认)
7、driver核数 + executor核数 * executor个数 + AppMaster核数(client模式) = 要向yarn申请的总的vcores,
	具体yarn给多少颗vcores,类似于mapreduce on yarn的情况,参考文章:
	https://www.cnblogs.com/yesecangqiong/p/6274427.html
注意---------------------------
	1、:spark.driver.cores只能在cluster模式下使用
	2、spark.executor.instances与spark.dynamicAllocation.enabled不能共同使用,如果两个都做了配置,spark.executor.instances有效
	3、要向使spark.task.cpus>1时起作用,还应该保证yarn的配置文件"capacity-scheduler.xml"中的配置选项"yarn.scheduler.capacity.resource-calculator"
		的值为:"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator",而不应该是默认的"org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator"
		可以参考文章:https://www.cnblogs.com/yesecangqiong/p/10125333.html
二、内存
1、driver需要申请的内存 = 基本内存 + 额外内存
	基本内存:
		spark.driver.memory=1g(默认)
	额外内存:
		1、有参数配置则直接等于参数配置
			spark.yarn.driver.memoryOverhead
		2、无参数配置(即默认)
			max(driver基本内存 * 0.1,384M)
2、appMster需要申请的内存 = 基本内存 + 额外内存(memoryOverhead)
	基本内存:
		client模式:spark.yarn.am.memory=512MB(默认)
		cluster模式:appMaster与driver运行于同一个JVM(yarn上的同一container),决定于:spark.driver.memory=1g(默认)
	额外内存:
		1、有参数配置则直接等于参数配置
			client模式:spark.yarn.am.memoryOverhead
			cluster模式:spark.yarn.driver.memoryOverhead
		2、没有配置相应参数(即默认):
			yarn-client模式:max(AppMaster基本内存 * 0.1,384M)
			yarn-cluster模式:max(Driver基本内存 * 0.1,384M)
3、executor需要申请的内存 = 基本内存 + 额外内存
	基本内存:
		spark.executor.memory=1g(默认)
	额外内存:
		1、有参数配置则直接等于参数配置
			spark.yarn.executor.memoryOverhead
		2、无参数配置(即默认)
			max(executor基本内存 * 0.1,484M)
4、driver内存 + executor内存 * executor个数 + AppMaster内存(client模式) = 要向yarn申请的总的内存,
	具体yarn给多少内存,类似于mapreduce on yarn的情况,参考文章:
	https://www.cnblogs.com/yesecangqiong/p/6274427.html
注意--------------------------------:
	在client模式下,spark.driver.memory不能由代码中的SparkConf配置指定,只能通过配置文件/运行脚本中指定
三、参考官方文档:
	#configuration
	

