- 博客(38)
- 资源 (4)
- 收藏
- 关注
原创 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 353
原创 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 454
原创 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 346
原创 spark-core_27: DAGScheduler的初始化源码分析
1,SparkContext在初始完成SparkDeploySchedulerBacked和TaskSchedulerImpl,就开始初始化DAGScheduler,并将TaskSchedulerImpl、MapOutputTrackerMaster、BlockManagerMaster,设置到它的成员上 * 1,DAGScheduler面向stage的高级调度层。 它计算每个Job的DAG(一...
2018-05-23 14:52:46 216
原创 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 965
原创 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 340
原创 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 321
原创 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 335
原创 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 290
原创 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 2466
原创 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 331
原创 spark-core_18:Akka分布式通信案例
Scala认为Java线程通过共享数据以及通过锁来维护共享数据的一致性是糟糕的做法,容易引起锁的争用,而且线程的上下文切换会带来不少开销,降低并发程序的性能,甚至会引入死锁的问题。Akka是Actor编程模型的高级类库,类似于JDK 1.5之后越来越丰富的并发工具包,简化了程序员并发编程的难度。Akka是一款提供了用于构建高并发的、分布式的、可伸缩的、基于Java虚拟机的消息驱动应用的工具集和运行...
2018-05-22 15:45:05 454
原创 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 461
原创 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 434
原创 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 611
原创 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 236
原创 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 254
原创 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 279
原创 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 346
原创 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 439
原创 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 725
原创 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 810
原创 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 341
原创 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 892
原创 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 975
原创 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 1277
原创 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 1029
原创 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 1582
原创 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 1779
原创 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 444
原创 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 410
原创 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 338
原创 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 488
原创 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 393
原创 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 212
原创 SparkStream例子HdfsWordCount--InputDStream及OutputDstream是如何进入DStreamGraph中
先分析一下Dstream的子类:A,从上图可以发现子类InputDstream都是属于数据源Dstream;InputDStream分成两个类型,一种是ReceiverInputDstream,一种不需要实现ReceiverInputDstream.如FileInputDStream。B,上图中ForEachDStream就是OutputDstream:所有output算子最终都会调用到这
2018-01-09 14:46:21 767
原创 SparkStream例子HdfsWordCount--从Dstream到RDD全过程解析
上一篇SparkStream例子HdfsWordCount--InputDStream及OutputDstream是如何进入DStreamGraph中:分析了InputDstream及OutputDstream如何进入DStreamGraph,这个单元分析一下FileInputDstream如何生成的RDD.三、 FileInputDStream是如何生成RDD的呢? 1,入口是咱
2018-01-04 17:51:43 408
原创 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 358
postgresql-13.2-1-windows-x64.exe如何安装到window及问题解决
2021-03-16
jtbcEditHTML编辑器
2013-03-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人