1、根据查询相关资料:driver和executor申请的内存,系统默认会保留300M。
2、采用统一内存分配方式,StorageMemory和ExecutionMemory占用总内存的60%,默认一人一半(50%)。
Spark on YARN模式下,有Driver、ApplicationMaster、Executor三种进程。在任务调度和运行的过程中,Driver和Executor承担了很大的责任,而ApplicationMaster主要负责container的启停。
因而Driver和Executor的参数配置对spark应用的执行有着很大的影响意义。用户可通过如下 *** 作对Spark集群性能做优化。
1. 配置Driver内存。
Driver负责任务的调度,和Executor、AM之间的消息通信。当任务数变多,任务平行度增大时,Driver内存都需要相应增大。可以根据实际任务数量的多少,为Driver设置一个合适的内存。
● 将“spark-defaults.conf”中的“spark.driver.memory”配置项或者“spark-env.sh”中的“SPARK_DRIVER_MEMORY”配置项设置为合适大小。
● 在使用spark-submit命令时,添加“--driver-memory MEM”参数设置内存。
2. 配置Executor个数。
每个Executor每个核同时能跑一个task,所以增加了Executor的个数相当于增大了任务的并发度。在资源充足的情况下,可以相应增加Executor的个数,以提高运行效率。
● 将 “spark-defaults.conf” 中的 “spark.executor.instance” 配置项或者 “spark-env.sh” 中的 “SPARK_EXECUTOR_INSTANCES” 配置项设置为合适大小。还可以设置动态资源调度功能进行优化,详情请参见 www.jianshu.com/writer#/notebooks/15701476/notes/16128092 。
● 在使用spark-submit命令时,添加“--num-executors NUM”参数设置Executor个数。
3. 配置Executor核数。
每个Executor多个核同时能跑多个task,相当于增大了任务的并发度。但是由于所有核共用Executor的内存,所以要在内存和核数之间做好平衡。
● 将“spark-defaults.conf”中的“spark.executor.cores”配置项或者“spark-env.sh”中的“SPARK_EXECUTOR_CORES”配置项设置为合适大小。
● 在使用spark-submit命令时,添加“--executor-cores NUM”参数设置核数。
4. 配置Executor内存。
Executor的内存主要用于任务执行、通信等。当一个任务很大的时候,可能需要较多资源,因而内存也可以做相应的增加;当一个任务较小运行较快时,就可以增大并发度减少内存。
● 将“spark-defaults.conf”中的“spark.executor.memory”配置项或者“spark-env.sh”中的“SPARK_EXECUTOR_MEMORY”配置项设置为合适大小。
● 在使用spark-submit命令时,添加“--executor-memory MEM”参数设置内存。
在执行spark wordcount计算中。1.6T数据,250个executor。
在默认参数下执行失败,出现Futures timed out 和 OOM 错误。
因为数据量大,task数多,而wordcount每个task都比较小,完成速度快。当task数多时driver端相应的一些对象就变大了,而且每个task完成时executor和driver都要通信,这就会导致由于内存不足,进程之间通信断连等问题。
当把Driver的内存设置到4g时,应用成功跑完。
使用ThriftServer执行TPC-DS测试套,默认参数配置下也报了很多错误:Executor
Lost等。而当配置Driver内存为30g,executor核数为2,executor个数为125,executor内存为6g时,所有任务才执行成功。
Blocklet是很多行数据的集合,他的大小是可以配置的,默认大小是64M,Blocklet包含了每列的Column Page Groups。Spark 参数配置的完整方法请参考官方文档Spark Configuration.
Spark有三个位置进行系统配置:属性、环境变量和日志配置。
Spark属性控制大部分的应用程序设置,每个程序分别配置。配置可以直接SparkConf,然后传递给SparkContext,可以用set(),masterURL等方法。后两种方法需要自行添加脚本命令和文件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)