Spark笔记
关于 Spark
Spark
最初由美国加州伯克利大学的AMP实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。Spark
的主要特点是能够在内存中进行计算,并适用于各种各样原先需要使用不同的分布式平台的场景,包括批处理、迭代计算、交互式查询、流处理。通过在一个统一的框架下支持这些不同的计算,Spark
是我们可以简单而低耗地把各种处理流程整合在一起。
特点介绍:
- 运行速度快:
Spark
使用先进的DAG
(Directed Acyclic Graph,有向无环图) 执行引擎,以支持循环数据流和内存计算,相比于Hadoop
基于磁盘来进行MapReduce
运算要快上百倍; - 容易使用:
Spark
支持使用 Scala、Java、Python 语言进行编程,简洁的 API 设计有助于用户轻松构建并行程序,且可以通过Spark Shell
进行交互式编程; - 通用性:
Spark
提供了完整而强大的技术栈,包括 SQL 查询、流式计算、机器学习和图算法组件,这些组件可以无缝整合在同一个应用中,足以应对复杂的计算; - 运行模式多样:
Spark
可运行于独立的集群模式中,或者运行于Hadoop
中,也可运行于 Amazon EC2 等云环境中,并且可以访问 HDFS、HBase 以及 Hive 等多种数据源。
Spark vs Hadoop
- 表达能力更丰富:
Spark
的计算模式也属于MapReduce
,但不局限于Map
和Reduce
操作,还提供了多种数据集操作类型,编程模型比MapReduce
更灵活; - 运算效率更优:
Spark
提供了内存计算,中间结果直接放到内存中,但Hadoop
每次在执行MapReduce
操作时都需要从磁盘读取数据,并在计算完成后又再次将中间结果写入到磁盘中,导致 IO 开销更大,延迟较高; - 先进的任务调度机制:
Spark
时基于DAG
的任务调度执行机制,要优于MapReduce
的迭代执行机制。 - 实际开发更方便:在实际进行开发时,使用
Hadoop
需要编写不少相对底层的代码,不够高效。相对而言,Spark
提供了多种高层次、简洁的API
。更重要的是,Spark
提供了交互式编程环境,可以方便地验证、调整算法。
尽管 Spark 相对于 Hadoop 而言具有较大优势,但 Spark 并不能完全替代 Hadoop,主要用于替代 Hadoop 中的 MapReduce 计算模型。实际上,Spark 已经很好地融入了Hadoop生态圈,并成为其中的重要一员,它可以借助于 YARN 实现资源调度管理,借助于 HDFS 实现分布式存储。此外,Hadoop 可以使用廉价的、异构的机器来做分布式存储与计算,但是,Spark 对硬件的要求稍高一些,对内存与 CPU 有一定的要求。
Spark 生态系统
在实际的应用中,大数据处理主要包括以下三种类型:
- 复杂的批量数据处理:时间跨度通常在数十分钟到数小时之间;
- 基于历史数据的交互式查询:时间跨度通常在数十秒到数分钟之间;
- 基于实时数据流的数据处理:时间跨度通常在数百毫秒到数秒之间。
相比于其它框架在功能上的单一性, Spark
能同时支持批处理、交互式查询和流数据处理。其生态系统主要包含的核心组件有 Spark core
、Spark SQL
、Spark Streaming
、 MLlib
和 GraphX
等,各个组件的具体功能如下:
**Spark core**
:包含 Spark 的基本功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等。Spark 建立在统一的抽象 RDD 之上,使其可以以基本一致的方式应对不同的大数据处理场景;**Spark SQL**
:支持对 Hive 、HBase 等外部数据源的类 SQL 查询,每个数据表被当做一个 RDD ;**Spark Streaming**
:支持高吞吐量、可容错处理的实时流数据处理,其核心思路是将流式计算分解成一系列短小的批处理作业;**MLlib**
:提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛;**GraphX**
:支持在 Spark 中进行图计算,可认为是 Pregel 在 Spark 上的重写及优化,GraphX 性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。