SparkContext解密

spark学习-SparkSQL-SparkSession与SparkContext SparkSession-Spark的一个全新的切入点 在Spark的早期版本,sparkContext是进入Spark的切入点。我们都知道RDD是Spark中重要的API,然而它的创建和操作得使用sparkContext提供的API;对于RDD之外的其他东西,我们需要使用其他的Context。比如对于流处理来说,我们得使用StreamingContext;对于SQL得使用sqlC 阅读详情

Spark Cluster架构图
这里写图片描述

1, Spark程序在运行的时候分为Driver和Executors两部分;

2, Spark的程序编写是基于SparkContext的,具体来说包含两方面:

a)Spark编程的核心基础—RDD,是由SparkContext来最初创建(第一个RDD一定是由SparkContext来创建的);
b)Spark程序的调度优化也是基于SparkContext;
3, Spark程序的注册时通过SparkContext实例化时候生产的对象来完成的(其实是SchedulerBackend来注册程序)

4, Spark程序运行的时候要通过Cluster Manager获得具体的计算资源,计算资源的获取也是通过SparkContext产生的对象来申请的(其实是SchedulerBackend来获取计算资源的);

5, SparkContext**崩溃或者结束**的时候整个Spark程序也结束啦!

总结:
SparkContext**开启**天堂之门:Spark程序是通过SparkContext发布到Spark集群的;
SparkContext**导演**天堂世界:Spark程序的运行都是在SparkContext为核心的调度器的指挥下进行的;
SparkContext**关闭**天堂之门:SparkContext崩溃或者结束的时候整个Spark程序也结束啦!

二:SparkContext使用案例鉴赏
这里写图片描述

三:SparkContext天堂内幕

1, SparkContext构建的顶级三大核心对象:DAGScheduler、TaskScheduler、ShedulerBackend,其中:

a) DAGScheduler是面向Job的Stage的高层调度器;

b) TaskScheduler是一个接口,根据具体的ClusterManager的不同会有不同的实现,Standalone模式下具体的实现是TaskSchedulerImpl;

c) SchedulerBackend是一个接口,根据具体的ClusterManager的不同会有不同的实现,Standalone模式下具体的实现是SparkDeploySchedulerBackend;

2,从整个程序运行的角度来讲,SparkContext包含四大核心对象:DAGScheduler、TaskScheduler、ShedulerBackend、MapOutputTrackerMaster。

// Create and start the scheduler
val (sched, ts) = SparkContext.createTaskScheduler(this, master)
_schedulerBackend = sched
_taskScheduler = ts
_dagScheduler = new DAGScheduler(this)
_heartbeatReceiver.ask[Boolean](TaskSchedulerIsSet)

// start TaskScheduler after taskScheduler sets DAGScheduler reference inDAGScheduler's
// constructor
_taskScheduler.start()

createTaskScheduler:

case SPARK_REGEX(sparkUrl) =>
  val scheduler = new TaskSchedulerImpl(sc)
  val masterUrls = sparkUrl.split(",").map("spark://" + _)
  val backend = new SparkDeploySchedulerBackend(scheduler, sc, masterUrls)
  scheduler.initialize(backend)
  (backend, scheduler)

在sheduler.initialize调用的时候会创建ShedulerPool

this.backend = backend
// temporarily set rootPool name to empty
rootPool = new Pool("", schedulingMode, 0, 0)
schedulableBuilder = {
  schedulingMode match {
    case SchedulingMode.FIFO =>
      new FIFOSchedulableBuilder(rootPool)
    case SchedulingMode.FAIR =>
      new FairSchedulableBuilder(rootPool, conf)
  }
}
schedulableBuilder.buildPools()

SparkDeploySchedulerBackend有三大核心功能:
(1)负责与Master链接注册当前程序
(2)接收集群中为当前应用程序而分配的计算资源Executor的注册并管理Executors
(3)负责发送Task到具体的 Executor执行
补充说明的是:SparkDeploySchedulerBackend是被TaskSchedulerImpl来管理的!

