精华内容
下载资源
问答
  • Spark任务执行流程

    千次阅读 2018-09-27 11:34:34
    2.DAGScheduler将DAG切分Stage(切分的依据是Shuffle),将Stage生成的Task以TaskSet的形式给TaskScheduler 3.TaskScheduler调度Task(根据资源情况将Task调度到相应的Executor) 4.Executor接收Task...

    在这里插入图片描述
    这是Spark官方给的图,大致意思就是:

    四个步骤
    1.构建DAG(有向无环图)(调用RDD上的方法)
    2.DAGScheduler将DAG切分Stage(切分的依据是Shuffle),将Stage中生成的Task以TaskSet的形式给TaskScheduler
    3.TaskScheduler调度Task(根据资源情况将Task调度到相应的Executor中)
    4.Executor接收Task,然后将Task丢入到线程池中执行

    DAG 有向无环图(数据执行过程,有方法,无闭环)
    在这里插入图片描述
    虽然是程序的起点和终点都是hdfs,但是不是同一个文件,如果图中的out文件存在的话就会报错。

    DAG描述多个RDD的转换过程,任务执行时,可以按照DAG的描述,执行真正的计算(数据被操作的一个过程)

    DAG是有边界的:开始(通过SparkContext创建的RDD),结束(触发Action,调用run Job就是一个完整的DAG)

    一个RDD只是描述了数据计算过程中的一个环节,而DAG由一到多个RDD组成,描述了数据计算过程中的所有环节(过程)

    一个Spark Application中是有多少个DAG:一到多个(取决于触发了多少次Action)

    为什么要切分Stage?
    一个复杂的业务逻辑(将多台机器上具有相同属性的数据聚合到一台机器上:shuffle)
    如果有shuffle,那么就意味着前面阶段产生的结果后,才能执行下一个阶段,下一个阶段的计算要依赖上一个阶段的数据。
    在同一个Stage中,会有多个算子,可以合并在一起,我们称其为pipeline(流水线:严格按照流程、顺序执行)

    在这里插入图片描述
    Spark运行时,首先启动一个客户端(Driver),也可以时spark-shell客户端

    spark-submit --master spark://hadoop-master:7077 --executor-memory 4g --total-executor-cores 12
    

    1,客户端和Master建立链接并且申请资源,每个executor需要4g内存,总共需要12核
    2,master进行资源调度(节点向master注册的时候,会将自己的资源情况一并提交给master)
    3,master和worker进行RPC通信,启动executor
    4,启动各个worker节点上的executor
    5,executor和Driver端进行通信
    6,RDD触发Action后,会根据最后这个RDD往前推断依赖关系(宽依赖或者窄依赖),遇到Shuffle就切分Stage,会递归切分,递归的出口是RDD没有父RDD
    7,DAGScheduler切分完Stage后,会进行提交Stage,先提交前面的Stage,前面的Stage执行完之后再提交后面的Stage,每一个stage都会产生很多业务逻辑相同的Task,然后以TaskSet的形式将task传递给TaskScheduler,然后TaskScheduler将Task进行序列化,根据资源情况,将task发送给Executor
    8,将Driver端产生的task发送给executor
    9,executor在接收到task之后,先将task进行反序列化,然后将task用一个实现了runnable接口的实现类包装起来,然后将该包装类丢入线程池,包装类实现的run方法就会被执行,进而调用task的计算逻辑。

    以上就是Spark的执行流程。

    展开全文
  • 一、流程实例,任务执行对象... act_ru_task 正在执行任务表,(只有userTask任务节点,才会此表产生数据) act_hi_taskinst 历史任务表,(只有userTask任务节点,才会此表产生数据) act_h...

    一、流程实例,任务,执行对象相关表结构

    • act_ru_execution 正在执行的执行对象表

    • act_hi_procinst 流程实例的历史

    • act_ru_task 正在执行的任务表,(只有userTask任务节点,才会在此表中产生数据)

    • act_hi_taskinst 历史任务表,(只有userTask任务节点,才会在此表中产生数据)

    • act_hi_actinst 所有活动节点的历史

    二、请假流程实例进行说明

    2.1、BPMN流程图

    请假流程图

    2.2 BPMN代码

    <process id="leave" name="leave process" isExecutable="true">
    
    <startEvent id="startevent1" name="Start"></startEvent>
    
    <userTask id="usertask1" name="组长审批" activiti:assignee="组长"></userTask>
    
    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
    
    <userTask id="usertask2" name="主管审批" activiti:assignee="主管"></userTask>
    
    <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>
    
    <endEvent id="endevent1" name="End"></endEvent>
    
    <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>
    
    </process>

    2.3 运行流程进行说明

    1 启动流程

    RuntimeService runtimeService = processEngine.getRuntimeService();
    
    runtimeService.startProcessInstanceByKey("leave");

    启动流程之后 act_ru_execution、act_hi_procinst表中会各增加一条记录

    act_hi_procinst

    act_ru_execution

    从act_ru_execution中的ACT_ID_字段可以看出,当前执行节点在userTask1。


    启动流程的同时,流程流向第一个用户任务节点,在act_ru_task、act_hi_taskinst各产生一条数据

    act_ru_task

    act_hi_taskinst

    从act_hi_taskinst中END_TIME_字段可以看出,此时userTask1节点正在执行。


    2 组长审批任务

    String taskId ="2505";
    taskService.complete(taskId);
    当组长审批完userTask1任务之后,当前流程流转到领导审批节点:
    
    • act_ru_task表数据变化
      已经完成的userTask1任务节点数据被清除,新增一条userTask2节点数据

    • act_hi_taskinst表数据变化
      已经完成的userTask1节点数据依然存在,其中END_TIME_字段为此任务节点结束时间、并且新增一条userTask2任务记录,其END_TIME_字段为NULL,表示此任务节点还在运行

    • act_ru_execution表数据变化
      由于当前流程进行了运转,所以当前执行对象会更新当前流程执行了什么节点之上

    3 领导审批任务

    String taskId ="5002";
    taskService.complete(taskId);

    在此流程图中当领导进行审批之后,相当于走完了流程,也就意味着流程结束

    • act_ru_task表变化
      同userTask1节点执行,当此任务节点执行结束之后就会从此表中删除这条节点记录

    • act_hi_taskinst表数据变化
      更新此任务节点记录,更新END_TIME_字段值为任务节点结束时间

    4 流程结束

    • act_ru_execution表数据变化
      由于领导审批结束后,流程执行结束,也就是执行对象执行完毕,该条执行对象对应数据会被清除。

    • act_hi_procinst表数据变化
      流程执行结束,更新流程实例结束时间

       

      act_hi_procinst.png

    三、总结

    • ProcessInstance流程实例
      • 特指流程从开始到结束的那个最大的执行分支,一个执行的流程中,流程实例只有1个
      • 代表流程定义的执行实例。一个流程实例包括了所有的运行节点
      • 流程实例通常也可以叫做执行实例根节点

    注意
    (1)如果是单例流程,执行对象ID就是流程实例ID
    (2)如果一个流程有分支和聚合,那么执行对象ID和流程实例ID就不相同
    (3)一个流程中,流程实例只有1个,执行对象可以存在多个

    • Execution 执行对象
      • 启动流程实例的时候会首先创建流程实例,然后创建执行实例
      • 流程运转的过程中永远执行的是自己对应的执行实
      • 当所有的执行实例按照规则执行完毕之后,则实例随之结束
      • 流程按流程定义的规则执行一次的过程,就可以表示执行对象Execution
      • 一个流程中,执行对象可以存在多个,但是流程实例只能是一个

    对应表
    act_ru_execution: 正在执行的信息
    act_hi_procinst:已经执行完的历史流程实例信息
    act_hi_actinst:存放历史所有完成的活动

    • Task任务 --- 执行到某任务环节时生成的任务信息
      对应的表:
      act_ru_task:正在执行的任务信息
      act_hi_taskinst:已经执行完的历史任务信息
    展开全文
  • Hadoop执行任务过程

    千次阅读 2018-01-16 09:48:18
    jre外依赖的jar包,待处理的数据文件以及输出文件夹的位置和名称client端首先检查此任务输出的文件夹是否存在,然后向JobTracker为此任务申请一个id,然后hdfs创建一个对应此任务的文件夹,将这个任务依赖的...
    1. 用户从client端提交一个任务,此任务指定了运行的jar包,除java jre外依赖的jar包,待处理的数据文件以及输出文件夹的位置和名称
    2. client端首先检查此任务输出的文件夹是否存在,然后向JobTracker为此任务申请一个id,然后在hdfs中创建一个对应此任务的文件夹,将这个任务依赖的外部jar包以及任务要运行的jar包放入此任务的文件夹中;然后调用任务的InputFormat中的getSplit方法来计算inputSplit,其中每一个inputSplit是由一个mapper来处理的,inputSplit对象在Hadoop的定义中仅仅有两个属性Length和Locations,用户可以定义自己的inputSplit对象来包含更多的属性。计算完毕的inputSplit文件放到Hdfs中job所对应的folder里面
    3. client端调用Submit方法来提交任务,通过RPC调用JobTrackerSubmit方法,JobTrackerSubmit方法首先生成Hadoop任务,然后将此任务根据此任务的配置来初始化生成对应的MapReduce Task,其中Map Task的数量跟InputSplit的数量相同,而Reduce Task的数量是由用户在配置文件中指定的,如果用户不指定,则默认值为1
    4. 初始化后的MapReduce Task会放到队列中,直到JobTracker收到TaskTracker的心跳,如果JobTracker发现TaskTracker的心跳中声明目前TaskTracker是空闲并且能够执行任务的,那么,JobTracker会将MapperReducer Task分配给TaskTracker执行,TaskTracker收到心跳的回应中如果携带了要执行的Mapper或者Reducer的信息,则TaskTracker会开始执行分配到的Task
    5. TaskTracker执行Mapper的时候,会首先去HDFS中取出相应的Split描述信息和任务依赖的jar包以及任务执行的jar包,然后根据Split信息读取相应的数据文件中的部分。首先调用RecordReader中的getCurrentKey和getCurrentValue读取下一个Key,Value然后将此Key, Value传递给Mapper的Map函数,在Map函数中将其转换成为MapOutputKey,MapOutputValue。
    6. Mapper的输出,如果没有Reducer,会直接排序输出到硬盘上,如果有Reducer,Mapper的输出会首先经过Partitioner的计算,计算输出的Key,Value是要分到哪一个Reducer,然后会首先存储在内存中,如果内存中放不下后,会对这一部分结果进行spill out,在将内存中的数据spill out到硬盘的时候,会调用SortAndSpill对输出结果进行排序,以便保证一个文件中结果是有序的。每次spill out会产生一个文件,这个文件中包含多个partition的数据,当产生多个文件后,会对这多个有序文件进行归并排序,即合并操作。此过程会重复直到Mapper所有的值输出完毕为止,Mapper会一个文件,此文件中会先按partition对元组进行排序,然后相同partition中的元祖,会按照key来进行排序。
    7. Reducer启动之后,会不断从JobTracker返回的heartbeat response中获取每个Mapper是否完成的信息。会启动默认的几个copy线程,默认值是5,从每个Mapper的输出结果中拷贝数据,拷贝数据使用的是Http协议,当从每个Mapper中获取到应该处理的数据之后,会对输入的值进行一个归并排序,然后对每一个输入的Key,Set<Value>应用Reducer中的Reduce函数,输出后的结果会直接写到硬盘上,作为输出结果。

    Comment

    1. JobTracker选择哪一个任务进行初始化是由Scheduler的逻辑实现来决定的,用户可以提供自定义的Scheduler
    2. TaskTracker会启动一个Jvm来执行Mapper或者Reducer,除非用户指定需要重用之前启动的Jvm
    3. 用户可以提供Combiner来对Mapper的输出进行初步的合并,Combiner会在Partitioner之后执行,主要是在Mapper的结果Spillout到文件的时候进行combine操作。
    4. 用户可以提供Partitioner来确定Mapper输出的Key,Value 被分到哪一个Reducer,可以用来防止数据倾斜。
    5. 用户可提供自定义InputFormat来定义如何产生Split
    6. 用户可提供自定义RecordReader来定义如何从输入中产生Key,Value对
    7. 用户可提供自定义OutputFormat和RecordWriter来定义如何输出。
    展开全文
  • 操作系统,低优先级任务想要得到CPU的使用权,是建立高优先级任务遇到阻塞语句的前提下,比如等待事件标志、等待消息、等待信号量、遇见延迟函数等 而低优先级任务执行过程中,高优先级任务在干什么,或者...

    在操作系统中,低优先级任务想要得到CPU的使用权,是建立在高优先级任务遇到阻塞语句的前提下,比如等待事件标志、等待消息、等待信号量、遇见延迟函数等

            而在低优先级任务执行过程中,高优先级任务在干什么,或者说CPU在干什么

            在抢占式操作系统中,高优先级任务是不会等待低优先级任务彻底执行完毕后,通过调度器切换任务而获得CPU使用权,而是高优先级任务的就绪条件一满足就会立刻夺过CPU的使用权,暂时中断正在执行的低优先级任务,但CPU在执行低优先级任务时,是如何实时知道高优先级任务就绪了呢,由结果倒推原因,那就是CPU不是一直特别专一的只执行低优先级任务,而是有一个大扫描,会实时检测高优先级任务的运行条件是否已满足,一旦满足就会发生抢占事件,否则继续执行低优先级任务

            其实仔细研究过操作系统后便知,这是操作系统的任务切换机制,操作系统跟人一样必须有一个心跳,整个系统按照这个心跳有序正确的工作,这个心跳就是系统时钟,系统时钟一般是由定时器产生,每隔一定时间便产生一次中断,系统便在这个中断里做一些事情,这当中就包括调度器的任务切换,即一次中断到来后便检测高优先级任务的就绪条件是否满足,条件满足则切换任务,不满足则继续执行当前任务,这就在现象上表现出,操作系统能实时知道高优先级任务何时就绪了,以便切换到高优先级任务而执行

    展开全文
  • 团队管理26--任务执行过程管理

    千次阅读 2018-12-04 18:52:41
    我们平时大部分的工作其实都进行任务执行,那么在任务执行过程中,我们会遇到很多问题,常见的如下: 1、任务执行结束了,发现并不是负责人想要执行任务,也就是说任务执行目标从开始就没有沟通清楚; 2、...
  • 这个可以加上一个时间戳字段,然后后期比对时间戳字段来对相应的账号进行解锁,我比较偷懒,就想着用oracle定时执行任务来做一个批量自动处理,把这个交个数据库自己去执行,省下写方法去比对的操作。...
  • 可以把微任务看成是一个需要异步执行的函数,执行时机是主函数执行结束之后、当前宏任务结束之前 Promise.then,process.nextTick(node)*。 微任务是基于消息队列、事件循环、UI 主线程还有堆栈而来的
  • 经典MapReduce任务执行流程详解

    千次阅读 2019-01-13 09:51:18
    本文主要介绍hadoop运行经典MapReduce(MapReduce1)任务过程涉及的实体及其工作原理。 涉及实体 客户端:提交MapReduce作业; jobtracker:它协调集群上运行的所有作业(分配给tasktracker),是java应用程序...
  • activity启动流程任务执行

    千次阅读 2020-06-25 11:16:25
    在上一篇,我们快速搭建并部署了一个bpmn的流程文件,流程文件部署起来后,后续就要开始走流程了,下面我们就来完成流程实例的启动与任务执行与跳转 1、启动流程实例 紧接着使用上一篇的流程图,流程文件部署...
  • 上一篇博客Quartz任务调度框架--简介与示例(一)我们已经简介和示例代码对quartz有了初步的认识,这篇博客我们通过追踪quartz的定时任务执行流程来加深对quartz的了解。 1、运行活动线程 (1)Quartz_Worker-...
  • 1、创建定时向表插入数据的存储过程,名为testJob。 CREATE OR REPLACE PROCEDURE "testJob" AS BEGIN EXECUTE IMMEDIATE 'INSERT INTO TABLE_HIS SELECT * FROM TABLE_AI'; COMMIT; END; 2、...
  • 代码如下 : ... import java.util.HashSet; import java.util.List;...import java.util.Set;...import java.util.concurrent.*;...执行结果如下 : future task: task2 future task: task1 future task: task3
  • oracle-存储过程定时执行任务

    万次阅读 2019-03-26 14:55:13
    平时工作多数业务的数据,需要有时间截点截止当天24点,定时执行计划还是用的比较多的。终于有时间手动整理总结一些内容了。...存储过程中完成相应的逻辑操作 实现步骤: 1.创建一个测试表 cre...
  • 一、流程图  二、部署流程定义   /**部署请假流程(从zip)*/ @Test public void deploymentProcessDefinition_zip(){ InputStream in = this.getClass().getClassLoader().getResourceAsStream("...
  • 间隔/interval是指上一次执行结束到下一次开始执行的时间间隔,当interval设置为null时,该job执行结束后,就被从队列删除。假如我们需要该job周期性地执行,则要用‘sysdate+m’表示。 常用时间设置: (1)....
  • Activiti(6)-流程实例、任务执行

    千次阅读 2018-07-01 12:42:02
    1、流程图 2、部署流程定义 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /**部署流程定义(从zip)*/ @Test public void deploymentProcessDefinition_zip(){ InputStream ...
  • hadoop任务执行过程

    千次阅读 2016-02-11 12:01:47
    3.1、任务提交 JobClient.runJob()创建一个新的JobClient实例,调用其submitJob()函数。 向JobTracker请求一个新的job ID检测此job的output配置计算此job的input splits将Job运行所需的资源拷贝到JobTracker的文件...
  • ThreadPoolExecutor是怎样执行任务

    千次阅读 2018-03-16 23:06:59
    先扯点别的:最近被公司...这篇文章(一天写不完)探索一下Java的ThreadPoolExecutor的使用,感觉还是挺重要的。如果出去面试能把这个讲清楚,估计能唬住不少面试官,哈哈。 先给出一个简单的使用示例,然后再探...
  • 点击上方「蓝字」关注我们问题描述程序发版之后一个定时任务突然挂了!“幸亏是用灰度跑的,不然完蛋了。????”之前因为线程池踩过坑,阅读过ThreadPoolExecutor的源码,自以...
  • 1、首先创建一张表 该表用来执行插入数据。 create table getSysDate(test date); 2、创建存储过程以插入数据。 create or replace procedure insertSysDate as begin insert into getSysDate values (sysdate); ...
  • 使用node.js的开发者一定都知道它是单线程的,异步不阻塞且高并发的一门语言,但是node.js实现异步的时候,两个异步任务开启了,是就是谁快就谁先完成这么简单,还是说异步任务最后也会有一个先后执行顺序?...
  • spark集群的任务提交执行流程

    万次阅读 2018-03-07 20:41:30
    ResourceManager:负责将集群的资源分配给各个应用使用,而资源分配和调度的基本单位是Container,其中封装了集群资源(CPU、内存、磁盘等),每个任务只能Container运行,并且只使用Container的资源;...
  • hadoop的mapreduce任务执行流程

    千次阅读 2017-03-23 20:25:19
    1.当map任务开始执行的时候,会先根据用户设置的FileInputFormat去读取数据源,默认是TextFileInputFormat读取hdfs的文件(当然mapreduce内部也提供了其他的实现类,比如读取数据库的等等),我们也可以自己定义一...
  • 因为项目有个需求是大批量的数据自动计算后插入更新到数据库,为避免占用正常资源,需要固定时间段进行自动计算,因为项目服务器是windows server2012,就考虑用windows平台强大的任务计划程序来实现。...
  • 有时候我们开发过程中,很容易犯这样一个错误,就是服务写一个定时任务,然后也没做其它的处理就上线了。然后微服务架构为了保证高可用,一般都会部署多个服务,这个时候问题就来了,时间一到定时任务一启动,...
  • azkaban执行各种job任务

    千次阅读 2018-11-20 19:53:37
    一:Azkaban执行各种job任务 所有的job文件打成zip的压缩包,注意:不能是rar压缩 所有job文件可以通过Noteped++编辑该文件,注意设置Job文件的格式编码 1)azkaban的job操作普通linux语句 type=command ...
  • 一、单机指定时间执行定时任务实现方式 Timer运行机制 ScheduledThreadPoolExecutor的运行机制 原理图 Leader/Follower模式正在上传…重新上传取消 Timer和ScheduledThreadPoolExucutor区别 Timer是基于...
  • 日常的使用遇到一些需要执行的事情或任务,我们也可以通过命令来告诉电脑特定时间把一些特定的工作给做一下。     以上的这些情景Linux,我们可以通过crontab和at这两个工具来实现这些功能。 二、...
  • 作业处理器 用于编排执行的作业处理器和任务框架。 该项目是开放的以供发表意见/建议/建议 作业处理器是一种类似于工作流...有一个Compensation节点,如果正常流程执行过程中发生错误,则将执行该节点 正常流程
  • 1、创建定时向表插入数据的存储过程,名为testJob1 数据库脚本如下: CREATE OR REPLACE PROCEDURE "testJob" AS ...(1)what值填写待执行的存储过程,可以多个,用分号(;)隔开。 (2)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,070,026
精华内容 428,010
关键字:

在执行任务的过程中