spark 总结(比较详细)

参考 http://www.cnblogs.com/tsxylhs/p/7427874.html
https://www.cnblogs.com/qingyunzong/p/8886338.html

基本术语

  • master
    资源管理器的主节点
  • cluster Manager
    在集群上获取资源的外部服务
  • workerNode
    资源管理器的从节点或者说管理本机资源的进程
  • Application
    基于spark的用户程序,包含driver程序和运行在集群上的executorc程序
  • Driver Program
    运行Application 的main()函数并且创建sparkcontext
    用来连接worker的程序
  • Executor
    是在一个worker进程管理节点上为某application 启动的一个进程,该进程负责运行任务,并负责将数据存在内存或磁盘上,每个应用拥有各自独立的executors
  • job
    用户提交任务spark程序到driver端,程序根据spark的算子操作,将代码分为多个job,job串行执行
  • stage
    一个job,提交至DAGScheduler,回执DAG图,根据RDD的依赖关系。可以分为宽依赖和窄依赖,根据宽依赖将DAG图分为多个stage。一般宽依赖涉及shuffle操作,所有可以认为shuffle是stage的一个分割依据。
  • task
    被送到executor上的工作单元
    stage 根据数据集的分区可以分为多个task,task可以并行执行,所以stage 又称为task set
  • 宽依赖
    一个父RDD会对应多个RDD

特点

  • Spark 特点
    高效性
    运行速度提高100倍。
    Apache Spark使用最先进的DAG调度程序,查询优化程序和物理执行引擎,实现批量和流式数据的高性能。
    易用性
    Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。
    通用性
    Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本
    兼容性
    Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具
  • 架构
    Spark的体系结构不同于Hadoop的mapreduce 和HDFS ,Spark主要包括spark core和在spark core的基础上建立的应用框架sparkSql spark Streaming MLlib GraphX; Core库主要包括上下文(spark Context)抽象的数据集(RDD),调度器(Scheduler),洗牌(shuffle) 和序列化器(Seralizer)等。Spark系统中的计算,IO,调度和shuffle等系统的基本功能都在其中在Core库之上就根据业务需求分为用于交互式查询的SQL、实时流处理Streaming、机器学习Mllib和图计算GraphX四大框架hdfs迄今是不可替代的
    在这里插入图片描述
    在这里插入图片描述
  • spark组成
    Spark组成(BDAS):全称伯克利数据分析栈,通过大规模集成算法、机器、人之间展现大数据应用的一个平台。也是处理大数据、云计算、通信的技术解决方案。

它的主要组件有:

SparkCore:将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。
SparkSQL:Spark Sql 是Spark来操作结构化数据的程序包,可以让我使用SQL语句的方式来查询数据,Spark支持 多种数据源,包含Hive表,parquest以及JSON等内容。
SparkStreaming: 是Spark提供的实时数据进行流式计算的组件。
MLlib:提供常用机器学习算法的实现库。
GraphX:提供一个分布式图计算框架,能高效进行图计算。
BlinkDB:用于在海量数据上进行交互式SQL的近似查询引擎。
Tachyon:以内存为中心高容错的的分布式文件系统。

  • client、Master、和worker之间的通信
    在standal模式下,存在三个角色
    client提交作业
    master 负责接收作业并启动driver管理worker和executor
    worker周期性的通过beat heart向master发送状态信息。当master向他传来启动executor命令的时候,他就启动executor命令

Spark运行原理

1、通过ActorSystem创建MasterActor,启动定时器,定时检查与接收Worker节点的发送消息

2、Worker节点主动向Master发送注册消息

3、Master接收Worker的注册请求,然后将注册信息保存起来,并向Worker返回一个注册成功的消息

4、Worker接收到Master注册成功的消息后,启用定时器,定时向master发送心跳报活,Master接收到Worker发送来的心跳消息后,更新Worker上一次的心跳时间

5、DAGScheduler根据FinalRDD递归向上解析Lineager的依赖关系,并以宽依赖为切分一个新stage的依据,并将多个task任务封装到TaskSet,其中Task的数量由其父RDD的切片数量决定,最后使用递归优先提交父Stage(TaskSet)

