Spark架构,运行原理,任务调度和资源调度分析,内存管理分析,SparkSQL,SparkSreaming与kafaka,数据倾斜的解决,调优。
Spark简介
Spark是美国加州大学伯克利分校的AMP实验室(主要创始人lester和Matei)开发的通用的大数据处理框架。
Apache Spark™是用于大规模数据处理的快速通用引擎。
Apache Spark是一个开源集群计算系统,旨在使数据分析快速,快速运行和快速写入
Spark应用程序可以使用R语言,Java,Scala和Python进行编写,极少使用R语言编写的Spark程序,Java和Scala语言编写的Spark程序的执行效率是相同的,但Java语言写的代码量多,Scala简洁优雅,但清晰性不如Java,Python语言编写的Spark程序的执行效率不如Java和Scala。
Spark有4中运行模式:
- local模式,适用于测试
- 独立的,并非是单例程,还是使用spark自带的资源调度框架
- 纱,流行的方式,使用纱线分配调度资源
- mesos,国外使用的多
Spark比MapReduce快的原因
- Spark基于内存的迭代,而MapReduce基于磁盘的
MapReduce的设计:中间结果保存到文件,可以提高可靠性,减少内存分配,但是牺牲了性能。Spark
的设计:数据在内存中进行交换,要快一些,但是内存这个东西,可靠性比不过MapReduce。 DAG计算模型在迭代计算上还是比MR的更有效率。
在图论中,如果一个有向图无法从某个顶点出发经过若干条边回到该点,则这个图是一个有向无环图(DAG)DAG计算模型在星火任务调度中详解!
星火计算比MapReduce的快的根本原因在于DAG计算模型。一般而言,DAG相比MapReduce的在大多数情况下可以减少洗牌次数.Spark的DAGScheduler相当于一个改进版的MapReduce,如果计算不涉及与其他子系统进行数据交换,Spark可以在内存中一次性完成这些操作,也就是中间结果无须落盘,减少了磁盘IO的操作。但是,如果计算过程中涉及数据交换,Spark也是会把shuffle的数据写磁盘的!有一个错误区,Spark是基于内存的计算,所以快,这不是一直,要对数据做计算,必然得加载到内存,Hadoop也不会,只不过Spark支持将需要反复用到的数据给Cache到内存中,减少数据加载耗时,所以Spark跑机器学习算法比较在行(需要对数据进行反复重复)。Spark基于磁盘的计算也是比Hadoop快。刚刚提到了Spark的DAGScheduler是个改进版的MapReduce,所以Spark天 适合做批处理的任务.Hadoop的MapReduce的虽然不如火花性能好,但是HDFS仍然是业界的大数据存储标准。- Spark是粗粒度的资源调度,而MR是细粒度的资源调度。
粗细粒度的资源调度,在Spark资源调度中详解!
RDD(弹性分布式数据集)-弹性分布式数据集
分区列表
用于计算每个分区的函数
依赖于其他RDD的列表
可选地,用于键值RDD的分区器
可选地,用于计算每个拆分的位置的列表
Spark任务执行流程
写一个Spark应用程序的流程
1.加载数据集(获得RDD)
可以从HDFS,NoSQL数据库中加载数据集
2.使用转换算子对RDD进行操作
变换子是一系列懒执行的函数
3.使用动作算子触发执行
Transformations算子对RDD的操作会被先记录,当动作算子触发后才会真正执行
伪代码示例:
|
|