SparkContext -- v 2.2
- Spark的对外接口,代表了与spark 集群交互的连接,负责向调用这提供Spark的各种功能
- 主要功能:
- 在集群上,创建RDD,累加器,广播变量等
- driver 和 executor都会创建 sparkContext
初始化过程 -- driver
-
前置条件SparkConf设置:
- spark.master 必须设置
- 本地模式为 local[*]
- 集群模式为 master地址,如:spark://192.168.0.147:7077
- spark.master 必须设置
-
初始化或者从缓存获取SparkContext :
- SparkContext##getOrCreate(config: SparkConf)
-
程序入口点
- new SparkContext(config) <== v 2.0.0以前
- SparkSession.builder.appName("Simple Application").getOrCreate() <== v 2.0.0 开始推荐
- 提供了一个统一的切入点来使用Spark的各项功能
- SparkConf、SparkContext和SQLContext都已经被封装在SparkSession当中,简化操作
- 创建Dataset和Dataframe
- 读取各种数据(json,jdbc)
- 使用SparkSQL
- 存储/读取Hive表
-
重要组件初始化并启动
-
SparkUI
- 客户端webui,默认端口4040
-
schedulerBackend [后台线程]:管理系统,与master,worker通信,决定如何获取资源,配合TaskSchedulerImpl运行task
- 具体实现类:
- local模式:
- LocalSchedulerBackend
- spark standalone模式:
- StandaloneSchedulerBackend
- 其他模式,通过外部加载方式动态调用:
- 加载META-INF.services文件中的配置的ExternalClusterManager实现类
- 实例化类,并调用canCreate方法匹配url,匹配成功的通过该Manager创建对应的schedualBackend,与taskScheduler
- yarn模式(源码位置:resource-managers/yarn):
- 在resources的META-INF.services文件中配置为:org.apache.spark.scheduler.cluster.YarnClusterManager
- YarnClusterManager#canCreate实现为判断masterURL == "yarn"
- TaskScheduler创建:YarnClusterManager#createTaskScheduler
- cluster模式:YarnClusterScheduler
- client模式:YarnScheduler
- SchedulerBackend创建:YarnClusterManager#createSchedulerBackend
- cluster模式:YarnClusterSchedulerBackend
- client模式:YarnClientSchedulerBackend
- local模式:
- 意图:不同集群资源获取方式不一样,相对于不同的集群提供不同的策略实现
- 接口方法
- reviveOffers,找到合适work的合适的executor资源给task运行
- 在standalone模式下,StandaloneSchedulerBackend负责集群资源的获取和调度。继承自CoarseGrainedSchedulerBackend。
- 具体实现类:
-