// start TaskScheduler after taskScheduler sets DAGScheduler reference in DAGScheduler's
// constructor
_taskScheduler.start()
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,当然你可以实现自己的ExecutorBackened,在CoarseGrainedExecutorBackend中启动Executor(Executor是先注册再实例化),Executor通过线程池并发执行Task

private[spark] case class ApplicationDescription(
    name: String,
    maxCores: Option[Int],
    memoryPerExecutorMB: Int,
    command: Command,
    appUiUrl: String,
    eventLogDir: Option[URI] = None,
    // short name of compression codec used when writing event logs, if any (e.g. lzf)
    eventLogCodec: Option[String] = None,
    coresPerExecutor: Option[Int] = None,
    user: String = System.getProperty("user.name", "<unknown>")) {

  override def toString: String = "ApplicationDescription(" + name + ")"
}
第11课: 彻底解密WordCount运行原理 第11课: 彻底解密WordCount运行原理本节彻底解析wordcount运行原理:1,从数据流动视角解密WordCount,使用Spark作单词计数统计,数据到底是怎么流动的。2,从RDD依赖关系的视角解密WordCount。Spark中的一切操作都是RDD,后面的RDD对前面的RDD有依赖关系。3,DAG与血统Lineage的思考。接下来我们讲解运行wordcount程序。首先建立一个文本文 阅读详情

相关推荐

nnU-Net v2实战:从零开始配置环境与训练自定义医学影像数据集

本文详细介绍了nnU-Net v2在医学影像分割中的实战应用,从环境配置到自定义数据集训练的全流程。重点讲解了Python 3.9+环境搭建、PyTorch安装技巧、医学影像数据预处理规范,以及五折交叉验证训练方法,帮助开发者快速掌握这一先进的医学影像分析工具。

weixin_28718487的博客 352

Spark(五十二):Spark Scheduler模块之DAGScheduler流程

导入 从一个Job运行过程中来看DAGScheduler是运行在Driver端的,其工作流程如下图: 图中涉及到的词汇概念: 1. RDD——Resillient Distributed Dataset 弹性分布式数据集。 2. Operation——作用于RDD的各种操作分为transformation和action。 3. Job——作业,一个JOB包含多个RDD及作用于相应...

weixin_30430169的博客 533

怎么用phpstudy制作网站

随着实践的深入,你会逐渐掌握更多高级技巧和技术,让你的网站变得更加完善和吸引人。现在你已经成功设置了你的本地Web服务器环境,接下来我们将指导你如何利用这个环境来创建一个简单的PHP网页项目。为了使网站更加动态且功能丰富,我们需要学会如何让PHP脚本与MySQL数据库交互。为了让网站看起来更专业美观,可以考虑引入CSS样式表来定制网页布局及视觉效果。当你对本地开发的网站感到满意后,下一步就是将其发布到互联网上供他人访问了。让我们进一步扩展我们的网站,加入一个简单的用户注册与登录系统。

2401_87999399的博客 6574

字节跳动大数据面试题:讲讲Spark资源调度和任务的源码

其实 Spark 在某种层面上和 MR 是一样的,只不过 Spark 更适合于迭代计算的业务。那么二者的区别有哪些呢?我这里只列举几个大层面的东西,细小的东西我们会在下文继续分析: 当内存足够的情况下或者数据量相对较小的情况下,Spark RDD之间传输的数据不用上传 HDFS Spark 可以将 RDD 存储在内存,供下一个 task 使用 Spark 适用于迭代计算,如果不是迭代相关的业务问题,Spark 于 MR 的性能差不多 这里对 Spark 从集群启动到最后的 task 执行完毕.

BigData98的博客 1632

Matlab Arduino 硬件支持包安装 MATLAB_Support_Package_for_Arduino_Hardware

