嗨喽,最近小伙伴们快要期末考试了吧,下面是我对《Spark零基础实战》的总结,希望能帮助到你们。
一、Spark简介Spark,拥有hadoop MR所具有的优点,但不同于MR的是job中监测结果可以保存在内存中,从而不再需要读写HDFS,因此spark能够更好的适用于数据挖掘与机器学习等需要迭代的m r的算法。
1.Spark,使用scala语言实现,这是一种面向对象函数式编程语言,能够像操作本地集合对象一样轻松的操作分布式数据集
Spark,适用于多种分布式平台,如批处理,迭代算法,交互式查询流处理等
Spark,提供了丰富的接口,除了基于scala python Java和SQL等API外还内建了丰富的程序库
Spark,可以运行在hadoop集群中使用多种数据源
2.Spark 特点
①运行速度快,易用性好,通用性强和随处运行等特点
运行速度快:Spark,拥有DAG执行引擎,支持在内存中对数据进行迭代计算,通过DAG调度程序查询优化器和物理执行引擎,实现了批处理和流数据处理的高性能
易用性好:支持scala JAVA python等语言进行编写,还支持Sql查询
通用性强:Spark生态圈包含了丰富的组件,提供一站式解决平台
随处可运行:Spark具有很强的适应性,能够使用多种资源管理器来调度job
②什么是DAG?
DAG中文译名,有向无环图,DAG Scheduler 会根据RDD的transformation动作,将DAG分为不同的stage,每个stage中分为多个task,这些task可以并行运行。
Spark DAG解决了什么问题?
Spark引入DAG在内存中进行计算,并可以优化计算,比如减少shuffle数据的过程
3.Spark的计算模型
Spark的基本计算单元是RDD[弹性分布式数据集,是spark中最基本的数据抽象,它代表一个不可变(只读),可分区里面的元素可并行计算的集合]
RDD具有数据流模型的特点,自动容错,感知性调度和可伸缩性。
①弹性
存储的弹性,RDD数据可以在内存和磁盘之间进行自由切换
可靠性的弹性,RDD在丢失数据时能够自动恢复RDD在计算过程中会出现失败的情况,以后会进行一定次数的重试(四次)
并行度的弹性,RDD数据分区可以改变,进而增加并行计算的力度
②分布式,RDD的数据是分布式存储的,也就是说spark集群每个节点上只存储了RDD的部分数据
③数据集,是一个数据集(RDD是一个数据容器,跟array和list相似)
4.Rdd之间有两种不同类型的依赖关系,窄依赖和宽依赖
5.Spark与MR区别
spark个借鉴了MR的基础上发展而来,继承了MR分布式并行计算的优点,并改进了MR明显的缺陷
1)Spark把中间数据放到内存中,迭代运算效率高
2)Spark容错性高
3)Spark更加通用(Hadooo只提供了map和reduce两种操作,spark提供的数据集操作类型很多,分为transformations和actions,两大类。)
6.Spark streaming是spark提供的,对实时数据进行流式计算的组件
Spark submit/Spark Shell 批处理
Spark SQL 查询
7.Spark Core是spark框架最核心的部分.实现了spark的基本功能包括,任务调度,内存管理,错误恢复与存储系统交互模块
8.Rdd执行过程
Stage:作业调度的基本单位
1)Rdd读入外部数据源进行创建。
2)Rdd经过一系列的转换(transformation)操作,每次都会产生不同的rdd,供给下一个转换操作使用。
3)最后一个rdd,经过动作操作进行转换并输出到外部数据源
这一系列处理被称为lineage(血缘关系),即DAG拓扑排序的结果
9.RDD优点
惰性调用,管道化,避免同步等待,不需要保存中间结果,每次操作变得简单
10.RDD特性
1)高效的容错性
现有的容错机制,数据复制或者记录日志
Rdd:血缘关系,重新计算丢失分区,无需回滚系统,重算过程。在不同节点之间并行,只记录粒度的操作
2)中间结果持久化内存数据在内存中的多个rdd操作之间进行传递,避免了不必要的读写磁盘开销
3)存放的数据可以是JAVA对象,避免了不必要的对象序列化和反序列化
11.Rdd之间的依赖关系:
阶段的划分的依据-窄依赖和宽依赖
1)窄依赖表现为一个父的分区对应于一个子RDD的分区,或多个父RDD的分区对应于一个子RDD的分区。(一对一,或者,多对一)
2)宽依赖者表现为存在一个父Rdd的一个分区,对应一个子Rdd的多个分区(一对多)
宽依赖无法优化
//重点
窄依赖的函数map filter union mapPartitions
宽依赖的函数groupByKey, partitionBy
12.RDD计算过程
1) 创建RDD对象
2)SparkContext负责计算rdd之间的依赖关系,构建dag .
3)DAGScheduler负责把dag图分解成多个stage,每个stage包含了多个task,每个task会被TaskScheduler分发给WorkNode上的executor.
13.Spark运行模式
一、单机模式:
本地模式:spark单机运行,一般用开发测试
二、伪分布式模式
Standalone模式:构建一个由master+slave构成的spark集群,spark运行在集群中
//master,client和worker节点
//如果是用spark-shell交互式工具提交job 在master上运行
//如果使用spark-submit提交 在本地client上运行
三、分布式模式
Spark on yarn模式:spark客户端直接连到yarn.不需要额外构建spark集群
Spark on mesos模式:spark客户端直接连接到mesos,不需要额外构建spark集群
⭐⭐
Spark On YARN模式的搭建比较简单,仅需要在YARN集群的一个节点上安装Spark即可,该节点可作为提交Spark应用程序到YARN集群的客户端。
Spark本身的Master节点和Worker节点不需要启动。
Spark on yarn模式有client和cluster两种模式,主要区别在于:
Driver程序的运行节点不同。
client:Driver程序运行在客户端,适用于交互、调试,希望立即看到运行的输出结果。
Cluster:Driver程序运行在由RM(ResourceManager)启动的AM(AplicationMaster) 上, 适用于生产环境。
14.Spark on yarn 运行原理以及搭建过程
YARN-Cluster(yarn-Standalone)和YARN-Client模式的区别本质上就是application master进程的区别
Yarn- cluster模式下,driver运行在application master中,他负责向yarn申请资源并监督作业的运行情况,当用户提交了作业之后,就可以关掉client.作业会继续在yarn上运行,因而yarn-cluster模式不适合运行交互类型的作业。
Yarn-client模式下,application master仅仅向yarn请求executor ,client会和请求的container通信来调度他们工作,也就是说client不能离开
二、Scala语言1.Scala简介
1)Scala运行JAVA虚拟机JVM之上,并且兼容现有的JAVA程序
2)scala是纯粹的面向对象的语言
3)scala也是一门函数式语言
4)