概述
Spark是一个性能优异的集群计算框架,广泛应用于大数据领域。类似Hadoop,但对Hadoop做了优化,计算任务的中间结果可以存储在内存中,不需要每次都写入HDFS,更适用于需要迭代运算的算法场景中。
Spark专注于数据的处理分析,而数据的存储还是要借助于Hadoop分布式文件系统HDFS等来实现。
大数据问题场景包含以下三种:
- 复杂的批量数据处理
- 基于历史数据的交互式查询
- 基于实时数据流的数据处理
Spark技术栈基本可以解决以上三种场景问题。
架构
1 spark Core :spark的核心模块,是spark运行基础。以RDD为数据抽象,提供python、java、scala、R语言的api,可以通过RDD编程进行海量离线数据批处理计算。
2 Spark SQL:基于Spark Core,提供结构化数据处理功能。可以使用SQL语言对数据进行处理,可用于离线计算场景。同时基于Spark SQL提供了StructuredStreaming模块,可以使用时SQL进行流式计算。
3 sparkStreaming : 以Spark Core为基础,提供数据的流式计算功能
4 MLlib:以spark Core为基础,进行机器学习计算,内置大量机器学习库和API算法等。
5 Graphx:以spark Core为基础,进行图计算,提供大量图计算的API,方便以分布式资源进行图计算。
6 spark底层的文件存储还是基于hdfs分布式文件系统,支持多种部署方式。
spark 架构角色
从两个层面理解:
资源管理层面:(典型的Master-Worker架构)
管理者:即Master角色,只能有一个
工作者:即Worker角色,可以有多个。一个worker在一个分布式节点上,监测当前节点的资源状况,向master节点汇总。
任务执行层面:
某任务管理者:Driver角色,一个任务只能有一个
某任务执行者:Executor角色,可以有多个
在特殊场景下(local模式),Driver即是管理者又是执行者
下载
下载地址:
http://spark.apache.org/downloads.html
或者
https://archive.apache.org/dist/spark/
选择合适自己的版本下载。
Spark2.X预编译了Scala2.11(Spark2.4.2预编译Scala2.12)
Spark3.0+预编译了Scala2.12
该教程选择Spark3.2.1版本,其中预编译了Hadoop3.2和Scala2.13,对应的包是 spark-3.2.1-bin-hadoop3.2-scala2.13.tgz,但这里的预编译Hadoop不是指不需要再安装Hadoop