sparkcore(sparkCore与sparkSQL运行流程对比)
本篇文章给大家谈谈sparkcore,以及sparkCore与sparkSQL运行流程对比对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
Spark Core 性能调优之配置进程参数
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” 配置项设置为合适大小。还可以设置动态资源调度功能进行优化,详情请参见 。
● 在使用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时,所有任务才执行成功。
sparkcore内存计算弊端
sparkcore内存计算弊端是基于内存。根据查询相关资料信息,Spark的特点是基于内存,也是缺点:没有对内存进行管理,把所有的内存管理都交给应用程序,容易出现OOM(outofmemory内吵扮郑存溢出)。SparkCore:实现了Spark的基本功能,包含RDD、任务调度、内存管理、错误恢复、与缺岩存储系统交互等模升颂块。
[img]SparkCore核心RDD详解及五大特性
Github RDD源码
1、A Resilient Distributed Dataset (RDD), the basic abstraction in Spark.
2、Represents an immutable, partitioned collection of elements that can be operated on in parallel
RDD是Resilient Distributed Dataset(弹性分布式数据集)的简称。RDD的弹性体现在计枝族算方面,当Spark进行计算时,某一阶段出现数据丢失或者故障,可以通过RDD的血缘关系就行修复。
RDD是不可变(immutable)的,一旦创建就不可改变。RDDA--RDDB,RDDA经过转换操作变成RDDB,这两个RDD具有血缘关系,但是是两个不同的RDD,体现了RDD一旦创建就不可变的性质。
RDD由一系列可分区的集合构成,且可以并行化。
RDD定义:
1、是一个抽象类,有诸多子类,比如jdbcRDD/hadoopRDD
2、Serializable
3、Logging()
4、transient
RDD的五大特性
特性1:RDD由一系列的分区构成
特性2:可以在每个分区上作用上一个函数进行计算,对RDD进行计算,本质上就是对RDD的分区进行计算
特性3:RDD之间存在血缘关系,下一个RDD可以通过上一个RDD得到
特性4:RDD是基于 hash-partitioned的分区,是Key-Value形式
特性5:RDD进行计算时遵循数据本地茄凯性颤搭唤,Task会被分配到数据节点上运行。移动计算不移动数据的特性。
RDD的五大特性与RDD源码的对应:
关于sparkcore和sparkCore与sparkSQL运行流程对比的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。