1. 内存模型

    1. RDD(弹性分布式数据集)

      1. RDD的五大特性
  1. a list of partiotioner。一组分区。partiotioner是一个抽象概念,指的是一片连续的空间,顾名思义一个RDD包含一组连续的空间。
  2. a function for partiotioner 每一个partiotioner都有着一个函数对其进行运算。这也是spark并行计算的基础。
  3. a list of dependencies on others RDDS RDD中间有着一系列的相互依赖。因为众所周知RDD是基于内存的运算的,虽然基于内存运算可以带来比较快的速度,但是相对应而来的便是容错性不好,因为随着一个节点的宕机,随之而来的是内存中的数据全部丢失。所以RDD这一特性也是RDD机制中容错性的一个保证。因为在spark并行计算中,是由着不同的RDD相互转换来进行的,如果其中一条线断了,RDD这个特性会去找上层RDD,如果找不到会一直追寻到顶层的元数据来重新运算。
  4. optionally ,a partitioner for key-value RDDS,可以对每一个partitioner进行再次分区。但是这个特性的先决条件是RDD必须是键值对格式的。
  5. 数据本地性。数据在哪,任务就在哪。不过汇总的时候需要走网络。所以优化的措施也有关于这一点。
  1. RDD原理机制

    1. 什么叫做弹性?

      1. 能存内存能存硬盘
      2. RDD之间可以相互进行转换
      3. RDD可以存任意类型的数据
    2. 在不同的Job里面除了落盘,RDD是立即失效的。另外有一个误区就是使用cache(),之后就会被立即缓存,这是错的,只有当真正执行的时候才会被创建,缓存,因为在此之前他是没有任何的数据源。
    3. lineage血统,在执行的时候会调度器会根据声明好的血统来根据若干阶段的stage构建成一个DAG,这一切的发生都是在运行时
  1. 窄依赖
指父RDD的每一个分区最多被一个子RDD的分区所用,表现为一个父RDD的分区对应于一个子RDD的分区,和两个父RDD的分区对应于一个子RDD 的分区。图中,map/filter和union属于第一类,对输入进行协同划分(co-partitioned)的join属于第二类。
  1. 宽依赖
指子RDD的分区依赖于父RDD的所有分区,这是因为shuffle类操作,如图中的groupByKey和未经协同划分的join。
  1. 算子
Spark算子我们可以简单理解为Spark为我们提供的API,包括count,group等操作。Saprk算子主要是处理数据的输入,运行,转换和输出。在运行和转换过程中对RDD进行操作,在RDD中包含的函数就是Spark的算子
  1. 转换算子
转换算子并不立即执行,在使用转换算子后并不会立即提交作业,致使完成作业的中间项处理,并不是完成自我理解感觉就像是声明在那里。转换算子是懒加载,并不会真正的为RDD分配空间,也就是说从一个RDD转换为另一个RDD不会立即执行。会触发执行算子后才真正执行。
  1. 执行算子
这样的算子才会是真正的提交作业,并将结果输出Saprk系统。
  1. 核心组件
  1. Master
在整个Standalone集群中主要负责资源的管理,集群的绝对掌权者。我们在提交作业的时候,其实真正提交给了Master,由Master协调资源给应用使用,也就是协调CPU,与内存。
  1. Worker
资源的真正拥有者,集群中真正工作资源的提供者,Worker需要向Master报告自己的资源使用情况。
  1. Driver
申请使用资源的者,负责作业的调度,Driver会根据算子的业务逻辑,形成DAG,然后向真正的执行者分发任务。
  1. Executor
任务的真正执行者,真正执行我们业务代码的东西,存在与Worker上,使用Worker的资源,在默认情况下每个worker上会有一个Executor,如果涉及资源优化,一个Worker会有多个Executor。其实在真正的作业中主要是Driver与Executor进行通信,Driver向Executor分配作业,Executor向Driver汇报作业的真正执行情况。
  1. 计算模型

    1. Application
我们的应用程序,也就是我们所写的代码,我们的业务模型。他在Standalone模型中会将Application注册给Master,在Spark集群中他的真正组成是一个Drive与一组Executor组成。
  1. Job
