Spark简介

Spark是基于内存计算的大数据分布式计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性。
       在Spark中,通过RDD(Resilient Distributed Dataset,弹性分布式数据集)来进行计算,这些分布式集合,并行的分布在整个集群中。RDDs是Spark分发数据和计算的基础抽象类。

RDD属性:

  1. - A list of partitions
  2. - A function for computing each split
  3. - A list of dependencies on other RDDs
  4. - Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
  5. - Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)

Spark术语

Application:用户自定义的Spark程序,用户提交后,Spark为App分配资源将程序转换并执行。
       Driver Program:运行Application的main()函数并且创建SparkContext。
       SparkContext:是用户逻辑与Spark集群主要的交互接口,它会和Cluster Manager进行交互,负责计算资源的申请等。
       Cluster Manager:资源管理器,负责集群资源的管理和调度,支持的有:Standalone,Mesos和YARN。在standalone模式中即为Master主节点,控制整个集群,监控Worker。在YARN模式中为资源管理器。
       Worker Node:从节点,负责控制计算节点,启动Executor或Driver。在YARN模式中为NodeManager,负责计算节点的控制。
       Executor:执行器,是为某Application运行在worker node上的一个进程,该进程里面会通过线程池的方式负责运行任务,并负责将数据存在内存或者磁盘上。每个Application拥有独立的一组executors。
       RDD DAG:当RDD遇到Action算子,将之前的所有算子形成一个有向无环图(DAG)。再在Spark中转化为Job,提交到集群进行执行。一个App可以包含多个Job。
       Job:一个RDD Graph触发的作业,往往由Spark Action算子触发,在SparkContext中通过runJob()向Spark提交Job。
       Stage:每个Job会根据RDD的宽依赖关系被切分成很多Stage,每个Stage中包含一组相同的Task,这一组Task也叫TaskSet。
       Task:一个分区对应一个Task,Task执行RDD中对应Stage中所包含的算子。Task被封装好后放入Executor的线程池中执行。
       DAG Scheduler:根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler。
       TaskScheduler:将Task分发给Executor执行。
       SparkEnv:线程级别的上下文,存储运行时的重要组件的引用。

Spark架构


        
       Client提交Application,用户程序中会创建一个SparkContext,新创建的SparkContext会根据用户在编程的时候设置的参数,或者是系统默认的配置连接到Cluster Manager上。
       Cluster Manager找到一个Worker启动Driver,Driver向Cluster Manager或者资源管理器申请资源,之后将应用转化为RDD Graph,再由DAGScheduler将RDD Graph转化为Stage的有向无环图(taskset)提交给TaskScheduler,由TaskScheduler提交任务(Task)给Executor进行执行。
       Executor在接收到Task之后,会下载Task的运行时依赖的包和库,准备好Task运行环境所需要的信息之后,就会在线程池中执行task。task在运行的时候会把状态以及结果汇报给Driver。
       Driver会根据收到的Task的运行状态处理不同的状态更新,Task分为两种,一种是Shuffle Map Task,它实现数据的从新洗牌,在所有stage中,除最后一个之外,所有的stage都成为Shuffle阶段,结果会保存在Executor的本地文件系统中,另一种,也就是最后一个stage称为:result Task,它负责生成结果数据。
       Driver会不断的调用Task,将Task发送到Executor执行,在所有的Task都正确执行或者超过执行次数的限制仍然没有执行成功时停止。

注意:Spark程序是在注册时完成资源分配的。在Worker上启动Executor,分配多少core,这些内容都是在程序启动初始化的时候完成的,而不是在工作过程中完成的。程序向Master注册,Master分配资源后交给 CoarseGrainedSchedulerBackend下的子类:SparkDeploySchedulerBackend 管理。然后是Driver的DAG的划分,然后交给DAG Scheduler(Standalone模式下就是TaskSchedulerImpl),TaskSchedulerImpl通过SchedulerBackend获得资源,把具体的任务分配到具体的机器(Executor)上。

