浅谈Spark

简介: 笔记

一、Spark是什么


基本概念:Spark 是一个用来实现 快速 而 通用 的集群计算的平台。


详细了解可去Spark的官网:http://spark.apache.org/


在速度方面, Spark 扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模 式,包括交互式查询和流处理。在处理大规模数据集时,速度是非常重要的。速度快就意 味着我们可以进行交互式的数据操作,否则我们每次操作就需要等待数分钟甚至数小时。 Spark 的一个主要特点就是能够在内存中进行计算,因而更快。不过即使是必须在磁盘上 进行的复杂计算, Spark 依然比 MapReduce 更加高效。


总的来说, Spark 适用于各种各样原先需要多种不同的分布式平台的场景, 包括批处理、 迭代算法、交互式查询、流处理。 通过在一个统一的框架下支持这些不同的计算, Spark 使我们可以简单而低耗地把各种处理流程 整合 在一起。而这样的组合,在实际的数据分析 过程中是很有意义的。不仅如此, Spark 的这种特性还大大减轻了原先需要对各种平台分 别管理的负担。


Spark 所提供的接口非常丰富。 除了提供基于 Python、Java、Scala 和 SQL 的简单易用的 API 以及内建的丰富的程序库以外, Spark 还能和其他大数据工具密切配合使用。 例如, Spark 可以运行在 Hadoop 集群上,访问包括 Cassandra 在内的任意 Hadoop 数据源。


总结Spark对曾经引爆大数据产业革命的 Hadoop MapReduce 的改进主要体现在这几个 方面,也就是Spark的优点:


Spark 速度更快

Spark 丰富的 API 带来了更强大的易用性

Spark 不单单支持传统批处理应用,更支持交互式查询、流式计算、机器学习、图计算等 各种应用,满足各种不同应用场景下的需求


二、Spark各组件介绍


Spark 项目包含多个紧密集成的组件。

Spark 的核心是一个对由很多计算任务组成的、运行 在多个工作机器或者是一个 计算集群 上的应用进行调度、分发以及监控的计算引擎。

由于 Spark 的核心引擎有着速度快和通用的特点, 因此 Spark 还支持为各种不同应用场景专门 设计的高级组件,比如 SQL 和机器学习等。这些组件关系密切并且可以相互调用,这样你 就可以像在平常软件项目中使用程序库那样,组合使用这些的组件。


各组件间密切结合的设计原理有这样几个优点。首先,软件栈中所有的程序库和高级组件 都可以从下层的改进中获益。比如,当 Spark 的核心引擎新引入了一个优化时, SQL 和机 器学习程序库也都能自动获得性能提升。其次,运行整个软件栈的代价变小了。不需要运 行 5 到 10 套独立的软件系统了,一个机构只需要运行一套软件系统即可。这些代价包括 系统的部署、维护、测试、支持等。这也意味着 Spark 软件栈中每增加一个新的组件,使 用 Spark 的机构都能马上试用新加入的组件。这就把原先尝试一种新的数据分析系统所需 要的下载、部署并学习一个新的软件项目的代价简化成了只需要升级 Spark。


最后,密切结合的原理的一大优点就是,我们能够构建出无缝整合不同处理模型的应用。 例如,利用 Spark, 你可以在一个应用中实现将数据流中的数据使用机器学习算法进行实 时分类。 与此同时, 数据分析师也可以通过 SQL 实时查询结果数据, 比如将数据与非结 构化的日志文件进行连接操作。不仅如此,有经验的数据工程师和数据科学家还可以通过 Python shell 来访问这些数据,进行即时分析。其他人也可以通过独立的批处理应用访问这 些数据。 IT 团队始终只需要维护一套系统即可。


各组件如图介绍:

30.png

(1)Spark Core

Spark Core实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。 Spark Core 中还包含了对 弹性分布式数据集 (resilient distributed dataset, 简 称 RDD)的 API 定义。 RDD 表示分布在多个计算节点上可以并行操作的元素集合, 是 Spark 主要的编程抽象。 Spark Core 提供了创建和操作这些集合的多个 API。


(2)Spark SQL

Spark SQL 是 Spark 用来操作结构化数据的程序包。 通过 Spark SQL, 我们可以使用 SQL 或者 Apache Hive 版本的 SQL 方言(HQL)来查询数据。 Spark SQL 支持多种数据源,比 如 Hive 表、Parquet 以及 JSON 等。 除了为 Spark 提供了一个 SQL 接口, Spark SQL 还支 持开发者将 SQL 和传统的 RDD 编程的数据操作方式相结合,不论是使用 Python、Java 还 是 Scala, 开发者都可以在单个的应用中同时使用 SQL 和复杂的数据分析。 通过与 Spark 所提供的丰富的计算环境进行如此紧密的结合, Spark SQL 得以从其他开源数据仓库工具 中脱颖而出。 Spark SQL 是在 Spark 1.0 中被引入的。


