文章目录
认识Apache Spark1.1 Spark是一个软件栈1.1.1 Spark Core1.1.2 Spark SQL1.1.3 Spark Streaming1.1.4 MLlib1.1.5 GraphX1.1.6 集群管理器 1.2 Spark的用户和用途1.2.1 数据科学任务1.2.2 数据处理应用认识Apache Spark
了解Spark 的最好办法莫过于了解相比于它的前辈MapReduce,Spark 有哪些进步。
Map-Reduce:
MapReduce 革新了海量数据计算的方式,为运行在成百上千台机器上的并行程序提供了简单的编程模型。MapReduce 引擎几乎可以做到线性扩展:随着数据量的增加,可以通过增加更多的计算机来保持作业时间不变。MapReduce 是健壮的。故障虽然在单台机器上很少出现,但在数千个节点的集群上却总是出现。MapReduce将工作拆分成多个小的任务,能优雅地处理任务失败,并且不影响任务所属作业的正确执行。
Spark:
4. Spark 继承了MapReduce 的线性扩展性和容错性。
5. Spark摒弃了MapReduce先map 再reduce 这样的严格方式,Spark 引擎可以执行更通用的有向无环图(DAG)算子。这就意味着,在MapReduce 中需要将中间结果写入分布式文件系统时,Spark 能将中间结果直接传到流水作业线的下一步。
6. Spark 扩展了内存计算能力。它的弹性分布式数据集(RDD)抽象使开发人员将流水处理线上的任何点物化在跨越集群节点的内存中。这样后续步骤如果需要相同数据集时就不必重新计算或从磁盘加载。Spark 适用于各种各样原先需要多种不同的分布式平台的场景,包括批处理、迭代算法、交互式查询、流处理。
1.1 Spark是一个软件栈
Spark 的核心是一个对由很多计算任务组成的、运行在多个工作机器或者是一个计算集群上的应用进行调度、分发以及监控的计算引擎。因此Spark 还支持为各种不同应用场景专门设计的高级组件,比如SQL 和机器学习等。
这些组件关系密切并且可以相互调用,这样你就可以像在平常软件项目中使用程序库那样,组合使用这些的组件。
1.1.1 Spark Core
Spark Core 实现了Spark 的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core 中还包含了对弹性分布式数据集(RDD)。RDD 表示分布在多个计算节点上可以并行操作的元素集合,是Spark 主要的编程抽象。Spark Core 提供了创建和操作这些集合的多个API。
1.1.2 Spark SQL
Spark SQL 是Spark 用来操作结构化数据的程序包。通过Spark SQL,我们可以使用SQL或者Apache Hive 版本的SQL 方言(HQL)来查询数据。
1.1.3 Spark Streaming
Spark Streaming 是Spark 提供的对实时数据进行流式计算的组件。比如生产环境中的网页服务器日志,或是网络服务中用户提交的状态更新组成的消息队列,都是数据流。Streaming 提供了用来操作数据流的API,并且与Spark Core 中的RDD API 高度对应。这样一来,程序员编写应用时的学习门槛就得以降低。
1.1.4 MLlib
Spark 中还包含一个提供常见的机器学习(ML)功能的程序库,叫作MLlib。MLlib 提供了很多种机器学习算法,包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。MLlib 还提供了一些更底层的机器学习原语,包括一个通用的梯度下降优化算法。所有这些方法都被设计为可以在集群上轻松伸缩的架构。
1.1.5 GraphX
GraphX 是用来操作图(比如社交网络的朋友关系图)的程序库,可以进行并行的图计算。与Spark Streaming 和Spark SQL 类似,GraphX 也扩展了Spark 的RDD API,能用来创建一个顶点和边都包含任意属性的有向图。GraphX 还支持针对图的各种操作(比如进行图分割的subgraph 和操作所有顶点的mapVertices),以及一些常用图算法(比如PageRank和三角计数)。
1.1.6 集群管理器
Spark 支持在各种集群管理器(clustermanager)上运行,包括Hadoop YARN、Apache Mesos,以及Spark 自带的一个简易调度器,叫作独立调度器。
1.2 Spark的用户和用途
目标人群:数据科学家和工程师。对应于数据科学应用和数据处理应用。当然,这种领域和使用模式的划分是比较模糊的。
1.2.1 数据科学任务
数据科学关注的是数据分析领域,数据科学家(data scientist)就是主要负责分析数据并建模的人。数据科学家有可能具备SQL、统计、预测建模(机器学习)等方面的经验,以及一定的使用Python、Matlab 或R 语言进行编程的能力。
1.2.2 数据处理应用
在这里,我们把工程师定义为使用Spark 开发生产环境中的数据处理应用的软件开发者。这些开发者一般有基本的软件工程概念,比如封装、接口设计以及面向对象的编程思想,他们通常有计算机专业的背景,并且能使用工程技术来设计和搭建软件系统,以实现业务用例。
Spark 已经为工程师提供了足够的接口来快速实现常见的任务,以及对应用进行监视、审查和性能调优。
如果觉得《Spark一路火花带闪电——认识Spark》对你有帮助,请点赞、收藏,并留下你的观点哦!