springsecurity原理执行流程_3. Spark原理-执行流程解析

e61ed10bd974601cd5591b19e540cfb9.png

概念

Job

当在RDD上执行Action操作时就会提交一个Job。这个Job会将RDD分为多分,并将每份RDD提交到集群执行。

Stage

当一个Job提交后将分解为多个Stage。

Task

一个Stage可分解为多个Task。Task分为Shuffle map Task和Result Task。其中Shuffle map Task任务是将一个现有的RDD转化为一个新的RDD。Result Task在RDD上执行action操作,计算RDD结果并将结果返回驱动器。

scheduler

调度器分为两部分:

  • DAG调度器:将一个作业分解一个包含多个阶段的DAG。
  • 任务调度器:负责将每阶段的任务提交到集群

Spark执行流程

当提交一个作业后,Spark需要驱动器和执行器分别执行一些流程,驱动器执行流程:

f45cdfd47cba6fb03b7f63b096e65eba.png

执行器流程:

6b24db1aec7f3d393c241b00bc21f813.png
此流程为类级别流程,在Spark源码中均可以找到对应的类。

1. Run Job

当在RDD上执行action操作时,会触发SparkContext调用DAGScheduler方法runJob提交一个作业。输入参数包括:

  • rdd,目标rdd
  • func,需要在RDD上执行的函数
  • partitions,需要在RDD上执行函数的部分。
  • resultHandler,需要在每个结果上执行的回调函数。

2. Submit Tasks

sparkContext提交的job不能直接直接转化为Task,需要先转化为Stage然后转化为Task集合,提交给TaskScheduler。

3. Assign Task

执行任务涉及需要在哪里执行。TaskScheduler任务分配策略是依据传输远近按照以下顺序执行,同处理器,同节点,同机架。

4. Send task

SchedulerBackend将task消息发送到集群的Executor节点。

5. Launch task

executor执行task任务。executor执行Task任务分为三个步骤:

  1. 检查任务执行需要的资源是否是最新的,包括Jar包或者文件依赖。executor会在本地缓存上一个任务的依赖,基于此缓存机制,executor仅需下载有改动资源。
  2. 从任务消息中反序列化任务代码,代码以二进制方式传输。
  3. 执行任务代码,由于和executor使用同一个JVM,执行任务时没有额外的进程开销。

6. Run Task

Task可以将结果返回给Driver。Task首先将结果序列化并返回给executor的backend,然后作为状态更新消息返回给driver。shuffle map任务结果允许下一阶段获取当前阶段输出,result任务直接返回该片区的结果,驱动器将各个片区结果组装返回给用户程序。

问题

提交给executor的RDD是如何分片的?

Job执行过程中是不会重新对RDD进行分片的。RDD分片工作是在生成RDD,提交Job前执行的。RDD分片方法是当Spark从HDFS读取一个文件,它将为每个输入切分创建一个分片。输入切分是由Hadoop InputFormat使用的。例如如果你使用textFile方法,那么它的格式是TextInputFormat,对于未压缩的文件每个HDFS的块都将创建一个分片。由于压缩文件是不可切分的,对于压缩文件每个文件仅创建一个分片,不管文件由多大。例如如果你有一个30G未压缩的HDFS文件,默认每个HDFS块大小未128MB,那么你将拥有235个分片。

除了默认分片方法外,Spark支持手动调整分片数量,通过调用RDD的repartition(num)方法,可以重新将RDD调整为num个分片。该方法时惰性执行的,只有执行action操作才会执行重新分片。

引用

Spark源码​github.com Index of /apache/spark/​mirrors.ustc.edu.cn How does Spark partition(ing) work on files in HDFS?​intellipaat.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security原理执行流程可以大致分为以下几步骤: 1. 请求到达应用程序时,先经过Spring Security的过滤链。这个过滤链是由一系列的过滤器组成的,每个过滤器负责处理不同的安全任务。 2. 过滤器链的第一个过滤器是SecurityContextPersistenceFilter。它的主要作用是从Session中获取SecurityContext,并将其绑定到当前的线程上下文中。 3. 接下来是UsernamePasswordAuthenticationFilter过滤器,它用于处理基于用户名和密码的身份验证请求。它会检查请求是否包含了用户名和密码,并将其封装成一个Authentication对象。 4. 然后,Authentication对象将传递给AuthenticationManager进行身份验证。AuthenticationManager是Spring Security的身份验证核心,它负责验证用户的身份。 5. 在身份验证过程中,通过ProviderManager委托给配置的AuthenticationProvider来完成具体的身份验证逻辑。AuthenticationProvider是一个接口,可以由开发人员实现,用于根据具体的身份验证策略来验证用户。 6. 如果身份验证成功,则AuthenticationManager会返回一个已经填充了用户权限信息的Authentication对象。 7. 然后,这个已认证的Authentication对象将传递给AccessDecisionManager进行授权。AccessDecisionManager是Spring Security的授权核心,它负责根据用户的角色和权限决定是否允许访问受保护的资源。 8. 在授权过程中,通过AccessDecisionManager委托给配置的AccessDecisionVoter来进行实际的授权决策。AccessDecisionVoter是一个接口,可以由开发人员实现,用于根据具体的授权策略来决定用户是否有权限访问资源。 9. 最后,如果用户被授权访问资源,则请求将继续处理。否则,将返回相应的错误信息或跳转到相应的错误页面。 需要注意的是,上述流程只是Spring Security的基本流程,具体的执行流程还会根据配置和自定义实现而有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Spring Security 中的执行原理流程分析](https://blog.csdn.net/weixin_63835553/article/details/122750865)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [spring security执行原理流程](https://blog.csdn.net/chyanwu68/article/details/115191428)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值