Spark天堂之门
来源:互联网 发布:centos安装switchdesk 编辑:程序博客网 时间:2024/05/01 07:10
本期内容:
1、Spark天堂之门
2、SparkContext使用案例借鉴
3、SparkContext内幕
4、SparkContext源码解密
一、Spark天堂之门
1、Spark程序在执行的时候分为Driver和Executor两部分;
2、Spark程序的编写核心基础是RDD,具体包含两部分:
a)是由SparkContext来最初创建第一个RDD,一定是由SparkContext来创建的;
b)Spark程序的调度优化也是基于SparkContext;
3、Spark程序的注册要通过SparkContext实例化时候产生的对象来完成(其实是由SchedulerBackend注册程序);
4、Spark程序运行的时候要通过ClusterManager获得具体的资源,计算资源的获取也是由SparkContext产生的对象来申请的(其实
是 SchedulerBackend来获取资源的);
5、SparkContext崩溃或者结束的整个Spark程序也结束啦!
总结:SparkContext开启天堂之门:Spark程序是通过SparkContext发布到Spark集群的;
SparkContext导演天堂世界:SPark程序的运行都是在SparkContext为核心的调度器下指挥下进行的;
SparkContext关闭天堂之门:SparkContext崩溃或者结束整个Spark程序结束了;
运行Wordcount程序
三、SparkContext内幕天堂揭秘
1、SparkContext构建的顶级三大核心对象:DAGScheduler、TaskScheduler、SchedulerBackend,其中:
a)SchedulerBackend是面向Stage的调度器;
b)TaskScheduler是一个接口,更加具体的Cluster Manager的不同会有不同的实现,Standalone模式下具体的实现是 TaskSchedulerlmpl;
c)SchedulerBackend是一个接口,更加具体的Cluster Manager的不同会有不同的实现,Standalone模式下具体的实现是 SparkDeploySchedulerBackend;
2、从整个程序运行的角度来讲,SparkContext包含四大核心对象:DAGScheduler、TaskScheduler、SchedulerBackend、MapOutputTrackerMaster。
createTaskScheduler case SIMR_REGEX(simrUrl) => val scheduler = new TaskSchedulerImpl(sc) val backend = new SimrSchedulerBackend(scheduler, sc, simrUrl) scheduler.initialize(backend) (backend, scheduler)
SparkDeploySchedulerBackend有三大核心功能:
负责与Master链接注册当前程序;
接收集群中为当前应用程序而分配计算资源Executor的注册并管理Executor;
负责发送Task到具体的Executor执行;
补充说明的是:SparkDeploySchedulerBackend是被TaskSchedulerImpl来管理的。val command = Command("org.apache.spark.executor.CoarseGrainedExecutorBackend", args, sc.executorEnvs, classPathEntries ++ testingClassPath, libraryPathEntries, javaOpts)
当通过SparkDeploySchedulerBackend注册程序给Master的时候会把上述command提交给Master,Master发指令给Worker去启动Executor所在的进程的时候加载main方法的 在的入口类就是command中的CoarseGrainedExecutorBackend,当然你可以实现自己的ExecutorBackend,在CoarseBrainedExecutorBackend中启动Executor(Executor先注册)
val executorConf = new SparkConf val port = executorConf.getInt("spark.executor.port", 0) val fetcher = RpcEnv.create( "driverPropsFetcher", hostname, port, executorConf, new SecurityManager(executorConf), clientMode = true) val driver = fetcher.setupEndpointRefByURI(driverUrl) val props = driver.askWithRetry[Seq[(String, String)]](RetrieveSparkProps) ++ Seq[(String, String)](("spark.app.id", appId)) fetcher.shutdown()
private def registerWithMaster(nthRetry: Int) { registerMasterFutures.set(tryRegisterAllMasters()) registrationRetryTimer.set(registrationRetryThread.scheduleAtFixedRate(new Runnable { override def run(): Unit = { Utils.tryOrExit { if (registered.get) { registerMasterFutures.get.foreach(_.cancel(true)) registerMasterThreadPool.shutdownNow() } else if (nthRetry >= REGISTRATION_RETRIES) { markDead("All masters are unresponsive! Giving up.") } else { registerMasterFutures.get.foreach(_.cancel(true)) registerWithMaster(nthRetry + 1) } } } }, REGISTRATION_TIMEOUT_SECONDS, REGISTRATION_TIMEOUT_SECONDS, TimeUnit.SECONDS)) }
DT大数据梦工厂
新浪微博:www.weibo.com/ilovepains/
微信公众号:DT_Spark
博客:http://.blog.sina.com.cn/ilovepains
TEL:18610086859
Email:18610086859@vip.126.com
- Spark天堂之门
- Spark天堂之门
- day28:Spark天堂之门解密
- 第28课 Spark天堂之门解密
- [Apache Spark源码阅读]天堂之门——SparkContext解析
- 大数据IMF传奇行动绝密课程第28课:Spark天堂之门
- “天堂之门”与爱情之门
- 大数据IMF行动传奇 迈向SparkContext天堂之门! 探索天堂之门!
- 伸缩布局 — 打开布局天堂之门?
- 天堂门坏了
- “天堂?
- 天堂
- 天堂
- 天堂
- 天堂
- 数学:确定性的丧失---第八章 不合逻辑的发展:天堂之门
- [音乐天堂]Pilgrim Heart 朝圣之心
- 快速建网站之梦想天堂
- [LeetCode]74. Search a 2D Matrix
- 文章标题
- Java设计模式学习之 —— 单例(Singleton)
- DP专题合集
- 关于导出android项目的keystore问题
- Spark天堂之门
- mac或linux下制作u启
- 我的2015我的Android
- LeetCode202 Happy Number
- jQuery7(多条件选择器,层次选择器)
- 排序算法
- bzoj1984 月下“毛景树”树链剖分 线段树
- Android实现推送方式解决方案
- 日元负利率和美元暴跌,是对人民币的夹击