![](https://img-blog.csdnimg.cn/20210725181507365.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Apache Spark
文章平均质量分 63
Apache Spark™ is a unified analytics engine for large-scale data processing.
lucklilili
这个作者很懒,什么都没留下…
展开
-
Spark 调优攻略上册
简介:整理⼈李亚鹏,希望帮助大家对Apache spark、Jindo spark使用、调优有所帮助。《Spark 调优攻略上册》是整合互联⽹优质的Blog与PPT形成的攻略,它主要对于企业级⼤规模数据计算引擎Spark多维度优化策略。本次整理不单单是Apache spark还涵盖了Data Lake和阿⾥云EMR智能团队研发的Jindo-Spark是如何基于Apache spark进⾏多维优化及实现原理,让读者能够知其然且知其所以然。原创 2022-12-04 10:23:56 · 281 阅读 · 0 评论 -
EMR-Jindo Spark 核心引擎优化
indo-Spark 是阿里云智能E-MapReduce 团队在开源的Apache Spark 基础上自主研发的分布式云原生 OLAP 引擎,已经在近千E-MapReduce 客户中大规模部署使用。Jindo Spark 在开源版本基础上做了大量优化和扩展,深度集成和连接了众多阿里云基础服务。凭借该引擎,EMR 成为第一个云上 TPC-DS 成绩提交者。经过持续不断地内核优化,目前基于最新 EMR-Jindo 引擎的 TPC-DS 成绩又有了大幅提高,达到了3615071,成本降低到 0.76 CNY。原创 2022-11-30 10:11:14 · 689 阅读 · 0 评论 -
Spark Relational Cache实现亚秒级响应的交互式分析
Spark Relational Cache实现亚秒级响应的交互式分析原创 2022-11-17 10:12:12 · 609 阅读 · 0 评论 -
Spark 3.0 Dynamic Partition Pruning 动态裁剪分区
Dynamic Partition Pruning动态裁剪分区原创 2022-06-05 19:07:17 · 599 阅读 · 0 评论 -
Spark源码篇-分区:读取外部数据
package pro_sparkimport org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}/** * @author YaPeng Li * @version 0.0.1 **/object FileCreateRDDByPartition04{ def main(args: Array[String]): Unit = { val sparkConf: Spa.原创 2022-05-15 19:12:53 · 276 阅读 · 0 评论 -
Spark源码篇-分区:读取内存数据
package pro_sparkimport org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}/** * @author YaPeng Li * @version 0.0.1 * @description: TODO * @date 2022/5/14 上午11:08 */object ArrayCreateRDDByPartition03 { def main(arg.原创 2022-05-15 12:47:45 · 327 阅读 · 0 评论 -
Spark优化篇:数据倾斜解决
数据倾斜数据倾斜是指我们在并行进行数据处理的时候,由于数据散列引起Spark的单个Partition的分布不均,导致大量的数据集中分布到一台或者几台计算节点上,导致处理速度远低于平均计算速度,从而拖延导致整个计算过程过慢,影响整个计算性能。数据倾斜带来的问题单个或者多个Task长尾执行,拖延整个任务运行时间,导致整体耗时过大。单个Task处理数据过多,很容易导致OOM。数据倾斜的产生原因数据倾斜一般是发生在 shuffle 类的算子,比如 distinct、groupByKey、redu原创 2022-04-19 17:22:09 · 1931 阅读 · 6 评论 -
Spark优化篇:RBO/CBO
Adaptive Query Execution(AQE)在之前的版本里已经有所实现,但是之前的框架存在一些缺陷,导致使用不是很多,在Spark3.0中Databricks(Spark初创团队创建的大数据与AI智能公司)和Intel的工程师合作,解决了相关的问题。在Spark1.0中所有的Catalyst Optimizer都是基于规则(rule)优化的。为了产生比较好的查询规则,优化器需要理解数据的特性,于是在Spark2.0中引入了基于代价的优化器 (cost-basedoptimize...原创 2022-04-17 12:16:56 · 4414 阅读 · 0 评论 -
Spark优化篇:动态内存管理
Spark内存管理分为静态内存管理和统一内存管理,Spark1.6之前使用的是静态内存管理,Spark1.6之后的版本默认使用的是统一内存管理。动态内存机制图:内存估算:Other Memory = 自定义数据结构*每个 Executor 核数解:Other Memory基本很简单,就是根据自定义的Map、List * executor-cores = ?Storage Memory = 广播变量 + cache/Executor 数量设:数据100GB、num-ex..原创 2022-04-15 11:08:09 · 2632 阅读 · 0 评论 -
Spark优化篇:Explain
本章,主要针对Spark3.x版本后Explain去进行详细的介绍,Explain也是企业生产调优的一个重要方式、策略。执行计划流程图:执行计划阶段详解:阶段 阶段类型 解释 1 Unresolved Logical Plan 检查 SQL 语法上是否有问题,然后生成 Unresolved(未决断)的逻辑计划, 2 Logical Plan 通过访问 Spark 中的 Catalog 存储库来解析验证语义、列名、类型、表名等。 3 Opt原创 2022-04-14 18:04:55 · 1607 阅读 · 0 评论 -
Spark on yarn 环境运行
Launching Spark on YARNEnsure thatHADOOP_CONF_DIRorYARN_CONF_DIRpoints to the directory which contains the (client side) configuration files for the Hadoop cluster. These configs are used to write to HDFS and connect to the YARN ResourceManager. The ...原创 2022-04-12 17:53:02 · 1513 阅读 · 0 评论 -
Apache Spark 3.0:全新功能知多少
Spark3.0解决了超过3400个JIRAs,历时一年多,是整个社区集体智慧的成果。Spark SQL和 Spark Cores是其中的核心模块,其余模块如PySpark等模块均是建立在两者之上。Spark3.0新增 了太多的功能,无法一一列举,下图是其中24个相对来说比较重要的新功能,下文将会围绕这些进行简单介绍。 性能相关的新功能主要有: Adaptive Query Execution 自适应查询 Dynamic Partition Pruning 动态裁剪分区 Quer.原创 2022-03-10 16:10:36 · 2353 阅读 · 0 评论 -
20 Spark on SQL语法优化
SparkSQL 在整个执行计划处理的过程中,使用了 Catalyst 优化器。catalyst优化器原理基于RBO的优化在 Spark 3.0 版本中,Catalyst 总共有 81 条优化规则(Rules),分成 27 组(Batches),其中有些规则会被归类到多个分组里。因此,如果不考虑规则的重复性,27 组算下来总共会有 129 个优化规则。如果从优化效果的角度出发,这些规则可以归纳到以下 3 个范畴:谓词下推(Predicate Pushdown)将 过 滤 条 件 的 ..原创 2022-01-13 20:22:09 · 850 阅读 · 0 评论 -
19 Spark on 动态加载属性
Spark provides three locations to configure the system:Spark propertiescontrol most application parameters and can be set by using aSparkConfobject, or through Java system properties. Environment variablescan be used to set per-machine settings, suc...原创 2022-01-11 09:54:06 · 1788 阅读 · 0 评论 -
18 Spark on EXPLAIN性能调优
DescriptionThe EXPLAIN statement is used to provide logical/physical plans for an input statement. By default, this clause provides information about a physical plan only.EXPLAIN语句用于为输入语句提供逻辑/物理计划。默认情况下,此子句仅提供有关物理计划的信息。SyntaxEXPLAIN [ EXTENDED | CODEG原创 2022-01-07 11:35:26 · 859 阅读 · 0 评论 -
17 Spark on SQL
DataFrame在Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。DataFrame与RDD的主要区别在于,前者带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。这使得Spark SQL得以洞察更多的结构信息,从而对藏于DataFrame背后的数据源以及作用于DataFrame之上的变换进行了针对性的优化,最终达到大幅提升运行时效率的目标。反观RDD,由于无从...原创 2022-01-05 20:10:59 · 77 阅读 · 0 评论 -
16 Spark on Shuffle原理解析
ShuffleMapStage 、 ResultStage在划分 stage 时,最后一个 stage 称为 finalStage,它本质上是一个 ResultStage 对象,前面的所有 stage 被称为 ShuffleMapStage。ShuffleMapStage 的结束伴随着 shuffle 文件的写磁盘。ResultStage 基本上对应代码中的 action 算子,即将一个函数应用在 RDD 的各个 partition的数据集上,意味着一个 job 的运行结束。HashSh原创 2022-01-04 16:20:53 · 130 阅读 · 0 评论 -
15 Spark on 内部通讯架构
Spark中通信框架的发展:Spark早期版本中采用Akka作为内部通信部件。Spark1.3中引入Netty通信框架,为了解决Shuffle的大数据传输问题使用Spark1.6中Akka和Netty可以配置使用。Netty完全实现了Akka在Spark中的功能。Spark2.0系列中,Spark抛弃Akka,使用Netty。Spark2.x版本使用Netty通讯框架作为内部通讯组件。Spark基于Netty新的RPC框架借鉴...原创 2022-01-04 15:54:06 · 1522 阅读 · 0 评论 -
14 Spark on RDD 广播变量
Spark的三大核心数据结构:RDD、累加器(只写不读)、广播变量(只读不写)广播变量用来高效分发较大的对象。向所有工作节点发送一个较大的只读值,以供一个或多个 Spark 操作使用。比如,如果你的应用需要向所有节点发送一个较大的只读查询表,广播变量用起来都很顺手。在多个并行操作中使用同一个变量,但是 Spark 会为每个任务分别发送。广播变量原理初始的时候,就在Drvier上有一份副本。task在运行的时候,想要使用广播变量中的数据,此时首先会在自己本地的Executor对应的BlockM原创 2022-01-03 16:42:10 · 147 阅读 · 0 评论 -
13 Spark on RDD 全局累加器
Spark的三大核心数据结构:RDD、累加器(只写不读)、广播变量(只读不写)在spark应用程序中,我们经常会有这样的需求,如异常监控,调试,记录符合某特性的数据的数目,这种需求都需要用到计数器,如果一个变量不被声明为一个累加器,那么它将在被改变时不会再driver端进行全局汇总,即在分布式运行时每个task运行的只是原始变量的一个副本,并不能改变原始变量的值,但是当这个变量被声明为累加器后,该变量就会有分布式计数的功能。来个简单的例子,看为什么要使用累加器object Acc { d原创 2022-01-03 16:38:11 · 373 阅读 · 0 评论 -
12 Spark on RDD 分区器
RDD 分区器Spark 目前支持 Hash 分区和 Range 分区,和用户自定义分区。Hash 分区为当前的默认分区。分区器直接决定了 RDD 中分区的个数、RDD 中每条数据经过 Shuffle 后进入哪个分区,进而决定了 Reduce 的个数。只有 Key-Value 类型的 RDD 才有分区器,非 Key-Value 类型的 RDD 分区的值是 None每个 RDD 的分区 ID 范围:0 ~ (numPartitions - 1),决定这个值是属于那个分区的。Hash 分区:对于给定的原创 2022-01-03 16:27:57 · 336 阅读 · 0 评论 -
11 Spark on RDD CheckPoint
所谓的检查点其实就是通过将 RDD 中间结果写入磁盘由于血缘依赖过长会造成容错成本过高,这样就不如在中间阶段做检查点容错,如果检查点之后有节点出现问题,可以从检查点开始重做血缘,减少了开销。对 RDD 进行 checkpoint 操作并不会马上被执行,必须执行 Action 操作才能触发。sc.setCheckpointDir("/checkpoint1")val lineRdd: RDD[String] = sc.textFile("input/1.txt")val wordRdd: RDD原创 2022-01-03 15:06:57 · 255 阅读 · 0 评论 -
10 Spark on RDD Cache
RDD 通过 Cache 或者 Persist 方法将前面的计算结果缓存,默认情况下会把数据以缓存在 JVM 的堆内存中。但是并不是这两个方法被调用时立即缓存,而是触发后面的 action 算子时,该 RDD 将会被缓存在计算节点的内存中,并供后面重用,写两个列子参考下:CASE01:直接,复用RDD不使用Cache函数val list = List("Hello Scala", "Hello Spark", "Hello Python")val rdd = sparkContext.make原创 2022-01-03 15:00:16 · 324 阅读 · 0 评论 -
09 Spark on RDD 阶段划分
DAG(Directed Acyclic Graph)有向无环图是由点和线组成的拓扑图形,该图形具有方向,不会闭环。例如,DAG 记录了 RDD 的转换过程和任务的阶段。Application:初始化一个SparkContext即生成一个Application;Job:一个 Action 算子就会生成一个 Job;Stage:Stage 等于宽依赖(ShuffleDependency)的个数加 1;Task:一个 Stage 阶段中,最后一个 RDD 的分区个数就是 T...原创 2022-01-02 17:26:11 · 123 阅读 · 0 评论 -
08 Spark on RDD 依赖关系
RDD依赖关系分为宽依赖ShuffleDependency、窄依赖OneToOneDependency。窄依赖就是父RDD的一个分区,最多只能给子RDD的一个分区使用,就是典型的OneToOne关系。如图所示:Represents a one-to-one dependency between partitions of the parent and child RDDs.宽依赖是指父RDD的一个分区被子RDD的多个分区使用,是1对多的关系ShuffleDependenc..原创 2022-01-02 17:02:10 · 61 阅读 · 0 评论 -
07 Spark on RDD 血缘关系
RDD只支持粗粒度转换,即在大量记录上执行的单个操作。将创建RDD的一系列Lineage(血统)记录下来,以便恢复丢失的分区。RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。通过,RDD的toDebugString函数我们可以看到响应的血缘关系。import org.apache.spark.rdd.RDDimport org.apache.spark.{SparkCon...原创 2022-01-02 16:47:55 · 468 阅读 · 0 评论 -
06 Spark on RDD序列化问题
闭包检查从计算的角度,算子以外的代码都是在Driver端执行,算子里面的代码都是在Executor]端执行。那么在scala的函数式编程中,就会导致算子内经常会用到算子外的数据,这样就形成了闭包的效果,如果使用的算子外的数据无法序列化,就意味着无法传值给Executor端执行,就会发生错误,所以需要在执行任务计算前,检测闭包内的对象是否可以进行序列化,这个操作我们称之为闭包检测。Scala2.12版本后闭包编译方式发生了改变。序列化方法和属性从计算的角度,算子以外的代码都是在...原创 2021-12-28 20:38:53 · 604 阅读 · 0 评论 -
02 Spark on RDD
Direct Known Subclasses:BaseRRDD,CoGroupedRDD,EdgeRDD,HadoopRDD,JdbcRDD,NewHadoopRDD,PartitionPruningRDD,ShuffledRDD,UnionRDD,VertexRDDpublic abstract class RDD<T>extends java.lang.Objectimplements scala.SerializableA Resilient Dist...原创 2021-12-27 11:34:58 · 213 阅读 · 0 评论 -
01 Spark on WordCount
import org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}/** * @author YaPeng Li * @version 0.0.1 **/object WordCount { def main(args: Array[String]): Unit = { val conf: SparkConf = new SparkConf().setAppName("Spar.原创 2021-12-21 20:42:38 · 592 阅读 · 0 评论 -
Spark优化篇:资源调优
Spark性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行后面论述的性能调优策略。资源的分配在使用脚本提交Spark任务时进行指定,标准的Spark任务提交脚本如下所示:bin/spark-submit \--class com.xxx.xxx.Analysis \--master yarn--deploy-mode cluster--num-executors 20...原创 2021-09-21 13:39:09 · 450 阅读 · 0 评论 -
Spark 3.0.0 New features
Apache Spark 3.0.0 is the first release of the 3.x line. The vote passed on the 10th of June, 2020. This release is based on git tag v3.0.0 which includes all commits up to June 10. Apache Spark 3.0 builds on many of the innovations from Spark 2.x, bringin原创 2021-07-25 17:01:57 · 205 阅读 · 0 评论