0.spark

--------------------------------------------

  transformation

  map

  filter

  repartition

spark核心API

----------------------------------------------------

  [SparkContext]

    连接到spark集群上的入口点

 [HadoopRDD]

    读取hadoop上的数据

 [MapPartitionsRDD]

    针对父RDD的每个分区提供了函数,构成的新类型的RDD

 [PairRDDFunctions]

    对偶RDD函数类

    可用于KV类型RDD的附加函数。可以通过隐式转化

 [ShuffleRDD]

    从shuffle中计算结果的RDD

 [RDD]  

    弹性分布式数据集

    不可变的数据分区集合

    基本操作:map  filter

    分区列表         //数据

    应用给每个切片的计算函数  //行为

    到其他RDD的依赖列表    //依赖关系

    (可选)针对kv类型的RDD分区类

    (可选)首选位置列表

  [DAGScheduler]

      高级调度器层面,实现按照阶段(stage),shuffle按照。

    对每个JOB的各阶段计算有向无环图(DAG),并且跟踪RDD和每个阶段的输出

    找出最小的调度运行作业,将Stage对象以TaskSet的方式提交给底层的调度器

    底层调度器要实现TaskScheduler接口,进而在cluster上运行job  

    TaskSet已经包含了全部的单独的task,这些Task都能够基于cluster的数据进行相应的正确的运行  

  Stage通过在需要shuffle的边界处将RDD打碎,来创建stage对象。

  具有"窄依赖"的RDD操作(比如map/filter)被管道化至另一个taskset中。而具有shuffle依赖的操作则包含多个Stage(一个进行输入,另一个进行输出)

  最后,每个stage都有一个针对其他stage的shuffle依赖,可以计算多个操作。

  

  DAG调度器检测首选位置运行task,通过基于当前缓存状态,并穿肚给底层的task调度器来进行实现,根据shuffle的输出是否丢失处理故障问题

  不是由stage内因为丢失文件而引发的故障有task调度处理,在取消整个stage之前,task会进行少量次数的重试操作

  【术语介绍】

    [job]提交给调度器的顶层工作项目,由ActiveJob表示,是Stage集合。

    [Stage]是task的集合,计算job的中间结果,同一个RDD的每个分区都会应用相同的计算函数。

        在shuffle的边界进行隔离(因此才引入了隔断,需要上一个stage完成之后,才能得到输出结果)

        有两种类型的stage:ResultStage;ShuffleMapStage:对shuffle输出文件的写操作,stage通常可以在job之间进行共享,可以跨越多个job实现共享

        如果job重用了同一个rdd的话,stage通常可以跨越多个job实现共享。

        并行任务的集合,都会计算同一函数,所有task有着同样的shuffle依赖

    [Task]单独的工作单元,发送给每一台主机

    [Cache tracking]DAG调度器可以找出那些RDD被缓存,避免不必要的计算,同时也会记住哪些shufflemap已经输出了结果,可以避免map端shuffle结果重复处理

    [Preferred localtions]

      dag调度器根据rdd的首选位置属性计算task在哪里运行

    [cleanup]运行的作业如果完成就会清除数据结构避免内存泄漏,主要针对耗时应用

    为了容错,同一阶段可能会运行多次 ,称之为"attemp",如果task调度器报告了一个故障,该故障是由于上一个stage丢失输出文件而导致的,DAG调度就会重新提交丢失的stage;DAG调度器会等待一段时间,看其他节点的任务是否失败,然后对丢失的stage重新提交ticketStage

    [ActiveJob]:在Dag调度器中运行job,作业分为两种类型:(1)result job,计算ResultStage来执行action;(2)map-stage job,为shuffleMapStage计算输出结果共下游stage使用,主要使用finalStage字段进行类型的划分;job只跟踪客户端提交的leaf stage,通过调用DAG调度器的submit job或者submitMapStage()方法来实现

Action发生之后,spark流程

------------------------------------

  

  

最新文章

  1. 链表反转leetcode206
  2. (原创)通用查询实现方案(可用于DDD)[附源码] -- 设计思路
  3. Smart Framework
  4. 国外android开源站点
  5. setcookie 设置无效
  6. 安装node-sass
  7. 如何编写一个gulp插件
  8. C++编程练习(11)----“图的最短路径问题“(Dijkstra算法、Floyd算法)
  9. Podfile
  10. 多线程、互斥锁、异步、GIL
  11. 创建Dynamic Web Project时 显示最新Apache Tomcat 8.0 的方法
  12. Linux中“!"的神奇用法
  13. 学习react
  14. .net core xss攻击防御
  15. asp.net loading 动画
  16. BZOJ4860 BJOI2017 树的难题 点分治、线段树合并
  17. PAT 1013 Battle Over Cities
  18. mfc 动态为控件添加事件2
  19. duilib踩坑记录
  20. WebViewJavascriptBridge源代码分析

热门文章

  1. 【gym102394L】LRU Algorithm(自然溢出哈希)
  2. 搭建私有git仓库gogs
  3. JMS学习十一(ActiveMQ Consumer高级特性之独有消费者(Exclusive Consumer))
  4. java复制项目中的补丁,完整的包路径
  5. Oracle升级11.2.0.3-11.2.0.4(Windows)
  6. linux可用的跨平台C# .net standard2.0 写的高性能socket框架
  7. ffplay播放YUV数据
  8. leetcode-mid-math-202. Happy Number-NO
  9. Linux编译部署vsftp服务
  10. 1、node-webkit 的概念,node-webkit 的下载