spark(3)
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流程
------------------------------------
spark(3)的更多相关文章
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark RDD 核心总结
摘要: 1.RDD的五大属性 1.1 partitions(分区) 1.2 partitioner(分区方法) 1.3 dependencies(依赖关系) 1.4 compute(获取分区迭代列表) ...
- spark处理大规模语料库统计词汇
最近迷上了spark,写一个专门处理语料库生成词库的项目拿来练练手, github地址:https://github.com/LiuRoy/spark_splitter.代码实现参考wordmaker ...
- Hive on Spark安装配置详解(都是坑啊)
个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/p/a7f75b868568 简介 本文主要记录如何安装配置Hive on Sp ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- Spark踩坑记——初试
[TOC] Spark简介 整体认识 Apache Spark是一个围绕速度.易用性和复杂分析构建的大数据处理框架.最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apach ...
- Spark读写Hbase的二种方式对比
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 一.传统方式 这种方式就是常用的TableInputFormat和TableOutputForm ...
- (资源整理)带你入门Spark
一.Spark简介: 以下是百度百科对Spark的介绍: Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方 ...
- Spark的StandAlone模式原理和安装、Spark-on-YARN的理解
Spark是一个内存迭代式运算框架,通过RDD来描述数据从哪里来,数据用那个算子计算,计算完的数据保存到哪里,RDD之间的依赖关系.他只是一个运算框架,和storm一样只做运算,不做存储. Spark ...
- (一)Spark简介-Java&Python版Spark
Spark简介 视频教程: 1.优酷 2.YouTube 简介: Spark是加州大学伯克利分校AMP实验室,开发的通用内存并行计算框架.Spark在2013年6月进入Apache成为孵化项目,8个月 ...
随机推荐
- 【Leetcode】二叉树的层次遍历
题目: 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 思路:采用宽度优先搜索. 时间复杂度:O(n).n为节点的数量,遍历所有节 ...
- sublime text3安装格式化代码插件
1.代码提示插件:sublimeCodeIntel a)在Sublime Text 3中,按下Ctrl+Shift+P调出命令面板;b)输入install 调出 Install Package 选项并 ...
- sqli-labs(11)
基于登录点的注入(小编这里傻逼了 可以直接用group_concat函数绕过显示问题我还在用limit绕过) 0X01这里我们的参数就不是在get的方法里面提交的了 我们遇到了全新的问题 那么该怎么 ...
- 正则表达式中 group groups区别
先看代码instance: 1 >>> a="123abc456" 2 >>> import re 3 >>> print(r ...
- c/c++运算符
1.算术运算符(+ - / * %) 2.移位运算符 移运算符:操作数必须是整形,>>,逻辑左移左边移入的位用0填充,算数左移左边移入的的位用符号位补齐.(无符号数为逻辑左移,对于 ...
- xml文件中 xmlns xmlns:xsi 等解释
http://bbs.csdn.NET/topics/390751819 maven 的 pom.xml 开头是下面这样的 <project xmlns="http://maven.a ...
- Redis cluster Specification 笔记
ref: http://redis.io/topics/cluster-spec 1. 设计目标: 高性能:线性扩展:不支持合并操作:写操作安全:小概率丢弃:(对于每个key)只要有一个slave工作 ...
- 什么是webpack以及为什么使用它
什么是webpack以及为什么使用它 新建 模板 小书匠 在ES6之前,我们要想进行模块化开发,就必须借助于其他的工具.因为开发时用的是高级语法开发,效率非常高,但很可惜的是,浏览器未必会支持或认识 ...
- 如何在linux上部署vue项目
安装nginx的前奏 安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 创建一个文件夹 cd /usr/ ...
- Jmeter---BeanShell 常用的 vars, get, props, put ,log用法
BeanShell介 BeanShell是用Java写成的,一个小型的.免费的.可以下载的.嵌入式的Java源代码解释器,具有对象脚本语言特性.本篇只记录一下基本的使用.有以下五个组件: Beansh ...