深入探究Spark -- Cluster Manger部署(最常用为YARN实现Task Scheduler)

部署方式有:Standalone(Spark的Deploy模块)、Mesos、YARN、EC2、Local
SparkContext创建时,通过传入的Master URL不同,创建不同的SchedulerBackend和TaskScheduler,在spark.SparkContext#createTaskSchuster实现
Master URL:
local:以一个工作线程运行计算任务,不重新计算失败的计算任务
local[N]/[*]:N个线程,或是启动与CPU core相等数量的线程,也是不会重新计算失败
local[threads, maxFailures]:设置线程数与最大的失败重试数
local-cluster[numSlaves, coresPerSlave, memoryPerSlave]:本机运行Master和Worker,三个参数分别设置worker的数量、core数、内存
前三种方式,SchedulerBackend的实现是scheduler.local.LocalBackend,TaskScheduler的实现是scheduler.TaskSchedulerImpl,它也有LocalActor,通过这个与Executor
第四种为伪分布式,和Standalone类似,只不过都运行在同一个机器。SB的实现是scheduler.cluster.SparkDeploy-SchedulerBackend,TS的实现是scheduler.Task-SchedulerImpl
Worker接到Master的LaunchExecutor信息后,创建实例ExecutorRunner,启动一个新的进程,它的实现是spark.executor.Coarse-GrainedExecutorBackend。它不在Worker进程内
Local-cluster可以启动多个Worker
Mesos:采用Master/Slave架构,主要由Master、Slave、Framework、Executor组成,通过ZooKeeper实现Master高可用
Mesos资源调度分为粗粒度与细粒度调度
粗粒度就是每个Executor获得资源就长期持有,直到应用程序退出才释放。优点是减少资源调度的开销,缺点就是资源被长期占有,会造成资源浪费
细粒度就是根据任务实际动态申请,避免了资源浪费,但同时调度的时间开销更大
通过spark.mesos.coarse来设置是粗还是细
YARN:重点关注一下
YARN包括ResourceManager负责全局管理所有应用的计算资源分配,每一台机器的NodeManager管理应用在这台机器上的进程并组织计算
ApplicationMaster负责调度和协调,结合从RM获得的资源和NM协同工作,每一个应用对应的AM的职责有向调度器索取、运行任务、跟踪与监控状态和进程、处理任务失败
RM不对应用进行监控和跟踪,是基于应用程序的纯粹调度器,把资源分给多个队列和应用
NM是每台机器框架的代理,是执行应用程序的容器,监控应用程序的资源使用并向调度器汇报
过程:Client提交Job后,AM向RM请求资源,获得后AM在NM上启动Container,运行计算任务,并监控任务(一个应用对应一个AM,而一个AM对应管理多个NM)
YARN的Cluster模式:
通过YARN调度Spark Application所需资源。Application通过YARN Client提交到RM,RM在一个工作节点启动AM(注册为YARN ApplicationMaster),开始应用的提交(spark.deploy.yarn.ApplicationMaster)
TaskScheduler的实现是spark.scheduler.cluster.YarnClusterScheduler,它完成了AM的初始化。AM通过RM和NM的接口启动若干个容器作为spark.executor.CoarseGrainedExecutorBackend,最终启动Executor
YARN的Client模式:
与Cluster模式区别在于提交Application的SparkContext在本地,适合Application需要与本地交互的场景;Cluster模式是计算的全部节点都在YARN节点上进行。
SparkContext创建spark.scheduler.cluster.YarnClient-ClusterScheduler和spark.scheduler.cluster.YarnClientSchedulerBackend,分别是两个模块的实现。其中SchedulerBackend可以和ExecutorBackend通过AKKA通信,并向RM提交Application,AM负责在多个节点上启动Executor
Standalone:
Master/Slave架构,Master负责整个集群的资源调度和Application管理,Slave(Worker)接收Master资源调度命令后启动Executor,并最终完成计算任务。
Client负责Application的创建和向Master注册,并接收Executor的状态更新和计算结果。
Master、Worker、Client都是通过AKKA通信,Master和Worker都是一个Actor
Master:接收Worker注册并管理所有Worker,接收Client提交Application,并提交给Worker
Worker:向Master注册自己,根据Master发送的Application配置进程环境,并启动StandaloneExecutorBackend
Client:向Master注册并监控Application。创建SparkContext时生成SparkDeploySchedulerBackend,就会向Master发送请求了
Standalone模式是通过Spark的Deploy模块就能实现,部署简单,有利于推广Spark
得到计算资源Executor,Task就到达了真正计算的步骤。

转载于:https://www.cnblogs.com/kinghey-java-ljx/p/8522573.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

es6 --- Promise.all等待多个异步任务执行

项目中遇到一个问题,要用多个http请求,获取数据,然后将获取的数据统一处理… 第一反应想到用promise.all来做… 下面进入主体 // 首先使用promise封装http请求. function getListByDetecttype (params) {return new Promise((resolve, reject) > {let param params ? par…

16 代码分割之错误边界与Suspense和命名导出

