Spark
一真居士
雕琢自身,重在忍耐。
展开
-
Spark进阶篇——共享变量
目录共享变量广播变量概述原理实现总结累加器概述实现总结共享变量广播变量概述使用广播变量,每个executor的内存中,只驻留一份变量副本,而不是对每个task都传输一次变量,省去了很多的网络传输,对性能的提升有很大的帮助,而且通过高效的广播算法来减少传输代价。使用广播变量的场景很多,Spark一种常见的优化方式就是小表广播,使用map j...原创 2019-11-22 17:24:59 · 1142 阅读 · 0 评论 -
Spark入门篇——RDD的缓存/持久化
目录RDD的缓存/持久化缓存的意义RDD的缓存方式cache注意事项Checkpoint原理流程缓存和checkpoint的比较例子RDD的缓存/持久化Spark速度非常快的原因之一,就是在不同操作中可以在内存中持久化或缓存数据集。当持久化某个RDD之后,每一个节点都将把计算的分片结果保存在内存中,并且对此RDD或衍生出的RDD进行的其他动作重用。这使得...原创 2019-11-04 14:38:40 · 1055 阅读 · 0 评论 -
Spark入门篇——自定义排序
自定义排序封装到类或者样例类把数据封装到类或者case class中,然后继承Ordered[类型],然后就可以进行排序了,类中指定了排序的规则。如果是class,则需要实现序列化特质——Serializable(否则会报错),如果是case class,可以不实现该序列化特质。这种处理方式,返回值类型是类的实例化对象。def main(args: Array[String]): U...原创 2019-10-29 17:10:32 · 173 阅读 · 0 评论 -
Spark入门篇——RDD的血缘
目录RDD的血缘概述划分依赖的背景划分以来的依据窄依赖宽依赖join的依赖宽依赖窄依赖依赖与Stage的划分Stage的类别依赖与容错转换算子中间发生失败DAG的生成总结RDD的血缘概述RDD可以从本地集合并行化、从外部文件系统、其他RDD转化得到,能从其他RDD通过Transformation创建新的RDD的原因是R...原创 2019-10-21 15:04:25 · 1579 阅读 · 0 评论 -
Spark入门篇——RDD与算子
目录RDD与算子简介创建RDD集合并行化外部文件系统创建父类RDD转换成新的子RDDRDD的属性RDD的分区RDD编程RDD算子TransformationActionRDD与算子简介RDD(Redilient Distrobuted Dataset) 是Spark的计算模型,叫做弹性的分布式数据集,是Spark中最基本的数据抽象,它代表...原创 2019-10-16 18:54:01 · 448 阅读 · 0 评论 -
Spark入门篇——安装及结构说明
目录Spark简介特点集群搭建环境说明软件说明安装启停常用术语ApplicationDriverExecutorCluster ManagerWorkerTaskJobStageDAGSchedulerTaskSchedulerWordCountSpark简介Apache Spark是一种快速、通用、可扩展...原创 2019-10-14 20:30:36 · 271 阅读 · 0 评论 -
Spark三种ShuffleManager
Spark中发生Shuffle时有三种ShuffleManager可供选择:Hash、Sort、Tungsten-sortShuffleManaer。其中默认的是SortShuffleManager。在Spark程序中设置方式:val session = SparkSession.builder() .appName("XXXX") .master("local[...原创 2019-07-22 18:45:37 · 1538 阅读 · 0 评论 -
Spark源码第四篇——从Executor执行Task开始到结果输出
上一篇传送门:https://blog.csdn.net/cw1254332663/article/details/95327497学习的总结,不对之处请大家及时指正,谢谢啦!上回书到,CoarseGrainedSchedulerBackend中的内部类DriverEndpoint把TaskDescription序列化,封装到LaunchTask样例类中。CoarseGrainedEx...原创 2019-07-17 18:45:06 · 406 阅读 · 0 评论 -
Spark源码第三篇——从TaskScheduler处理TaskSet到发送任务到Executor端
上一篇传送门:https://blog.csdn.net/cw1254332663/article/details/95072254学习的总结,不对之处请大家及时指正,谢谢啦!上回我们讲到Stage经过一系列的操作之后,成为了一个TaskSet被发送到了TaskSchedulerImpl中。其调用的方法如下: override def submitTasks(taskSet: Ta...原创 2019-07-10 17:30:50 · 463 阅读 · 0 评论 -
Spark部分调优参数
spark.shuffle.file.buffer默认值:32k参数说明:该参数用于设置shuffle write task的BufferedOutputStream的buffer缓冲大小。将数据写到磁盘文件之前,会先写入buffer缓冲中,待缓冲写满之后,才会溢写到磁盘。调优建议:如果作业可用的内存资源较为充足的话,可以适当增加这个参数的大小(比如64k),从而减少shuffle w...原创 2019-06-29 17:56:27 · 429 阅读 · 0 评论 -
Spark源码第二篇——从提交Stage到发送TaskSet到TaskScheduler
上一篇传送门:https://blog.csdn.net/cw1254332663/article/details/95043364学习的总结,不对之处请大家及时指正,谢谢啦!上回我们讲到深度优先遍历提交Stage中调用了submitMissingTasks方法去提交Stage:private def submitMissingTasks(stage: Stage, jobId: I...原创 2019-07-09 10:03:45 · 344 阅读 · 0 评论 -
Spark源码第一篇——从action算子到DAGScheduler切分Stage
学习的总结,不对之处请大家及时指正,谢谢啦!Spark算子分为两类:Transformation算子、action算子。当程序执行到action算子时才会触发整个Spark程序的真正执行,我们看一下源码。def foreach(f: T => Unit): Unit = withScope { val cleanF = sc.clean(f) //这里是主要的...原创 2019-07-08 13:08:39 · 340 阅读 · 0 评论