Matlab Arduino硬件支持包离线安装

weixin_43283734的博客 2840

AI辅助专利撰写实战:30分钟高效产出发明专利初稿

在技术创新的浪潮中,专利撰写常常是开发者将创意转化为知识产权保护壁垒的关键一步,但这个过程往往耗时费力,需要兼顾技术深度与法律文书规范。近期,借助AI辅助工具来提升专利撰写效率已成为一个热门探索方向。本文将围绕如何利用AI工具,在30分钟内高效完成一篇具备授权潜力的发明专利初稿,进行一场从0到1的实战演练。无论你是独立开发者、初创团队的技术负责人,还是希望保护自己研究成果的学生,这套方法都能帮助你快速梳理技术方案,形成结构严谨、逻辑清晰的专利申请文档。 1. 背景与核心概念:AI辅助专利撰写的价值与边界 在

weixin_34253126的博客 493

Hadoop

前世今生 Apache Lucene开源的高性能全文检索工具包 Apache Nutch开源的Web搜索引擎 Google三大论文(GFS/MapReduce/BigTable) Apache Hadoop大规模数据批处理 Hadoop四大模块 Hadoop Common为其他Hadoop模块提供基础设施(包含网络通信rpc框架) Hadoop HDFS一个高可靠高吞吐量的分布式文...

淋雨西河的博客 752

RTPS规范v2.3(中文版)

DDSI-RTPSv2.3,DDS发现互操作性-实时发布订阅通信协议,中文版

pony12的专栏 752

大数据IMF传奇行动绝密课程第28课:Spark天堂之门

Spark天堂之门1、Spark天堂之门 2、SparkContext使用案例鉴赏 3、SparkContext内幕 4、SparkContext源码解密1、Spark天堂之门 1)Spark程序在运行的时候分为Driver和Executors两部分; 2)Spark的程序编写是基于SparkContext的,具体来说包含两方面: a)Spark编程的核心基础RDD,是由Spar

tom_8899_li的博客 995

AIGC游戏测试自动化:AI如何提升游戏QA效率

随着游戏产业的蓬勃发展,游戏的复杂度和规模不断增加,传统的游戏测试方式面临着巨大的挑战。本文章的目的在于深入探讨AIGC技术在游戏测试自动化中的应用,分析AI如何提升游戏QA的效率。范围涵盖了从核心概念到实际应用的各个方面,包括算法原理、数学模型、项目实战案例以及未来发展趋势等。本文将按照以下结构进行阐述:首先介绍核心概念与联系,明确AIGC和游戏测试自动化的相关概念和关系;接着讲解核心算法原理和具体操作步骤,通过Python代码进行详细说明;然后介绍数学模型和公式,并举例说明;

AI 原生应用开发的博客 1353

从 on_event 到 lifespan:FastAPI 生命周期管理的旧方法与新方法对比与迁移

从 on_event 到 lifespan:FastAPI 生命周期管理的旧方法与新方法对比与迁移

XiaoqiangClub的博客 1021

spark内核解密

一:Spark天堂之门:SparkContext! 1, Spark程序在运行的时候分为Driver和Executors两部分; 2, Spark的程序编写是基于SparkContext的,具体来说包含两方面: a) Spark编程的核心基础---RDD,是由SparkContext来最初创建(第一个RDD一定是由SparkContext来创建的); b) Spark程序的调度优化也是基于

a11a2233445566的专栏 505

PyTorch深度学习实战(1)——神经网络与模型训练过程详解

在本节中,我们将了解传统机器学习与人工神经网络间的差异,并了解如何在实现前向传播之前连接网络的各个层,以计算与网络当前权重对应的损失值;实现反向传播以优化权重达到最小化损失值的目标。并将实现网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。

盼小辉丶的博客 9万+

Spark内核解密

Spark内核解密

sflotus的专栏 473

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

第28课 Spark天堂之门解密

