一、概述
Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。
Spark Core提供了Spark最基础与最核心的功能
Spark SQL是Spark用来操作结构化数据的组件。
Spark Streaming是Spark平台上针对实时数据进行流式计算的组件,提供了丰富的处理数据流的API。
二、Spark与Hadoop的对比
MapReduce | Spark | |
数据存储机构 | 磁盘HDFS文件系统 | 使用内存构建弹性分布式数据集。RDD对数据进行运算和缓存 |
编程范式 | Map+Reduce | DAG(有向无环图) |
中间结果存储 | 中间结果落地磁盘,IO及序列化反序列化 | 代价比较大 |
运行方式 | Task以进程方式维护,任务启动慢 | Task以程方式维护,任务启动快 |
1.从组成上来看
Hadoop
Java编写,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架。
HDFS作为Hadoop分布式文件系统,存储所有数据,支持Hadoop的所有服务。
MapReduce是一种编程模型,作为Hadoop的分布式计算模型。
Hbase是Bigtable的开源实现,是基于HDFS的分布式数据库,擅长实时随机读/写超大规模数据集。
2.从框架上来看
MR和Spark都是数据处理框架。
3.从功能上来看
①数据存储内存
Spark更适合于迭代运算比较多的ML和DM运算。因为在Spark里面,有RDD的抽象概念。
②Spark比Hadoop更通用
Spark提供的数据集操作类型有很多种,而Hadoop只提供Map和Reduce两种操作;
Spark编程模型比Hadoop更灵活。对于各个处理节点之间的通信模型,用户可以命名,物化,控制中间结果的存储、分区等。而Hadoop是唯一的Data Shuffle一种模式。
But,由于RDD的特性,Spark不适用异步细粒度更新状态的应用;不适合增量修改;
③容错性
在分布式数据集计算时通过checkpoint来实现容错,而checkpoint有两种方式,一个checkpoint
data,一个是logging the updates。用户可以控制采用哪种方式来实现容错。
④可用性
Spark通过提供丰富的Scala, Java,Python API及交互式Shell来提高可用性。
Spark可以直接对HDFS进行数据的读写,同样支持Spark on YARN。Spark可以与MapReduce运行于同集群中,共享存储资源与计算,数据仓库Shark实现上借用Hive,几乎与Hive完全兼容。
三、Spark总体流程
1.整体架构
如下图所示。
①Spark Core
Spark生态系统以Spark Core为核心,基本功能有任务调度、内存管理、故障恢复以及和存储系统的交互。
核心思路:将数据集缓存在内存中加快读取速度,同时用RDD以较小的性能代价保证数据的鲁棒性。
RDD 基本操作:
- Transformation(转换) map,filter,groupBy,reduceBy
- Action(行动) count,collect,save
②Spark SQL
Spark SQL用于分布式结构化数据的SQL查询与分析,在编写程序中,可以直接使用SQL语句。
③Spark Streaming
Spark Streaming是用于处理流数据的分布式流处理框架,它将数据流以时间片为单位进行分割形成RDD,能够以较小的时间间隔对流数据进行处理,从严格意义上说是一个准实时处理系统。
④Mllib
Mllib是一个分布式机器学习库,在Spark平台上对一些常用的机器学习算法进行了分布式实现,包括:分类、回归、聚类、决策树等。
⑤GraphX
GraphX是一个分布式图处理框架,在Spark上实现了大规模图计算的功能,提供了对图计算和图挖掘的各种接口。
目标
生态系统实现了“One Stack to Rule Them All”(一个软件栈满足不同应用场景)目标,同时支持批处理、交互式查询和流数据查询。
紧密集成的优点:
- 如果Spark底层优化了,那么基于Spark底层的组件,也得到了相应的优化。
- 紧密集成,节省了各个组件组合使用时的部署,测试等时间。
- 当向Spark增加新的组件时,其它的组件,可以立刻享用新组件的功能。
- 无缝连接不同的处理模型。
2、运行模式
①本地模式Local Mode
将Spark应用程序中任务Task运行在一个本地JVM Process进程中,通常供开发测试或小数据集使用。
②集群模式Cluster Mode
将Spark运行应用在YARN集群或者框架自身集群Standalone,及Apache Mesos集群,启动多个JVM进程运行Task程序。
(http://spark.apache.org/docs/2.4.3)
③云服务Kubernetes模式
中小公司未来会更多的使用云服务。Spark2.3开始支持将Spark开发应用运行到K8s上。
四、小结
Spark的特点:
速度快
易用
通用性强
多种运行方式(兼容性)
Spark模块:
Spark Core
Spark SQL
Spark Streaming
Mllib
GraphX
Spark运行模式:
本地模式
集群模式
云服务