6、先创建TaskScheduler即TaskSchedulerImpl接着又创建SparkDeploySchedulerBackend对资源参数创建AppClient与Master注册Application,并替每个TaskSet创建TaskManager负责监控此TaskSet中任务的执行情况

7、Master接收到ClientActor的任务描述之后,将任务描述信息保存起来,然后ClientActor返回消息,告知ClientActor任务注册成功,接下来Master(打散|负载均衡|尽量集中)进行资源调度

8、Master跟Worker通信,然后让Worker启动Executor

9、Executor向Driver发送注册消息,Driver接收到Executor注册消息后,响应注册成功的消息

10、Executor接收到Driver注册成功的消息后,本进程中创建Executor的引用对象

11、Driver中TaskSchedulerImp向Executor发送LaunchTask消息,Executor将创建一个线程池作为所提交的Task任务的容器

12、Task接收到launchTask消息后,准备运行文件初始化与反序列化,就绪后,调用Task的run方法,其中每个Task所执行的函数是应用在RDD中的一个独立分区上

13、Task运行完成,向TaskManager汇报情况,并且释放线程资源

14、所有Task运行结束之后,Executor向Worker注销自身,释放资源。

RDD特点

  1. 是在集群节点上的不可变,已分区的集合对象
  2. 通过并行转换的方式来创建(map filter join)
  3. 失败自动创建
  4. 可以控制存储级别进行重yong
  5. 必须是可序列化的
  6. 静态类型

Spark支持的3🀄️集群管理器

  • standalone 模式:资源管理器是master节点,调度策略相对单一,只支持先进先出模式
  • Yarn:资源管理器是yarn集群,主要用来管理资源。YARN支持动态资源的管理,还可以调度其他实现了yarn调度接口的集群计算,非常适用于多个集群同时部署的情况,是目前最流行的一种资源管理系统。
  • Mesos:MEsos是专门用于分布式资管管理的开源系统用C++开发,对集群中的资源做弹性管理

为什么用yarn来部署spark

yarn支持动态分配资源。stanalone 模式只支持简单的固定资源匹配策略,每个任务固定数量的core,各job按顺序依此分配资源。资源不够的时候就排队。这种模式比较适合单用户情况,多用户情况可能得不到资源。

检查点的意义

将某个时机的中间数据写到存储中。

容错机制

  • 数据检查点
  • 记录更新

persist和cache 的异同

参考spark persist cache()以及StorageLevel

Spark提供的两种共享变量

1.广播变量,只一个只读对象,在所以节点上都有一份缓存,创建方法是SParkcontext.broadcast()
2. 计数器,只能增加。

transformation 和action 是什么?区别

RDD支持两种操作。

  1. 转换 transformation 即从现有的数据集创建一个新的数据集
  2. 动作 action 在数据集上进行计算后,返回一个值给driver 程序
    RDD的转换操作会返回一个新的rdd 比如map 和filter 而action则是向驱动器程序返回结果或把结果写入外部系统的操作,会触发实际的计算,比如count 和first。
    Transformation 是惰性的,也就是说不会直接计算结果。相反得分他们只是记住啦这些应用基础数据集上的转换动作。只有当发生一个要求返回结果给driver的action时 这些transformation才真正运行。

spark 端口

  • 8088 yarn的web UI的端口号
  • 8080 master UI的端口号
  • 4040 application 的web UI 的端口号
  • 18080 historyServer的web UI 的端口号
  • 9092 Kafka broker的端口
  • 60010 Hbase 的 web UI的端口
  • 7007 spark基于standalone 的提交任务的端口
  • 6379 red is 的端口号

spark调度模式 FIFO FAIR

  • FIFO(默认),谁先提交谁先执行,后面的任务需要等待前面的任务
  • FAIR(公平调度)支持在调度池中为任务进行分组,不同的调度池权重不同,任务可以按照权重来决定执行顺序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值