![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spark
水中舟_luyl
这是我的qq:1294877059,希望能在spark的天地上越来越强。。。。
展开
-
spark-core_30:Executor初始化过程env.blockManager.initialize(conf.getAppId)源码分析
在(spark-core_28及spark-core_29:Executor初始化过程env.blockManager.initialize(conf.getAppId)-NettyBlockTransferService.init()源码分析)分析了NettyBlockTransferService.init()做了如下四件事/**NettyBlockTransferService.init(t...原创 2018-05-23 15:10:29 · 366 阅读 · 0 评论 -
spark-core_18:Akka分布式通信案例
Scala认为Java线程通过共享数据以及通过锁来维护共享数据的一致性是糟糕的做法,容易引起锁的争用,而且线程的上下文切换会带来不少开销,降低并发程序的性能,甚至会引入死锁的问题。Akka是Actor编程模型的高级类库,类似于JDK 1.5之后越来越丰富的并发工具包,简化了程序员并发编程的难度。Akka是一款提供了用于构建高并发的、分布式的、可伸缩的、基于Java虚拟机的消息驱动应用的工具集和运行...原创 2018-05-22 15:45:05 · 473 阅读 · 0 评论 -
spark-core_17:自定义RpcEnv模拟Master和Worker通信及RpcEnv、RpcEndpoint、RpcEndpointRef源码分析
RpcEnv底层就是Netty实现一、自定义RpcEnv模拟Master和Worker进行通信1、自定义的RpcEndPoint,需要实现RpcEndPoint//自定义的RPC实现ThreadSafeRpcEndpoint,说明它是线程安全的class TestMathEndpoint(override val rpcEnv: RpcEnv) extends ThreadSafeRpcEndpo...原创 2018-05-22 15:30:51 · 473 阅读 · 0 评论 -
spark-core_16:初始化Driver的SparkEnv
1,通过SparkContext初始化时调用createSparkEnv()==>然后调用SparkEnv.createDriverEnv()来初始化SparkEnv对象/** * Create a SparkEnv for the driver. * 该方法被SparkContext.createSparkEnv()方法进行调用 * numCores:如果master是local...原创 2018-05-22 15:24:18 · 445 阅读 · 0 评论 -
spark-core_15:sparkContext初始化源码分析
这幅图是网友提供的,非常感谢/** * Main entry point for Sparkfunctionality. A SparkContext represents the connection to a Spark cluster, andcan be used to create RDDs, accumulators and broadcast variables on thatclu...原创 2018-05-22 15:16:53 · 628 阅读 · 0 评论 -
spark-core_14:Worker源码分析2-Worker与Master通信
承接上文,在上文中Worker的onStart(){。。。。registerWithMaster() 。。。}将自己的信息注册到Master上private def registerWithMaster() { // onDisconnected may be triggered multiple times, so don't attempt registration // if the...原创 2018-03-27 16:30:54 · 252 阅读 · 0 评论 -
spark-core_13:Worker源码分析1-Worker初始化过程
1,从$SPARK_HOME/sbin/start-all.sh调用/sbin/start-slaves.sh,如果是不传--with-tachyon,会直接调用start-slaves.sh脚本,没有参数。(参看spark-core_05:$SPARK_HOME/sbin/start-all.sh、start-master.sh脚本分析)2,$SPARK_HOME/sbin/start-slav...原创 2018-03-27 16:23:51 · 265 阅读 · 0 评论 -
spark-core_12:org.apache.spark.deploy.master.Master源码解析4-- 如何清理超时的Woker及zk是如何选举
承接上文,回到Master的onStart的方法体中 // masterWebUiUrl 值 http://luyl152:8080 masterWebUiUrl = "http://" + masterPublicAddress + ":" + webUi.boundPort //启动定时器,定时发送信息,检查worker的状态 checkForWorkerTim...原创 2018-03-26 21:41:32 · 290 阅读 · 0 评论 -
spark-core_11:org.apache.spark.deploy.master.Master源码解析3--MasterWebUI(MasterRpcEndPoint,8080)初始化web
承接上文分析一下newMasterWebUI(MasterRpcEndPoint,8080):它的主要作用就是将每个页面的html以scala.xml.Node的形势封装放在serlvet中,然后再将servlet放到servletContextHandler中,供jetty.Server使用/** * Web UI server for the standalonemaster. * 实现抽象...原创 2018-03-26 21:35:04 · 357 阅读 · 0 评论 -
spark-core_19:ActorSystem的初始化源码分析
1,在SparkEnv再创建时调用create(),里面调用初始ActorSystem注:ActorSystem在后面版本会被RpcEnv替换掉private def create( conf: SparkConf, executorId: String, hostname: String, port: Int, isDriver: Boolean, isLoc...原创 2018-05-22 15:52:58 · 338 阅读 · 0 评论 -
spark-core_20: MapOutputTrackerMaster、MapOutputTracker、MapOutputTrackerMasterEndpoint等源码分析
1,在SparkEnv.create()初始化了MapOutputTrackerMaster(记录ShuffleMapTask输出信息)val mapOutputTracker = if (isDriver) { /* MapOutputTrackerMaster属于driver,这里使用TimeStampedHashMap来跟踪 map的输出信息,也可以将旧信息进行清除 * 一、MapO...原创 2018-05-22 16:05:43 · 2512 阅读 · 0 评论 -
spark-core_21: SortShuffleManager的初始化源码分析
1,SparkEnv初始过时,通过反射的方式默认将SortShuffleManager实例化出来// Let the userspecify short names for shuffle managers//使用sort shuffle做为mapper和reducer网络传输val shortShuffleMgrNames = Map( "hash" -> "org.apache.spa...原创 2018-05-22 16:10:31 · 304 阅读 · 0 评论 -
spark-core_29:blockManager.initialize()=》NettyBlockTransferService.init()-NettyServer创建源码分析
上一节(spark-core_28:Executor初始化过程env.blockManager.initialize(conf.getAppId)- NettyBlockTransferService.init()源码分析)分析了a、NettyBlockRpcServer是用于打开的上传注册在BlockManager中的Block块b,TansportConf:会通过它成员:ConfigProvi...原创 2018-05-23 15:06:22 · 458 阅读 · 0 评论 -
spark-core_28:Executor初始化过程env.blockManager.initialize(conf.getAppId)- blockTransferService.init()分析
查看(spark-core_25:Master通知Worker启动CoarseGrainedExecutorBackend进程及CoarseGrainedExecutorBackend初始化源码分析)//sparkContext在初始化时也调用了_env.blockManager.initialize(_applicationId)执行的过程差不多 private[spark] class Blo...原创 2018-05-23 15:00:57 · 361 阅读 · 0 评论 -
spark-core_27: DAGScheduler的初始化源码分析
1,SparkContext在初始完成SparkDeploySchedulerBacked和TaskSchedulerImpl,就开始初始化DAGScheduler,并将TaskSchedulerImpl、MapOutputTrackerMaster、BlockManagerMaster,设置到它的成员上 * 1,DAGScheduler面向stage的高级调度层。 它计算每个Job的DAG(一...原创 2018-05-23 14:52:46 · 225 阅读 · 0 评论 -
spark-core_25:Master通知Worker启动CoarseGrainedExecutorBackend进程及初始化源码分析
承接上文(spark-core_24:AppClient的ClientEndpoint注册RegisterApplication)上文中提到:master调用launchExecutor(){worker.endpoint.send(LaunchExecutor(masterUrl, exec.application.id, exec.id,exec.application.desc, ex...原创 2018-05-23 14:44:47 · 990 阅读 · 0 评论 -
spark-core_24:注册RegisterApplication,schedule()分配worker的资源,启动CoarseGrainedExecutorBackend源码分析
基于上文(spark-core_23: TaskSchedulerImpl.start()、SparkDeploySchedulerBackend.start()、CoarseGrainedExecutorBackend.start()、AppClient.start()源码分析)11,AppClient初始化ClientEndpoint初始化时调用tryRegisterAllMasters,触发...原创 2018-05-22 16:36:13 · 350 阅读 · 0 评论 -
spark-core_23: TaskSchedulerImpl.start()、SparkDeploySchedulerBackend.start()、AppClient.start()源码分析
1,在sparkContext初始化完createTaskScheduler()调用TaskSchedulerImpl.start()//在TaskSchedulerImpl在DAGScheduler的构造函数中设置DAGScheduler引用后启动TaskScheduler_taskScheduler.start()2,进入TaskSchedulerImpl.start()方法override ...原创 2018-05-22 16:24:06 · 330 阅读 · 0 评论 -
spark-core_22: SparkDeploySchedulerBackend,TaskSchedulerImpl的初始化源码分析
1, 在sparkContext初始时会执行// Create and startthe scheduler,这个master是在sparkSubmit.Main方法得到:spark://luyl152:7077,luyl153:7077,luyl154:7077//如果集群管理器是standalone模式:该方法返回(SparkDeploySchedulerBackend,TaskSchedu...原创 2018-05-22 16:15:20 · 344 阅读 · 0 评论 -
spark-core_10: org.apache.spark.deploy.master.Master源码解析2--Master这个RpcEndPoint是如何初始化Master
承接上文/** * RpcEndpoint的生命周期又是: onStart -> receive(receiveAndReply)* -> onStop * 这个MasterRpcEndpoint是线程安全的 */private[deploy] class Master( override val rpcEnv: RpcEnv, address: RpcA...原创 2018-03-26 21:27:32 · 464 阅读 · 0 评论 -
spark-core_09: org.apache.spark.deploy.master.Master源码解析1
1,先是start-all.sh调用start-master.sh(查看spark-core_05:$SPARK_HOME/sbin/start-all.sh、start-master.sh脚本分析)。而start-master.sh 使用如下脚本调用spark-deamon.shspark-daemon.sh start org.apache.spark.deploy.master.Master...原创 2018-03-26 21:19:56 · 757 阅读 · 0 评论 -
SparkStreaming案例:NetworkWordCount--ReceiverSupervisorImpl.onStart()如何将Reciver数据写到BlockManager中
上文提到“ReceiverInputDstream的Receiver是如何被放到Executor上执行的”关键代码ReceiverSupervisorImpl的start方法。 val startReceiverFunc: Iterator[Receiver[_]] => Unit = (iterator: Iterator[Receiver[_]]) => { if (!...原创 2018-02-09 15:27:59 · 357 阅读 · 0 评论 -
SparkStreaming案例:NetworkWordCount--spark如何使用ListenerBus实现类似js监听事件效果
1, 还是从案例开始顺藤摸瓜object NetworkWordCount { def main(args: Array[String]) { if (args.length < 2) { System.err.println("Usage: NetworkWordCount <hostname> <port>") System.e...原创 2018-02-09 11:52:17 · 407 阅读 · 0 评论 -
SparkStreaming案例:NetworkWordCount--ReceiverInputDstream的Receiver是如何被放到Executor上执行的?
1, 还是从案例开始顺藤摸瓜object NetworkWordCount { def main(args: Array[String]) { if (args.length < 2) { System.err.println("Usage: NetworkWordCount <hostname> <port>") System.e...原创 2018-02-09 14:55:31 · 499 阅读 · 0 评论 -
SparkStream例子HdfsWordCount--Streaming的Job是如何调度的
上一篇“SparkStream例子HdfsWordCount--从Dstream到RDD全过程解析”解析了每个Dstream周期内,是如何生成的RDD的。该篇描述一下RDD变成Streaming的Job之后,如何到Executor上面执行开发者写的foreachFunc(rdd,time)的过程。四、 Streaming的Job是如何进行调度执行的? 1, 在DstreamGr原创 2018-01-09 14:51:58 · 221 阅读 · 0 评论 -
SparkStream例子HdfsWordCount--从Dstream到RDD全过程解析
上一篇SparkStream例子HdfsWordCount--InputDStream及OutputDstream是如何进入DStreamGraph中:分析了InputDstream及OutputDstream如何进入DStreamGraph,这个单元分析一下FileInputDstream如何生成的RDD.三、 FileInputDStream是如何生成RDD的呢? 1,入口是咱原创 2018-01-04 17:51:43 · 419 阅读 · 0 评论 -
SparkStream例子HdfsWordCount--InputDStream及OutputDstream是如何进入DStreamGraph中
先分析一下Dstream的子类:A,从上图可以发现子类InputDstream都是属于数据源Dstream;InputDStream分成两个类型,一种是ReceiverInputDstream,一种不需要实现ReceiverInputDstream.如FileInputDStream。B,上图中ForEachDStream就是OutputDstream:所有output算子最终都会调用到这原创 2018-01-09 14:46:21 · 790 阅读 · 0 评论 -
SparkStream源码分析:JobScheduler的JobStarted、JobCompleted是怎么被调用的
一,从StreamingContext.start()进入===>在SparkContext有一个JobScheduler成员会被初始化,JobScheduler会被StreamingContext.start()被调用private[streaming]val scheduler =new JobScheduler(this)二,跟进入JobScheduler的s原创 2017-12-21 19:42:14 · 377 阅读 · 0 评论 -
SparkStreaming案例:NetworkWordCount--ReceiverInputDstream的compute方法如何取得Socket预先存放在BlockManager中的数据
1, 还是从这个案例开始object NetworkWordCount { def main(args: Array[String]) { if (args.length < 2) { System.err.println("Usage: NetworkWordCount <hostname> <port>") System.exi...原创 2018-02-26 15:52:41 · 454 阅读 · 0 评论 -
spark-core_03: org.apache.spark.launcher.Main源码分析
承接上文“spark-core_02: spark-submit、spark-class脚本分析“launcher.Main主要作用是就是检测,注入spark-submit参数到spark环境中,然后返回SparkSubmit需要执行的参数,给spark-class脚本中的exec "${CMD[@]}"进行执行class Main { public static void main(Stri...原创 2018-03-14 17:48:25 · 1055 阅读 · 0 评论 -
spark-core_04: org.apache.spark.deploy.SparkSubmit源码分析:
承接上文“org.apache.spark.launcher.Main源码分析“SparkSubmitArgumentsParser的父类就SparkSubmitOptionParser,在launcher.Main方法执行时用到OptionParser 它的父类也是SparkSubmitOptionParser。并且这个父类有一个方法parser。作用将spark-submit放进来的参数对应值...原创 2018-03-14 18:57:17 · 1297 阅读 · 0 评论 -
spark-core_01: $SPARK_HOME/bin/spark-shell
sparkshell脚本的作用:调用spark-submit脚本,并给spark-submit脚本 带上参数如下参数--classorg.apache.spark.repl.Main --name "Spark shell" "$@" 具体流程是:#1 捕获终端信号,执行退出方法,恢复一些操作#2 保存终端配置,当cygwin时关闭回显,之后再恢复#3 执行spark-submit,调用repl....原创 2018-03-14 14:49:47 · 1614 阅读 · 0 评论 -
spark-core_02: $SPARK_HOME/bin/spark-submit、spark-class脚本分析
继承上文“spark-core_01: $SPARK_HOME/bin/spark-shell脚本分析”一,$SPARK_HOME/bin/spark-submit#################################################从spark-shell调用之后,传进来--class org.apache.spark.repl.Main --name "Spark ...原创 2018-03-14 14:44:50 · 1846 阅读 · 0 评论 -
SparkStreaming案例:NetworkWordCount--ReceiverSupervisorImpl中的startReceiver(),Receiver如何将数据store到RDD
接着上文“ReceiverSupervisorImpl.onStart()如何得到Reciver的数据写到spark的BlockManager中”往下分析startReceiver()方法1,supervisor.start()该方法是启动Receiver开始在Executor上接收数据的入口start()方法是在ReceiverSupervisorImpl的父类ReceiverSuperviso...原创 2018-02-24 16:11:40 · 420 阅读 · 0 评论 -
spark-core_08: $SPARK_HOME/sbin/slaves.sh、start-slave.sh脚本分析
承接上面“spark-core_07: $SPARK_HOME/sbin/start-slaves.sh脚本分析”一、这是$SPARK_HOME/sbin/slaves.sh脚本;#!/usr/bin/envbash #Run a shell command on all slave hosts.#Environment Variables# SPARK_SLAVES File nami...原创 2018-03-16 16:42:17 · 839 阅读 · 0 评论 -
spark-core_07: $SPARK_HOME/sbin/start-slaves.sh脚本分析:
承接“spark-core_05: $SPARK_HOME/sbin/start-all.sh、start-master.sh脚本分析”,在spark-all.sh脚本中会调用start-slaves.sh来启Worker节点 #!/usr/bin/envbash#Starts a slave instance on each machine specified in the conf/slave...原创 2018-03-16 16:30:40 · 354 阅读 · 0 评论 -
spark-core_06: $SPARK_HOME/sbin/spark-daemon.sh脚本分析
承接上面“spark-core_05: $SPARK_HOME/sbin/start-all.sh、start-master.sh脚本分析”#!/usr/bin/envbash #Runs a Spark command as a daemon. 将Spark命令作为守护进程运行。##Environment Variables # # SPARK_CONF_DIR Alternate c...原创 2018-03-16 16:26:09 · 912 阅读 · 0 评论 -
spark-core_05: $SPARK_HOME/sbin/start-all.sh、start-master.sh脚本分析:
一、这是$SPARK_HOME/sbin/start-all.sh脚本#!/usr/bin/envbash # Start all spark daemons. 后台启动所有spark节点,将master在这个节点中启动,worker节点是通过conf/slaver来决定的#Starts the master on this node.#Starts a worker on each node s...原创 2018-03-16 16:15:18 · 1020 阅读 · 0 评论