Spark入门

一、Spark概述

Apache Spark是一种闪电般的群集计算技术,专为快速计算而设计。 它基于Hadoop MapReduce,它扩展了MapReduce模型以便将其用于更多类型的计算,其中包括交互式查询和流处理。

Spark的主要特点是其内存集群计算,可提高应用程序的处理速度,Spark旨在涵盖各种工作负载,如批处理应用程序,迭代算法,交互式查询和流式处理。 除了在各自的系统中支持所有这些工作负载之外,它还减少了维护单独工具的管理负担。

二、Apache Spark特性

1、Speed:Spark有助于在Hadoop集群中运行应用程序,内存速度提高了100倍,在磁盘上运行速度提高了10倍。 这可以通过减少对磁盘的读/写操作来实现。 它将中间处理数据存储在内存中。

2、支持多种语言:Spark提供Java,Scala或Python中的内置API。 因此,您可以使用不同的语言编写应用程序。 Spark使用80多种高效的操作算子进行交互式查询。

3、高级分析:Spark不仅支持'Map'和'reduce'。 它还支持SQL查询,流数据,机器学习(ML)和图算法。

 

三、Hadoop上构建Spark

下图显示了如何使用Hadoop组件构建Spark的三种方法。

Spark入门

如下所述,有三种Spark部署方式。

Standalone:Spark Standalone部署意味着Spark占用HDFS(Hadoop Distributed File System)之上的空间,并且显式地为HDFS分配空间。 在这里,Spark和MapReduce将并行运行,以涵盖集群上的所有Spark任务。

Hadoop Yarn:Hadoop Yarn部署意味着,只需在Yarn上运行即可,无需任何预安装或root访问权限。 它有助于将Spark集成到Hadoop生态系统或Hadoop堆栈中。 它允许其他组件在栈顶运行。

Spark in MapReduce(SIMR):除了独立部署之外,MapReduce中的Spark还用于启动Spark作业。 使用SIMR,用户可以启动Spark并使用其外壳,而无需任何管理访问。

四、Spark 组件

Spark入门


Spark Core

Spark Core是Spark平台的基础通用执行引擎,包含Spark的基本功能,包含任务调度、内存管理、容错机制等。内部定义了RDDs(弹性分部式数据集),提供了很多API来创建和操作这些RDDs

应用场景:为其它的组件提供底层服务

Spark SQL

Spark SQL是Spark Core上的一个组件,是Spark处理结构化库,像hive SQL,Mysql一样,它引入了一个名为SchemaRDD的新的数据抽象,它提供了对结构化和半结构化数据的支持。

应用场景:企业中报表统计

Spark Streaming

Spark Streaming利用Spark Core的快速调度功能执行流式分析。 它以小批量采集数据,并对这些小批量数据执行RDD(弹性分布式数据集)转换,提供API来操作实时流数据。

应用场景:企业中用来从kafka接收数据做实时统计

MLlib(机器学习库)

MLlib是Spark上面的分布式机器学习框架,因为它是基于分布式内存的Spark体系结构。根据基准测试,由MLlib开发人员针对交替最小二乘(ALS)实现完成。 Spark MLlib的速度是Apache Mahout的Hadoop磁盘版本的9倍(在Mahout获得Spark界面之前),它包含分类,聚类,回归等,还包括模型评估和数据导入,Mlib上提供的方法都支持集群上的横向扩展,比如python机器学习是单机的,处理的数据量有效,Mlib是集群的。

应用场景:机器学习

GraphX

GraphX是一个位于Spark顶部的分布式图形处理框架。 它提供了一个用于表达图形计算的API,可以使用Pregel抽象API对用户定义的图形进行建模。 它还为此抽象提供了运行时的优化。

应用场景:图计算

其它组件:

Cluster Managers:集群管理,Spark自带一个集群管理是单独调度器。常见集群管理包括:Hadoop YARN,Apache Mesos

四、spark与hadoop的比较

hadoop应用场景

离线处理、对时效性要求不高(中间数据会落在磁盘上)

Spark应用场景

时效性要求高的场景(几秒钟到几分钟)、机器学习