(3)Spark Streaming

Spark Streaming 是 Spark 提供的对实时数据进行流式计算的组件。比如生产环境中的网页 服务器日志, 或是网络服务中用户提交的状态更新组成的消息队列, 都是数据流。 Spark Streaming 提供了用来操作数据流的 API, 并且与 Spark Core 中的 RDD API 高度对应。这 样一来,程序员编写应用时的学习门槛就得以降低,不论是操作内存或硬盘中的数据,还 是操作实时数据流, 程序员都更能应对自如。 从底层设计来看, Spark Streaming 支持与 Spark Core 同级别的容错性、吞吐量以及可伸缩性。


(4)MLlib

Spark 中还包含一个提供常见的机器学习(ML)功能的程序库,叫作 MLlib。MLlib 提供 了很多种机器学习算法,包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能。 MLlib 还提供了一些更底层的机器学习原语,包括一个通用的梯 度下降优化算法。所有这些方法都被设计为可以在集群上轻松伸缩的架构。


(5)GraphX

GraphX 是用来操作图(比如社交网络的朋友关系图)的程序库,可以进行并行的图计算。 与 Spark Streaming 和 Spark SQL 类似, GraphX 也扩展了 Spark 的 RDD API, 能用来创建 一个顶点和边都包含任意属性的有向图。 GraphX 还支持针对图的各种操作(比如进行图分割的 subgraph和操作所有顶点的mapVertices), 以及一些常用图算法(比如 PageRank和三角计数)。


(6)集群管理器

就底层而言, Spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计 算。 为了实现这样的要求, 同时获得最大灵活性, Spark 支持在各种 集群管理器 (cluster manager)上运行, 包括 Hadoop YARN、Apache Mesos, 以及 Spark 自带的一个简易调度 器,叫作独立调度器。如果要在没有预装任何集群管理器的机器上安装 Spark, 那么 Spark 自带的独立调度器可以让你轻松入门;而如果已经有了一个装有 Hadoop YARN 或 Mesos 的集群,通过 Spark 对这些集群管理器的支持,你的应用也同样能运行在这些集群上。


三、Spark的适用场景


目前大数据处理场景有以下几个类型:


复杂的批量处理(Batch Data Processing),偏重点在于处理海量数据的能力,至于处理速度可忍受,通常的时间可能是在数十分钟到数小时;


基于历史数据的交互式查询(Interactive Query),通常的时间在数十秒到数十分钟之间


基于实时数据流的数据处理(Streaming Data Processing),通常在数百毫秒到数秒之间


目前对以上三种场景需求都有比较成熟的处理框架,第一种情况可以用Hadoop的MapReduce来进行批量海量数据处理,第二种情况可以Impala进行交互式查询,对于第三中情况可以用Storm分布式处理框架处理实时流式数据。以上三者都是比较独立,各自一套维护成本比较高,而Spark的出现能够一站式平台满意以上需求。


通过以上分析,总结Spark场景有以下几个:


1.Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小


2.由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合


3.数据量不是特别大,但是要求实时统计分析需求


相关文章
|
4月前
|
存储 缓存 分布式计算
spark BlockManager粗讲
spark BlockManager粗讲
|
5月前
|
缓存 分布式计算 关系型数据库
Spark案例库V1.0版
Spark案例库V1.0版
29 0
|
6月前
|
消息中间件 分布式计算 监控
Spark6:Spark Steaming
Spark6:Spark Steaming
35 0
|
8月前
|
SQL 分布式计算 资源调度
|
SQL 机器学习/深度学习 分布式计算
【Spark】(一)初识 Spark
【Spark】(一)初识 Spark
147 0
【Spark】(一)初识 Spark
|
SQL 机器学习/深度学习 分布式计算
spark介绍
spark介绍
2120 0
spark介绍
|
分布式计算 Kubernetes Spark
Spark on k8s
前言 Spark 自从2.3版本以来就支持运行在k8s上,本文主要介绍如何运行Spark在阿里云容器服务-Kubernetes。 前提条件 1、 已经购买阿里云容器服务-Kubernetes。购买链接:Kubernetes控制台。
2984 0
|
SQL 分布式计算 大数据
初学Spark
介绍大数据处理引擎Spark的特点,以及它的技术栈
2100 0
|
分布式计算 Spark Hadoop
|
分布式计算 Java Apache
[Spark]那些年我们遇到的Spark的坑
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/72922155 1.
2622 0