首页 文章 精选 留言 我的

精选列表

搜索[分布式调度],共10006篇文章
优秀的个人博客,低调大师

Spark作业调度

Spark在任务提交时,主要存在于Driver和Executor的两个节点. (1)Driver的作用: 用于将所有要处理的RDD的操作转化为DAG,并且根据RDD DAG将JBO分割为多个Stage,最后生成相应的task,分发到各个Executor执行. 流程:sc.runJob -> DAGScheduler.runJob ->submitJob ->DAGEventProcessActor ->dagScheduler.handleJobSubmitted ->submitStage ->submitMissingTasks ->taskScheduler.submitTasks -> schedulerBackend.reviveOffers ->ReviveOffers ->DriverActor ->makeOffers -> resourceOffers ->launchTasks ->CoarseGrainedExecutorBackend(Executor) 其中handleJobSubmitted和submitStage主要负责依赖性分析,生成finalStage,根据finalStage来生成job. 源码newStage用来创建一个新的Stage private def newStage( rdd:RDD[], numTasks: Int, shuffleDep: Option[ShuffleDependency[_,_,_]], jobId:Int, callSite:CallSite) :stage = { val id = nextStageId.getAndIncrement() val stage = new Stage(id,rdd,numTasks,shuffleDep,getParentStages(rdd,jobId),jobId,callSite) stageIdToStage(id) = stage updateJobIdStageIdMaps(jobId,stage) stageToInfos(stage) = StageInfo.fromStage(stage) stage } spark在创建一个Stage之前,必须知道该Stage需要从多少个Partition读入数据,据此来创建Task数。源码Stage: private[spark] class stage( val id:Int //stage的序号越大,数值越大 val rdd: RDD[_], //归属于本stage的最后一个rdd val numTasks:Int, //创建的Task的数目,等于父rdd的输出Partition数目 val shuffleDep:Option[ShuffleDependency[_,_,_]],//是否存在shuffle val parents:List[Stage],//父stage列表 val jobId:Int,//作业id val callSite:CallSite) Stage的划分的重要依据就在于是否有Shuffle操作,既宽依赖(RDD的宽依赖和窄依赖请参考前文,或者百度- -),如果有,则创建一个新的stage.Stage的划分完毕就明确了很多内容了,如下: (1)产生的stage需要从多少个Partition中读取数据 (2)产生的stage会生成多少个Partition (3)产生的stage是否属于shuffle 当确认了有多少个Partition,其实就确认了有多少个task。 当作业提交及执行期间,Spark集群中存在大量的消息的交互,所以使用AKKA 进行消息的接收,消息的处理和消息的发送。 下面开始在各个Executor中执行Task。然而Task又被分为ShuffleMapTask和ResultTask两种,相当于Hadoop的Map和Reduce.每个Stage根据isShuffleMap来标记确定Task类型,来区分ShuffleMapTask和ResultTask.一旦task类型和数量确定,下来就分发到各个executor,由Executor启动县城来执行。(从计划到执行) TaskschedulerImple发送ReviveOffers消息给DriverActor,DriverActor在收到ReviveOffers消息后,调用makeOffers函数进行处理。源码如下: def makeOffers(){ launchTasks(scheduler.resourceOffers( executorHost.toArray.map{case(id,host)=>new WorkerOffer(id,host,freeCores(id))})) makeOffers函数主要用来找寻空闲的Executor,随机分发,尽可能的将任务平摊到各个executor中。发现有空闲的Executor,将任务列表中的部分任务利用launchTasks发送给制定的Executor.Task执行完毕.

优秀的个人博客,低调大师

使用Aiflow调度PYODPS

一、环境准备 • Python 2.7.5 PyODPS支持Python2.6以上版本• Airflow apache-airflow-1.10.71.安装MaxCompute需要的包 pip install setuptools>=3.0 pip install requests>=2.4.0 pip install greenlet>=0.4.10 # 可选,安装后能加速Tunnel上传。 pip install cython>=0.19.0 # 可选,不建议Windows用户安装。 pip install pyodps 注意:如果requests包冲突,先卸载再安装对应的版本2.执行如下命令检查安装是否成功 python -c "from odps import ODPS" 二、开发步骤 1.在Airf

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册