Spark简介

Spark简介

简介

概览

  • Apache Spark是一个用于大规模数据处理的快速通用计算引擎
  • 特点:
  1. 快速:基于内存的MapReduce计算比Hadoop快100倍
  2. 易用:支持Scala、Java、Python和R语言开发
  3. 功能强:SparkSQL、SparkStreaming、SparkGraphX、SparkMLlib
  4. 通用:适用于多种不同的集群管理框架(Hadoop YARN、EC2);适用于多种不同的数据存储方式(HDFS、Hbase、MongoDB、Cassendra)

功能

  • Spark SQL:专门用于处理结构化数据
  • Spark Streaming:实时对大量数据进行快速处理,处理周期短
  • Spark GraphX:以图为基础数据结构的算法实现和相关应用
  • Spark MLlib:为解决机器学习开发的库,包括分类、回归、聚类和协同过滤等

集群管理框架

  • Standalone mode:原生集群管理功能,有任务调度、资源分配等
  • Hadoop Yarn:Hadoop MapReduce的第二个版本架构,把资源管理和任务管理剥离开;实现了静态资源分配和动态资源分配功能
  • Apache Mesos:从分布式计算节点上抽象CPU,内存,硬盘和其他计算资源给其他框架使用,实现了静态资源分配功能
  • EC2:Amazon EC2云平台,提供一个安装了Spark、Shark和HDFS的集群,可直接登录到集群,把它当作你实验室的集群使用

存储方式

  • HDFS:Hadoop分布式文件系统
  • Hbase:基于HDFS的非关系型数据库(NoSQL数据库)
  • MongoDB:基于分布式存储的数据库,介于关系型和非关系型数据库之间;是NoSQL数据库中最像关系型数据库的一个;功能非常强大:支持多种开发语言、支持完全索引、支持查询等
  • Cassendra:基于列的分布式数据库,易扩展、模式灵活、按照范围查询等

Spark生态系统

在这里插入图片描述

Spark原理

相关名词

  • Driver程序:Spark应用的入口程序,在集群模式下用户开发的Spark程序称为Driver
  • SparkContext对象
  1. 使得应用程序能够和集群进行沟通,实现CPU、内存等资源的分配
  2. 每个Driver程序都有一个SC对象,如果是交互式编程,则Spark Shell会自动创建一个SC对象
  3. 程序启动后,SC会告诉集群管理器在Worker Node上创建执行器,执行器是每一个Spark程序在计算节点上专属的进程
  4. 程序代码会发送到对应的Worker Node上
  5. SC分发任务(Task)到各个执行器
  • Application:独立的Spark程序
  • Master(Cluster Manager),Worker
  • 执行器(Executor):Spark程序在对应计算节点上启动的专属线程,负责执行Task
  • Job:一次RDD Action称为一个Job,是一个概念
  • Stage:介于Job和Task之间,是一个Task集合
  • Task:在执行器上执行的最小单元,例如在某个计算节点对一个RDD的分区进行的Transformation操作

具体执行过程

  • 分为两部分:
  1. Driver程序,客户端模式下,Driver在本地,不会把Driver提交给Master,而直接提交任务;集群模式下,首先Driver被提交给Master,Master首先找一个Worker运行Driver
  2. 集群节点

RDD(Resilient Distributed Dataset 弹性分布式数据集)

  • RDD是Spark的核心数据结构,RDD是一个数据集,就像Array、List和Set等一样的数据结构,内容是平铺的,可以顺序遍历,像Array和List一样
特征
  1. RDD是分布式存储的,支持并行计算
  2. RDD的分布是弹性的,某些操作使不同的数据块重新汇聚和分布
  3. RDD是只读的
  4. RDD可以缓存在内存中
  5. RDD可以通过重复计算获得(实现高可靠性)
属性
  • 分区列表,依赖列表,计算函数compute
来源
  • 从外部数据读入并初始化为RDD;可以从文件读入或从Hadoop读入
  • 从Driver数据集生成RDD,利用SparkContext的parallelized函数
  • 对RDD的一些操作后产生新的RDD
操作
  • Transformation:接收一个RDD作为输入,返回一个新的RDD,但是并不会真实执行计算,只是定义生成的新RDD并且设置其与前一个RDD的依赖关系,RDD依赖关系可以分为窄依赖和宽依赖,前者只依赖前一个RDD的确定的几个分区,后者依赖前一个RDD的所有分区
  • Action:输入还是RDD,但是输出就不是RDD了,调用了Action之后,整个从输入RDD到输出值的Transformation链条会被执行
DAG Schedule
  • 把一个Spark Job转换成Stage的DAG
  • 根据RDD和Stage之间的关系找出开销最小的调度方法,然后把Stage以TaskSet的形式提交给TaskScheduler
  • 一次Action的所有工作就是一个Job,一个Stage包括一个或多个Transformation,一个Transformation在一个RDD分区上执行是一个Task
  • 如何划分Stage?以宽依赖为分界,宽依赖之前的所有Transformation,为一个Stage,即根据数据是否需要重组划分
TaskScheduler
  • DAG Scheduler最后一步:计算Task最佳执行位置;为每一个RDD分区创建Task;将一个Stage的Task封装成TaskSet交给TaskScheduler
  • TaskScheduler为每个Stage的TaskSet创建一个TaskSetManager,负责跟踪task set中所有task,包括失败重启等

#期末复习/云计算

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值