RDD机制实现模型Spark初识的更多相关文章

  1. 【Spark】RDD机制实现模型

    RDD渊源 弹性分布式数据集(RDD).它是MapReduce模型一种简单的扩展和延伸.RDD为了实现迭代.交互性和流查询等功能,须要保证RDD具备在并行计算阶段之间能够高效地数据共享的功能特性.RD ...

  2. Spark—初识spark

    Spark--初识spark 一.Spark背景 1)MapReduce局限性 <1>仅支持Map和Reduce两种操作,提供给用户的只有这两种操作 <2>处理效率低效 Map ...

  3. 【Spark-core学习之一】 Spark初识

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...

  4. RDD编程 下(Spark自学四)

    3.5 常见的转化操作和行动操作 3.5.1 基本RDD 1. 针对各个元素的转化操作 两个最常用的转化操作是map()和filter().转化操作map()接受一个函数,把这个函数用于RDD中的每个 ...

  5. RDD编程 上(Spark自学三)

    弹性分布式数据集(简称RDD)是Spark对数据的核心抽象.RDD其实就是分布式的元素集合.在Spark中,对数据的操作不外乎创建RDD.转化已有RDD以及调用RDD操作进行求值.而在这一切背后,Sp ...

  6. Spark RDD概念学习系列之Spark的算子的分类(十一)

    Spark的算子的分类 从大方向来说,Spark 算子大致可以分为以下两类: 1)Transformation 变换/转换算子:这种变换并不触发提交作业,完成作业中间过程处理. Transformat ...

  7. Spark RDD概念学习系列之Spark的数据存储(十二)

    Spark数据存储的核心是弹性分布式数据集(RDD). RDD可以被抽象地理解为一个大的数组(Array),但是这个数组是分布在集群上的. 逻辑上RDD的每个分区叫一个Partition. 在Spar ...

  8. Spark RDD概念学习系列之Spark Hash Shuffle内幕彻底解密(二十)

    本博文的主要内容: 1.Hash Shuffle彻底解密 2.Shuffle Pluggable解密 3.Sorted Shuffle解密 4.Shuffle性能优化 一:到底什么是Shuffle? ...

  9. Spark学习之路 (一)Spark初识

    目录 一.官网介绍 1.什么是Spark 二.Spark的四大特性 1.高效性 2.易用性 3.通用性 4.兼容性 三.Spark的组成 四.应用场景 正文 回到顶部 一.官网介绍 1.什么是Spar ...

随机推荐

  1. shiro安全框架

    原文:http://blog.csdn.net/boonya/article/details/8233303 可能大家早先会见过 J-security,这个是 Shiro 的前身.在 2009 年 3 ...

  2. maven使用.01.Hello World

    要说Java世界有什么东西是我最为留恋的:在写其他语言程序的时候,我最为想要的东西,那非maven莫属. 什么是Maven? Maven能做什么? Maven是一个针对Java的自动构建工具.所谓自动 ...

  3. 小学生玩ACM----广搜

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  4. Cocos2d-x中由sprite来驱动Box2D的body运动(用来制作平台游戏中多变的机关)

    好久都没写文章了,就来一篇吧.这种方法是在制作<胖鸟大冒险>时用到的.<胖鸟大冒险>中使用Box2D来进行物理模拟和碰撞检測,因此对每一个机关须要创建一个b2body.然后&l ...

  5. 小菜学习MVC4-WebApi

    今天想看下MVC4的东西,发现 居然有WebApi这东西,百度了一下..居然是 WCF中的东西,然后移植到了MVC4中,WCF你懂得返回数据都是xml,向网站这种请求 就比较纠结...而webapi可 ...

  6. web.xml里<filter-mapping>中的<dispatcher>作用

    2.4版本的servlet规范在部属描述符中新增加了一个<dispatcher>元素,这个元素有四个可能的值:即REQUEST,FORWARD,INCLUDE和ERROR,可以在一个< ...

  7. C#小常识集锦(一)--《更锋利的CSharp代码》读书笔记

    ❀.采用类似匈牙利命名法为控件命令,对于其他变量申明则不需要了 e.g. Button btnAdd; e.g. TextBox txtUsername; e.g. ListBox lstFileNa ...

  8. ShareSDK for iOS 2.9.0已经公布

    ShareSDK for iOS v2.9.0已经公布,本次更新内容包含: 1.修复Facebook获取用户信息报错问题 2.修复Instagram在iPad上显示分享菜单错误问题,须要指定菜单容器. ...

  9. Android 使用 Gmail 来发送邮件

    Android 使用 Gmail 来发送邮件 1. [代码]SendMail.java package org.apache.android.mail; import android.app.Acti ...

  10. 169 Majority Element [LeetCode Java实现]

    题目链接:majority-element /** * Given an array of size n, find the majority element. The majority elemen ...