![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spark
文章平均质量分 58
阿松0311
这个作者很懒,什么都没留下…
展开
-
Spark系列---SparkSQL动态与反射方式创建DataFrame(Java、Scala版本)
1.动态创建Scheme将非json格式RDD转换成DataFrame,推荐scala版本package com.kevin.scala.dataframe import org.apache.spark.sql.types._import org.apache.spark.sql.{RowFactory, SQLContext}import org.apache.spark.{SparkConf, SparkContext} /** * 动态创建Scheme将非json格式RDD转换成转载 2021-12-19 16:10:58 · 525 阅读 · 0 评论 -
Spark源码——CheckPoint原理
(图片来源:北风网)找到RDD的iterator方法/** * Internal method to this RDD; will read from cache if applicable, or otherwise compute it. * This should ''not'' be called by users directly, but is available for implementors of custom * subclasses of RDD. */.原创 2021-12-17 15:20:07 · 1956 阅读 · 0 评论 -
Spark源码——BlockManager
(图片来源:北风网)源码所在目录:首先进入BlockManagerMasterEndpoint看看/** * BlockManagerMasterEndpoint is an [[ThreadSafeRpcEndpoint]] on the master node to track statuses * of all slaves' block managers. */BlockManagerMasterEndpoint 是主节点上的 [[ThreadSafeRpcEndpoint]].原创 2021-12-17 14:23:10 · 2120 阅读 · 0 评论 -
Spark源码——Shuffle过程
shuffle很重要,调优的重点、性能的杀手未优化的shuffle:(图片来源:北风网)未优化的shuffle有两个特点:spark早期版本中,shuffleMapTask将所有数据写入bucket缓存后,才会刷新到磁盘,但是缓存就容易OOM,所以后来的版本,这个缓存设置了阈值,默认100kb,写入数据达到缓存的阈值后,就会将数据刷新到磁盘。这种就不容易OOM,但是频繁刷新涉及过多IO操作,所以这个阈值也是性能优化的一个点和MapReduce不同,MapReduce需要将所有数据写入本地磁盘文转载 2021-12-16 18:16:11 · 265 阅读 · 0 评论 -
Spark源码——Task执行原理
(图片来源:北风网)从TaskRunner入手进入它的run方法override def run(): Unit = { threadId = Thread.currentThread.getId Thread.currentThread.setName(threadName) val threadMXBean = ManagementFactory.getThreadMXBean val taskMemoryManager = new TaskMem.原创 2021-12-15 21:24:27 · 1241 阅读 · 0 评论 -
Spark源码——Executor
在Worker中启动Executor,实际上是启动了oarseGrainedExecutorBackend其中有个receive方法,是接收Driver注册成功executor之后返回的下消息。override def receive: PartialFunction[Any, Unit] = { case RegisteredExecutor => logInfo("Successfully registered with driver") try {原创 2021-12-15 12:30:57 · 818 阅读 · 0 评论 -
Spark源码——TaskScheduler
在上一篇文章的最后,当stage划分完了,task计算好了最佳位置,就要调用taskScheduler.submitTasks,创建taskSet对象并提交 if (tasks.size > 0) { logInfo("Submitting " + tasks.size + " missing tasks from " + stage + " (" + stage.rdd + ")") stage.pendingPartitions ++= tasks.map(_.parti原创 2021-12-15 11:23:36 · 823 阅读 · 0 评论 -
Spark源码——Job全流程以及DAGScheduler的Stage划分
(图片来源:北风网)进去RDD,随便点击一个action操作,比如foreach操作 /** * Applies a function f to all elements of this RDD. */ def foreach(f: T => Unit): Unit = withScope { val cleanF = sc.clean(f) sc.runJob(this, (iter: Iterator[T]) => iter.foreach(clea.原创 2021-12-14 21:49:50 · 481 阅读 · 0 评论 -
Spark源码——Worker原理
解释:1、master要求worker启动driver和executor2、worker启动driver的一个基本的原理,worker会启动一个线程DriverRunner,然后DriverRunner会去负责启动driver进程,然后在之后对driver进程进行管理3、worker启动executor的一个基本的原理,worker会启动一个线程ExecutorRunner,然后ExecutorRunner会去负责启动executor进程,然后在之后对executor进程进行管理4、driver首.原创 2021-12-14 17:05:40 · 559 阅读 · 0 评论 -
Spark源码——Master资源调度
原理解释:1、首先判断master的状态不是alive的话直接返回,也就是说,standby master是不会进行application等资源的调度的2、对取出workers中所有注册上来上的worker,进行过滤,必须是状态为alive的worker,调用rondom的shuffle方法进行随机的打乱(从第三个worker进行shuffle)3、遍历活着的worker,启动driver,将driver加入都内存缓冲结构中,并将driver从等待的driver的队列中移除4、在workers上启动转载 2021-12-14 14:53:34 · 134 阅读 · 0 评论 -
Spark源码——Master状态改变
executor状态改变(ExecutorStateChanged)1、找到executor对应的applicaiton,然后再反过来通过applicaiton内部的executors缓存获得executor信息2、设置executor的当前状态为LAUNCHING状态,并向driver同步发送ExecutorUpdated消息3、如果executor的状态已经发生变化,从application中移除executor,从运行中executor对应的worker中移除executor4、判断如果ex.转载 2021-12-13 22:41:04 · 108 阅读 · 0 评论 -
Spark源码——注册机制
worker向master注册worker在启动之后,就会向master进行注册对于worker状态为DEAD的,过滤掉。在compeleRecover()中,master在一定时间期限已经完成了恢复,但是发现其中的worker为UNKNOWN的情况下,对worker进行remove,将worker的状态设置为DEAD,如果过了很长时间worker又莫名其妙的向master进行注册的情况下,直接过滤掉。对于worker状态为UNKNOWN,master会将旧的worker信息给清理掉,替换原创 2021-12-13 22:10:13 · 633 阅读 · 0 评论 -
Spark源码——Master主备切换
Master主备切换Master的主备切换分为两种:基于文件系统和基于zookeeper基于文件系统的,spark提供目录保存spark Application和worker的注册信息,并将他们的恢复状态写入该目录,当spark的master节点宕掉的时候,重启master,就能获取application和worker的注册信息。需要手动进行切换基于zookeeper的,用于生产模式。其基本原理是通过zookeeper来选举一个Master,其他的Master处于Standby状态。将Standal原创 2021-12-13 19:27:55 · 611 阅读 · 0 评论 -
Spark源码——SparkContext
图片来源三个重点:TaskScheduler,如何注册的Application、Executor如何反注册DAGSchedulerSparkUITaskSchedulerSparkContext.createTaskScheduler返回一个tuple。追踪进createTaskScheduler:可以看到三个形参,其中master是启动模式,针对不同的master会match不同的启动逻辑看一下standalone模式可以看到,首先创建了TaskSchedulerImpl.原创 2021-12-12 22:53:01 · 332 阅读 · 0 评论 -
Spark内核架构
当我们在服务器执行spark-submit命令后,会将我们的程序提交到spark集群中然后发生下面的事情:启动Driver进程,执行我们的Application我们的程序中会写sparkconf和sparkcontext,所以Driver会初始化SparkContext初始化SparkContext会构造出DAGScheduler和TaskSchedulerTaskTracker会连接集群的Master,注册ApplicationMaster接收到注册请求后,使用资源调度算法,在Spark集群原创 2021-12-12 18:05:06 · 1088 阅读 · 0 评论 -
Spark学习记录
打算花一到两个月的时间,重新学习Spark,从应用,到源码。原创 2021-12-07 22:50:42 · 60 阅读 · 0 评论