1.Spark简介
1.1 Spark概述
Apache Spark是一种快速和通用的集群计算系统。 它提供支持Java,Scala,Python和R的高级API和支持一般执行图的优化引擎。 它还支持一系列更高级别的工具,包括用于SQL和SQL数据处理的Spark SQL,用于机器学习的MLlib,用于图形处理的GraphX和用于实时流处理的Spark Streaming。
1.2 Hadoop和Spark
和Hadoop MapReduce相比,主要在下面几个方面做了改进:
(1)Spark基于内存的特性,使得其比Hadoop更快;
(2)Spark丰富的API带来了更强大的易用性;
(3)Spark不单单支持传统批处理应用,更支持交互式查询、流式计算、机器学习、图计算等各种应用,能满足各种不同应用场景下的需求。
2. Spark生态系统
2.1 Spark生态系统概述
Spark生态系统是伯克利APMLab实验室打造的,力图在算法(Algorithms)、机器(Machines)、人(People)之间通过大规模集成来展现大数据应用的一个平台。伯克利AMPLab运用大数据、云计算、通信等各种资源以及各种灵活的技术方案,对海量不透明的数据进行甄别并转化为有用的信息,以供人们更好的理解世界。该生态系统已经涉及到机器学习、数据挖掘、数据库、信息检索、自然语言处理和语音识别等多个领域。
Spark生态系统以Spark Core为核心,从HDFS、Amazon S3和HBase等持久层读取数据,以MESS、YARN和自身携带的Standalone为资源管理器调度Job完成Spark应用程序的计算。 这些应用程序可以来自于不同的组件,如Spark Shell/Spark Submit的批处理、Spark Streaming的实时流处理应用、Spark SQL的即席查询、BlinkDB的权衡查询、MLlib的机器学习、GraphX的图处理和SparkR的数学计算等等。生态系统整体框架如下图所示:
2.2 Spark SQL
Spark SQL可以通过JDBC API将Spark数据集暴露出去,而且还可以用传统的BI和可视化工具在Spark数据上执行类似SQL的查询。用户还可以用Spark SQL对不同格式的数据(如JSON、数据库等)执行ETL,将其转化,然后暴露给特定的查询。
2.3 Spark MLlib
MLlib是一个可扩展的Spark机器学习库,由通用的学习算法和工具组成,包括二元分类、线性回归、聚类、协同过滤、梯度下降等以及底层优化原语。
2.4 Spark Graphx
GraphX是用于图计算和并行图计算的Spark API。通过引入弹性分布式属性图(Resilient Distributed Property Graph),一种顶点和边都带有属性的有向多重图,扩展了Spark RDD。为了支持图计算,GraphX暴露了一个基础操作符集合(如subgraph,joinVertices和aggregateMessages)和一个经过优化的Pregel API变体。此外,GraphX还包括一个持续增长的用于简化图分析任务的图算法和构建器集合。
2.5 Spark Streaming
Spark Streaming基于微批量方式的计算和处理,可以用于处理实时的流数据。它使用DStream,简单来说就是一个弹性分布式数据集(RDD)系列,处理实时数据。