当我们使用Saprk的执行算子的时候,逻辑上会生成一个Job,也就是,每一次生成一个Job都会有一堆RDD进行转换执行。一个Job中包含了多个Stage。
  1. Stage
一个Job会被拆分为多组Task,每组任务被称为一个Stage就像Map Stage, Reduce Stage。Stage的划分在RDD的论文中有详细的介绍,简单的说是以shuffle和result这两种类型来划分。在Spark中有两类task,一类是shuffleMapTask,一类是resultTask,第一类task的输出是shuffle所需数据,第二类task的输出是result,stage的划分也以此为依据,shuffle之前的所有变换是一个stage,shuffle之后的操作是另一个stage。比如 rdd.parallize(1 to 10).foreach(println) 这个操作没有shuffle,直接就输出了,那么只有它的task是resultTask,stage也只有一个;如果是rdd.map(x => (x, 1)).reduceByKey(_ + _).foreach(println), 这个job因为有reduce,所以有一个shuffle过程,那么reduceByKey之前的是一个stage,执行shuffleMapTask,输出shuffle所需的数据,reduceByKey到最后是一个stage,直接就输出结果了。如果job中有多次shuffle,那么每个shuffle之前都是一个stage. 
会根据RDD之间的依赖关系将DAG图划分为不同的阶段,对于窄依赖,由于partition依赖关系的确定性,partition的转换处理就可以在同一个线程里完成,窄依赖就被spark划分到同一个stage中,而对于宽依赖,只能等父RDD shuffle处理完成后,下一个stage才能开始接下来的计算。之所以称之为ShuffleMapTask是因为它需要将自己的计算结果通过shuffle到下一个stage中 
因此spark划分stage的整体思路是:从后往前推,遇到宽依赖就断开,划分为一个stage;遇到窄依赖就将这个RDD加入该stage中。因此在图2中RDD C,RDD D,RDD E,RDDF被构建在一个stage中,RDD A被构建在一个单独的Stage中,而RDD B和RDD G又被构建在同一个stage中。
  1. TaskSet
基于Stage可以直接映射为TaskSet,一个TaskSet封装了一次需要运算的、具有相同处理逻辑的Task,这些Task可以并行计算,粗粒度的调度是以TaskSet为单位的。
  1. Task
Task是在物理节点上运行的基本单位,Task包含两类:ShuffleMapTask和ResultTask,分别对应于Stage中ShuffleMapStage和ResultStage中的一个执行基本单元。ShuffleMapStage对应的就是Hadoop中的Map,ResultStage对应的就是Hadpoop中的Reduce。
一个Task就是一个RDD在每一个分区上执行的任务,一个RDD包含多个Task,Task的并发执行程度取决与Executor的数量*为每个Executor分配的核数。
至于分区的数目:
对于数据读入阶段,例如sc.textFile,输入文件被划分为多少InputSplit就会需要多少初始分区。
在ShuffleMapTask阶段分区数目保持不变。
在ResultStage阶段,RDD的聚合会触发shuffle操作,聚合后的RDD的分区数目跟具体操作有关,例如repartition操作会聚合成指定分区数,还有一些算子是可配置的
  1. 运行机制

    1. RDD调度机制(Spark运行原理)
  1. 首先我们通过maven或者sbt等,将我们的应用以及其依赖的jar包完整的打包,利用spark-submit命令将jar提交到spark;
  2. 提交程序后会Master会根据我们的配置命令来决定我们Driver端的所在。如果是我们选用Client则是我们提交程序的节点,如果是Cluster则是由我们的Master进行分配节点。
  3. 程序会在worker节点中获得executor用来执行我们的任务;
  4. 在spark程序中每次RDD的action变换会产生一个新的job,每个job包含多个task;
  5. 而RDD在进行转换的时候会时候会生成不同的stage,而stage则组成了我们的DAG。
  6. task会被送往各个executor运行;
  7. 而最终的计算结果会回到driver节点进行汇总并输出(如reduceByKey)。

