1.spark的概念
spark是基于内存计算的通用大数据并行计算框架,是一个快速、通用可扩展的大数据分析引擎。它给出了大一统的软件开发栈,适用于不同场合的分布式场景,如批处理、迭代算法、交互式查询、流处理、机器学习和图计算。
2.Spark的生态系统
1.Spark Core
- 功能 :作为整个生态系统的核心引擎,提供基础分布式任务调度、内存管理、容错机制和 RPC 通信3 4。
- 核心抽象:弹性分布式数据集(RDD),支持并行操作和高效数据共享
2. Spark SQL
- 功能:处理结构化数据,支持 SQL 查询和 DataFrame API,可集成 Hive、Avro 等数据源。
3.Spark Streaming
- 功能 :实时处理流式数据,将数据按时间窗口切分为微批次(Micro-batch),复用批处理引擎实现低延迟计算4。
- 扩展性:可与 Kafka、Flume 等消息队列集成。
MLlib
- 功能:提供分布式机器学习算法库,包括分类、回归、聚类等,支持特征工程和模型评估。
4. GraphX
- 功能:专用于图计算,提供图并行操作(如 PageRank、连通分量分析)和与 RDD 的互操作性。
集群管理器
- 支持模式:Spark 可运行于 Standalone(内置)、YARN 或 Mesos 等集群管理系统,实现资源动态分配
3.spark 的特点
运行速度快
内存计算与 DAG(有向无环图)执行引擎优化任务调度,减少数据落地次数。
开发效率高
通过高阶函数(如 map
、reduce
)简化复杂逻辑,减少代码量。Hadoop 需编写多个 MapReduce 任务实现的功能,Spark 可能只需几行代码。
实时与离线处理融合
Spark Streaming 的微批处理(Micro-batch)模型实现准实时响应(延迟可低至数百毫秒)。
多语言支持
提供简洁的 Scala、Java、Python 和 R 接口,降低分布式编程复杂度。
内存大
通过将中间数据缓存到内存中,减少磁盘 I/O 开销,相比 Hadoop MapReduce 提速 10-100 倍,RDD(弹性分布式数据集)支持内存持久化与容错,适用于迭代式算法(如机器学习中的梯度下降)。
使用简单
Spark的易用性主要体现在两个方面。一方面,我们可以用较多的编程语言来写我们的应用程序,比如说Java,Scala,Python,R 和 SQL;另一方面,Spark 为我们提供了超过80个高阶操作,这使得我们十分容易地创建并行应用,除此之外,我们也可以使用Scala,Python,R和SQL shells,以实现对Spark的交互。
4.spark与hadoop的对比
- spark和hadoop都属于分布式并行机制,MapReduce应用程序是由多个独立的Task进程组成的,Spark应用程序的运行环境是由多个独立的Executor进程构建的临时资源池构成的。 但从单个节点上多个任务的运行模式来看,Hadoop MapReduce采用了多进程模型,而Spark采用了多线程模型
- 同节点上所有任务运行在一个进程中,有利于共享内存
- spark容错性高,它通过弹性分布式数据集RDD来实现高效容错,RDD是一组分布式的存储在节点内存中的只读性质的数据集,这些集合是弹性的,某一部分丢失或者出错,可以通过整个数据集的计算流程的血缘关系来实现重建.
5.Spark SQL
Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象结构叫做DataFrame的数据模型(即带有Schema信息的RDD),Spark SQL作为分布式SQL查询引擎,让用户可以通过SQL、DataFrames API和Datasets API三种方式实现对结构化数据的处理。
6.Spark SQL的功能
Spark SQL可从各种结构化数据源中读取数据,进行数据分析。
Spark SQL包含行业标准的JDBC和ODBC连接方式,因此它不局限于在Spark程序内使用SQL语句进行查询。
Spark SQL可以无缝地将SQL查询与Spark程序进行结合,它能够将结构化数据作为Spark中的分布式数据集(RDD)进行查询。
7.Spark SQL的架构
Spark SQL架构与Hive架构相比,把底层的MapReduce执行引擎更改为Spark,还修改了Catalyst优化器,Spark SQL快速的计算效率得益于Catalyst优化器。
8.RDD的概念
1.一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,不同节点上进行并行计算
2.RDD提供了一种高度受限的共享内存模型,RDD是只读的记录分区集合,不能直接修改,只能通过在转换的过程中改。
9.RDD的特点
1.高效的容错性
现有容错机制:数据复制或者记录日志RDD具有天生的容错性:血缘关系,重新计算丢失分区,无需回滚系统,重算过程在不同节点之间并行,只记录粗粒度的操作
2.中间结果持久化到内存,数据在内存中的多个RDD操作直接按进行传递,避免了不必要的读写磁盘开销
3.存放的数据可以是JAVA对象,避免了不必要的对象序列化和反序列化。
10.RDD的创建
var lines = sc.textFile("文件路径")//sc是SparkContent对象
lines.filter(x => x.contains("error")).count()//filter是transformation算子不触发计算,count是action算子,会触发计算
11.MapReduce
这个阶段的输出通过某种组合(shuffle)。shuffle后的结果再被分成小份分发到各个节点进行下一步的处理工作。第二步的处理阶段被称为reduce阶段,reduce的输出就是程序的最终执行结果。
MapReduce 程序由 Mapper 、Reducer 和 Driver 三部分构成:
- Mapper:处理输入数据,输出键值对 (key,value)(key,value)
- Shuffle & Sort :系统自动完成数据分发和排序(核心优化点)1 3
- Reducer:聚合 Mapper 输出,生成最终结果