赞
踩
Spark是UC Berkeley AMP Lab开源的通用分布式并行计算框架,目前已成为Apache软件基金会的顶级开源项目。Spark支持多种编程语言,包括Java、Python、R和Scala,同时Spark也支持Hadoop的底层存储系统HDFS,但Spark不依赖Hadoop。
Spark基于Hadoop MapReduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点,并且具有更高的运算速度。Spark能够比Hadoop运算更快,主要原因是:Hadoop在一次MapReduce运算之后,会将数据的运算结果从内存写入到磁盘中,第二次 MapReduce运算时在从磁盘中读取数据,两次对磁盘的操作,增加了多余的IO消耗;而Spark则是将数据一直缓存在内存中,运算时直接从内存读取数据,只有在必要时,才将部分数据写入到磁盘中。除此之外,Spark使用最先进的DAG(Directed Acyclic Graph, 有向无环图)调度程序、查询优化器和物理执行引擎,在处理批量处理以及处理流数据时具有较高的性能。按照Spark官网的说法,Spark相对于Hadoop而言,Spark能够达到100倍以上的运行负载。
Spark除了Spark Core外,还有其它由多个组件组成,目前主要有四个组件:Spark SQL、Spark Streaming、MLlib、GraphX。这四个组件加上Spark Core组成了Spark的生态。通常,我们在编写一个Spark应用程序,需要用到Spark Core和其余4个组件中的至少一个。Spark的整体构架图如下图所示:
Spark Core:是Spark的核心,主要负责任务调度等管理功能。Spark Core的实现依赖于RDDs(Resilient Distributed Datasets, 弹性分布式数据集)的程序抽象概念。
Spark SQL:是Spark处理结构化数据的模块,该模块旨在将熟悉的SQL数据库查询与更复杂的基于算法的分析相结合,Spark SQL支持开源Hive项目及其类似SQL的HiveQL查询语法。Spark SQL还支持JDBC和ODBC连接,能够直接连接现有的数据库。
Spark Streaming:这个模块主要是对流数据的处理,支持流数据的可伸缩和容错处理,可以与Flume(针对数据日志进行优化的一个系统)和Kafka(针对分布式消息传递进行优化的流处理平台)等已建立的数据源集成。Spark Streaming的实现,也使用RDD抽象的概念,使得在为流数据(如批量历史日志数据)编写应用程序时,能够更灵活,也更容易实现。
MLlib:主要用于机器学习领域,它实现了一系列常用的机器学习和统计算法,如分类、回归、聚类、主成分分析等算法。
GraphX:这个模块主要支持数据图的分析和计算,并支持图形处理的Pregel API版本。GraphX包含了许多被广泛理解的图形算法,如PageRank。
Spark有多种运行模式,由图2中,可以看到Spark支持本地运行模式(Local模式)、独立运行模式(Standalone模式)、Mesos、YARN(Yet Another Resource Negotiator)、Kubernetes模式等。
本地运行模式是Spark中最简单的一种模式,也可称作伪分布式模式。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。