那些年我们玩过的Spark下的Standalone集群模型相关推荐

  1. spark (3)Spark Standalone集群安装介绍

    (1)初学者对于spark的几个疑问 http://aperise.iteye.com/blog/2302481 (2)spark开发环境搭建 http://aperise.iteye.com/blo ...

  2. Java连接Spark Standalone集群

    软件环境: spark-1.6.3-bin-hadoop2.6.hadoop-2.6.4.jdk1.7.0_67.IDEA14.1.5 : Hadoop集群采用伪分布式安装,运行过程中只启动HDFS: ...

  3. 向spark standalone集群提交任务

    向spark standalone集群提交任务 文档链接 #切换到spark安装目录,执行下面一条命令,192.168.0.10是master的ip, examples/src/main/python ...

  4. Spark自带的集群模式(Standalone),Spark/Spark-ha集群搭建

    1.Spark自带的集群模式 对于Spark自带的集群模式,Spark要先启动一个老大(Master),然后老大Master和各个小弟(Worker)进行通信,其中真正干活的是Worker下的Exec ...

  5. 在local模式下的spark程序打包到集群上运行

    一.前期准备 前期的环境准备,在Linux系统下要有Hadoop系统,spark伪分布式或者分布式,具体的教程可以查阅我的这两篇博客: Hadoop2.0伪分布式平台环境搭建 Spark2.4.0伪分 ...

  6. 本地提交spark_Spark在Windows下运行,本地提交spark到远程yarn集群

    [问题]Spark在windows能跑集群模式吗? 我认为是可以的,但是需要详细了解cmd命令行的写法.目前win下跑spark的单机模式是没有问题的. [关键点]spark启动机制容易被window ...

  7. 搭建Spark Standalone集群

    文章目录 零.学习目标 一.Spark Standalone架构 (一)client提交方式 (二)cluster提交方式 二.Spark集群拓扑 (一)集群角色分配 二.搭建三节点集群 (一)在私有 ...

  8. standalone集群模式

    集群角色介绍 Spark是基于内存计算的大数据并行计算框架,实际中运行计算任务肯定是使用集群模式,那么我们先来学习Spark自带的standalone集群模式了解一下它的架构及运行机制. Standa ...

  9. 04_Flink-HA高可用、Standalone集群模式、Flink-Standalone集群重要参数详解、集群节点重启及扩容、启动组件、Flink on Yarn、启动命令等

    1.4.Flink集群安装部署standalone+yarn 1.4.1.Standalone集群模式 1.4.2.Flink-Standalone集群重要参数详解 1.4.3.集群节点重启及扩容 1 ...

最新文章

  1. java停车管理系统中期检查_java毕业设计_springboot框架的停车场收费管理系统
  2. 为什么matplotlib显示opencv图像不正常
  3. c# 微服务学习_微服务:学习几个容易混淆的URL注解
  4. java 数组正则表达式_java正则表达式实现提取需要的字符并放入数组【ArrayList数组去重复功能】...
  5. linux 权限管理命令
  6. golang语言渐入佳境[29]-math包核心方法
  7. SqlBulkCopy批量插入数据
  8. 修改后的RSA 加密解密 可用于制作liscence
  9. mysql字符串拼接有空值_MySQL字符串拼接
  10. WDM驱动inf模板
  11. 东北大学《铸造工艺学》结课报告
  12. 基于GEE使用Landsat 8和Landsat 5影像进行分类
  13. java-net-php-python-23jspm在线学习设计计算机毕业设计程序
  14. 计算机组成与原理第三章答,计算机组成与原理第三章答案.doc
  15. uni-app 二维码生成器分享
  16. Anmle,Factors,andMultiFactorModels
  17. android自定义url协议,Android平台设置UrlSchemes,实现被第三方应用调用
  18. [USACO06NOV]玉米田Corn Fields
  19. python正则匹配任意字符_Python 正则表达式 匹配任意字符的写法
  20. linux里的chdir()

热门文章

  1. 完全解读:用最小二乘法求模型参数
  2. rtl8723bs linux网卡驱动识别问题,无法使用无线的解决方法
  3. Unity新手入门与进阶学习书籍与教程推荐
  4. 2015阿里看雪移动安全挑战赛-第二题
  5. 归并排序---天下大事,合久必分,分久必合
  6. DSGN: Deep Stereo Geometry Network for 3D Object Detection---基于双目视觉的3D目标检测(1)
  7. CPU资源消耗原因和解决方案:
  8. C语言计算出结构体所占空间大小
  9. 如何高效阅读技术论文
  10. 自制最小的linux系统下载, 自制小型Linux系统