一:Spark天堂之门:SparkContext! 1,  Spark程序在运行的时候分为Driver和Executors两部分; 2,  Spark的程序编写是基于SparkContext的,具体来说包含两方面: a)        Spark编程的核心基础---RDD,是由SparkContext来最初创建(第一个RDD一定是由SparkContext来创建的); b)

tianmangshan80的专栏 708

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spark3000门徒第13课Spark内核架构解密总结

昨晚听了王家林老师的第13课Spark内核架构解密,课堂笔记如下: executor中线程池并发执行和复用,Spark executor, backed by a threadpool to run tasks. 默认一个work为一个Application只开启一个executor。一个worker里executor是多点好还是少点好,看具 体情况。 Worker:管理当前Nod...

168

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Spark天堂之门解密

本课主题 什么是 Spark 的天堂之门 Spark 天堂之门到底在那里 Spark 天堂之门源码鉴赏 引言   Spark 天堂之门就是SparkContext,这篇文章会从 SparkContext 创建3大核心对象 TaskSchedulerImpl、DAGScheduler 和 SchedulerBackend 开始到注册给 Master 这个过程中的源码...

weixin_30521161的博客 163

大数据IMF传奇行动绝密课程第13课:Spark内核架构解密

Spark内核架构解密 Driver:运行程序时具有main方法并且创建SparkContext的环境对象 程序运行的核心 SparkContext,高层调度器DAGScheduler,底层调度器TaskScheduler,也有SchedulerBackEnd 负责向Master注册当前程序,Master给他分配资源,根据Action返回Job,Job里面有一系列的RDD,如果是宽依赖的话就

tom_8899_li的博客 567

[Spark内核] 第28课:Spark天堂之门解密

本課主題 什么是 Spark 的天堂之门 Spark 天堂之门到底在那里 Spark 天堂之门源码鉴赏 引言 我说的 Spark 天堂之门就是SparkContext,这篇文章会从 SparkContext 创建3大核心对象 TaskSchedulerImpl、DAGScheduler 和 SchedulerBackend 开始到注册给 Master 这个过程中的源码鉴赏...

weixin_30838921的博客 155

kafka+sparkstreaming实时读取计算nginx日志,存储结果到mongodb/mysql

#!/usr/bin/env python #coding:utf-8 import sys import urlparse import re import datetime import MySQLdb import logging from pymongo import MongoClient from pyspark import SparkContext, SparkConf from...

leofionn的博客 1252

Spark Runtime解密

一 再论Spark集群部署1.从spark runtime的角度来讲有五大核心对象:master,worker,executor,driver,coarseGrainedExecutorBackend;2.Spark在做集群分布式系统设计的时候:最大化功能独立、模块化封装具体独立的对象、强内聚低耦合。3.当driver中的sparkcontext初始化的时候会提交程序给master,master如果

囧芝麻的博客 469

kafka + spark streaming 实时读取计算 nginx 日志,存储结果到 mongodb/mysql

#!/usr/bin/env python #coding:utf-8 ''' ''' import sys import urlparse import re import datetime import MySQLdb import logging from pymongo import MongoClient from pyspark import SparkContext, SparkCon

chuangchuangtao的博客 1118

PySpark启动过程解密

原文作者:李海强,来自平安银行零售大数据团队 ​ 前言 作为数据工程师,你可能会碰到过很多种启动PySpark的方法,可能搞不懂这些方法有什么共同点、有什么区别,不同的方法对程序开发、部署有什么影响,今天我们一起分析一下这些启动PySpark的方法。 以下代码分析都是基于spark-2.4.4版本展开的,为了避免歧义,务必对照这个版本的Spark深入理解。 启动PySpark的方法 启动PySp...

Hadoop_SC的博客 1470
上一篇: Spark on Yarn解密及运行流程
下一篇: Master HA解密
囧芝麻
博客等级 码龄10年 10粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值