代码分割之错误边界与Suspense const Main React.lazy(() > import(./main)) class ErrorBoundary extends React.Component {state {hasError: false,}static getDerivedStateFromError(err) {console.log(getDerivedStateFromError err, err)return {hasError: true}}c…

Python 原生爬虫

Python3 实现游戏主播人气排行榜 from urllib import request import re# 爬取某个游戏主播的人气(每个游戏主播的观看人数)排行榜 爬虫前奏:明确爬虫目的找到数据对应的网页分析网页的结构找到数据所在的标签位置模拟HTTP请求,向…

Mac 下查看网络端口占用情况

1、Mac 下查看网络端口占用情况 有的时候关闭了服务器,但是端口还是占用,解决的方法是 kill 掉占用该端口的进程。 # 查看 8009 端口的占用情况 $ lsof -i:8009 可以看到,该端口被 id 为 4215 的进程所占用,这个时候直接在命令…

javascript --- 变量提升的理解

看下面一段代码: (function () {var x foo();var foo function foo () {return "foobar";};return x; })();(不许打出来)猜猜返回结果是什么… 答案是 // foo is not a function下面来解释为什么会这样,首先得明白: 1.如果变量声明了但未赋值,则会显示undefined…

17 初探Context的使用场景

context 容器(即上下文) → 装数据 → 可以传递到程序的多个地方程序在执行时可访问的容器 import styles from ...则css要写module.css,否则无效果; import from ...则css无须写module. ,否则无效果 使用 context.j…

分布式监控系统开发【day37】:需求讨论(一)

本节内容 为什么要做监控? 常用监控系统设计讨论监控需求讨论如何实现监控服务器的水平扩展?监控系统架构设计一、为什么要做监控? 熟悉IT监控系统的设计原理开发一个简版的类Zabbix监控系统掌握自动化开发项目的程序设计思路及架构解藕原则…

iOS:练习题中如何用技术去实现一个连线题

一、介绍 本人做的app涉及的是教育行业,所以关于练习题的开发肯定是家常便饭。例如,选择题、填空题、连线题、判断题等,每一种题型都需要技术去实现,没啥多大难度,这里呢,就给出实现连线题的核心代码吧。过…

18 Context与组合的应用场景与使用问题

contextType 指定context类型为创建的上下文,此时不需要用Consumer组件包裹,使用this.context即可访问会向上找最近的上下文并取值最适合的场景:杂乱无章的组件都需要同一些数据;若单纯为了不层层传递属性,使用contex…

http --- 共享加密(对称加密)的几个概念

使用互联网进行数据传输时,可能会产生以下四个问题: 1. 窃听: A向B发送的消息,有可能在传输过程中被X窃听到 2. 假冒: A收到来自B的消息有可能是X冒充的 3. 篡改: A确实收到来自B的消息,但是该消息有可能被X篡改了 4. 事后否认:B确实收到了来自A的消息,但是A是恶意用户,当A像B…

213. House Robber II 首尾相同的偷窃问题

[抄题]: You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed. All houses at this place are arranged in a circle. That means the first house is the neighbor of…

原型链

<!DOCTYPE html><html><head lang"en"> <meta charset"UTF-8"> <title></title></head><body><script> /* 原型中的默认属性 原型链&#xff1a;当调用构造函数&#xff08;Fn()&a…

http --- 公开密钥加密(非对称加密)的几个概念

公开密钥加密: 公钥加密,私钥解密 公开密钥加密的处理流程: 1. A准备通过互联网向B发送数据 2. B生成公钥P和私钥S 3. B将P发送给A 4. A使用P进行加密,并将密文通过互联网发送给B 5. B使用S进行解密得到数据公钥加密的更具体的栗子: 1.B首先准备好公钥P和私钥S 2.B将公钥发布…

19、20 Context API

安装React Dev Tool Context对象.displayName 使用别名 不使用别名 React.createContext 创建指定的Context对象组件会找离自己最近的Provider&#xff0c;获取其value变量名都叫value的情况&#xff0c;就近取AContext变量名有所区分&#xff0c;两个value都可以获取可以…

01-spring配置详解

1 bean元素 <!--将User对象交给spring容器进行管理 --><!-- Bean元素:使用该元素描述需要spring容器管理的对象class属性:被管理对象的完整类名.name属性:给被管理的对象起个名字.获得对象时根据该名称获得对象. 可以重复.可以使用特殊字符.id属性: 与name属性一模一…

第八模块:算法设计模式、企业应用 第2章 企业应用工具学习

第八模块&#xff1a;算法&设计模式、企业应用 第2章 企业应用工具学习转载于:https://www.cnblogs.com/tqtl911/p/9131614.html

http --- 混合加密的具体过程

混合加密: 共享加密存在一个“共享密钥”无法安全告知服务端的问题.公开加密存在,加密、解密速度慢的问题.混合加密则同时使用了2种加密技术,具体过程如下: 1. B提前生成公钥P和私钥S,并将P发布到网上 2. A想(通过互联网)像B发送数据 3. A从互联网上获取B的公钥P,并使用P对共享…

Vite+Vue3页面空白、图标不显示问题解决

页面空白问题 由于项目部署在子文件夹下&#xff0c;因此需要配置vite.config.js const config {base: ./, }el-icon图标不显示、打包时mkdir无权限 在控制台Network看字体图标的请求&#xff0c;发现地址多了_assets&#xff0c;本以为需要重新配置publicDir&#xff0c;后…

在HTML打开已安装的App,未安装跳转到对应的下载链接

借鉴 HTML中判断手机是否安装某APP&#xff0c;跳转或下载该应用 function lookApp () {var ua navigator.userAgentvar isAndroid /(Android);?[\s/]([\d.])?/.test(ua)var isIpad /(iPad).*OS\s([\d_])/.test(ua)var isIpod /(iPod)(.*OS\s([\d_]))?/.test(ua)var is…

javascript --- 自定义数组的反序函数

想写一个自定义的_reverse函数,其作用是将传入的数组进行部分反序. 效果如下: 输入[1,2,3,4,5,6,7,8,9] 第一个将2~4个位置的数字反序 第二个将2~6个位置的数字反序. // js function _reverse(arr, s, e) {arr arr.join().slice(0,s) arr.join().slice(s,e).split().revers…