Spark初识
一、Spark 是什么
![](https://img2020.cnblogs.com/blog/1534499/202112/1534499-20211220141941443-1290525107.png)
Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。用来构建大型的、低延迟的数据分析应用程序。它扩展了广泛使用的 MapReduce 计算模型。高效的支撑更多计算模式,包括交互式查询和流处理。spark 的一个主要特点是能够在内存中进行计算,即使依赖磁盘进行复杂的运算,Spark依然比MapReduce更加高效。
二、Spark 和 Hadoop 功能对比
Hadoop
- Hadoop 是由 java 语音编写,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架;
- 作为 Hadoop 分布式文件系统,HDFS 处于 Hadoop 生态圈的最下层,存储所有的数据,支持着 Hadoop 的所有服务,它的理论基础源于 Google 的 TheGoogleFileSystem 这篇论文,它是 GFS 的开源实现;
- MapReduce 是一种编程模型,Hadoop 根据 Google 的 MapReduce 论文将其实现,作为 Hadoop 的分布式计算模型,是 Hadoop 的核心,基于这个框架,分布式并行程序和编写变得异常简单,综合了 HDFS 的分布式 存储和 Map Reduce 的分布式计算,Hadoop 在处理海量数据时,性能横向扩展变得非常容易;
- HBase 是对 Google 的 Big table的开源实现,但有和 Big table 存在许多不同之处,HBase 是一个基于 HDFS 的分布式数据库,擅长实时的随机读写超大规模数据集,他也是 Hadoop 非常重要的组件;
Spark
- Spark 是一种由Scala 语言开发的快速、通用、可扩展的大数据分析引擎;
- Spark Core 中提供了 Spark 最基础与最核心的功能;
- Spark SQL 是 Spark 用来操作结构化数据的组件,通过 Spark SQL,用户可以使用 SQL 或者 Apache Hive 版本的 SQL 方言(HQL)来查询数据;
- Spark Streaming 是 Spark 平台针对实时数据进行流式计算的组件,提供了丰富的处理数据流的 API;
- Spark 同时还具有机器学习和图计算等算法程序库
总结 Spark 和 Hadoop 的根本差异是多个作业之间的数据通信问题:Spark 多个作业之间数据通信是基于内存,Hadoop 是基于磁盘
三、Spark 特点
1、易于理解
Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以根据自身情况快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。
2、高效性
Spark 相比 Hadoop 的 MR 运行速度提高100倍。Apache Spark使用很先进的DAG(有向无环图)调度程序,查询优化程序和物理执行引擎,实现批量和流式数据的高性能。
3、可伸缩
Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具。
4、通用性
Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。
四、Spark 组成
- Spark Core :提供了Spark 最基础与最核心的功能,包括任务调度、内存管理、错误恢复、与存储系统交互、RDD(resilient Distributed dataset) 弹性分布式数据定义等模块,RDD 表示分布式在多个节点上可以并行操作的元素集合,是 Spark 主要的编程抽象,Spark 提供了操作和创建这些集合的多个 API;Spark 其它的功能如:Spark SQL、Spark Streaming、GrapX\MLib 都是在 Spark Core 的基础上进行扩展的;
- Spark SQL:是 Spark 用来操作结构化数据的组件,通过 Spark SQL用户可以使用 SQL 或者 HQL 来查询数据;
- Spark Streaming:是 Spark 提供的一对实时数据进行流式计算的组件;流失数据:生产环境服务器的日志或网络服务器用户用户状态变更组成的消息队列,
- MLib 机器学习的程序库,提供了包括:分类,回归,据类,协同过滤等,还提供了模型评估,数据导入等额外的支撑功能;
- Spark GraphX 是 Spark 面向图形计算提供的框架和算法库;
Spark 应用场景:批处理,迭代算法,交互式查询,流处理
关于 Spark 存储的说明:Spark 可以读取 HDFS 上的数据,也可以读取支持 Hadoop 接口系统的数据 ,hive HBase 等;但是 Hadoop 并非 Spark 的必要条件,