一、spark概述
1.1****什么是spark?
Spark 是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。
*1.2 spark的特点*
1****.快速
与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。
**2. **易用
Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。
**3. **通用
Spark提供了统一的解决方案。Spark可以用于,交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。
**4. **随处运行
用户可以使用Spark的独立集群模式运行Spark,也可以在亚马逊弹性计算云(Amazon Elastic Compute Cloud, Amazon EC2)、Hadoop YARN资源管理器或 Apache Mesos上运行Spark。
**5.**代码简洁
Spark支持使用Scala、Python等语言编写代码。Scala 和Python 的代码相对Java的代码而言比较简洁,因此,在Spark中一般都使用Scala 或Python 编写应用程序,这也比在MapReduce 中编写应用程序简单方便。
1.3 spark****生态圈组件
(1)Spark Core:Spark的核心,提供底层框架及核心支持。
(2)BlinkDB:一不用于在海量数据上进行交互式SQL查询的大规模并行查询引擎允许用户通过权衡数据精度缩短查询响应时间,数据的精度将被控制在允许的误差范围内。
(3)Spark SOL:可以执行SQL查询,支持基本的SOL语法和HiveQL语法,可读取的数据源包括Hive、HDFS、关系数据库(如MySQL)等。
(4)SparkStreaming:可以进行实时数据流式计算。
(5)MLBase:MLBase 是Spark生态圈的一部分,专注于机器学习领域,学习门槛较低。
(6)GraphX:图计算的应用在很多情况下处理的数据量都是很庞大的。
(7)SparkR:SparkR是 AMPLab发布的一个R语言开发包,使得R语言编写的程序不只可以在单机运行,也可以作为Spark的作业运行在集群上,极大地提升了R语言的数据处理能力。
1.4 spark****的核心原理
为了更加深入了解spark的核心原理,需要先了解两个重要的概念,即**窄依赖(Narrow Dependency)和宽依赖(Wide Dependency)**
** 窄依赖**指的是子RDD的一个分区只依赖于某个父RDD中的一个分区
**宽依赖**指的是子RDD的每一个分区都依赖于某个父RDD中一个以上的分区
二、Spark和MapReduce的区别
spark处理数据是基于内存的,而MapReduce是基于磁盘处理数据的。
Spark 的内存计算特性 和 基于DAG有向无环图 的执行模型,通常比 MapReduce 更快。
3.Spark提供了丰富的API,包括 scala、Java、Python等。开发起来更加灵活、表达能力更强。而 MapReduce 使用 Java 编程语言来编写 Map 和 Reduce 函数,需要手动编写更多的代码来实现处理逻辑。
Spark 有更好的扩展性,可以方便的与其他数据处理框架和工具集成。
Spark提供了弹性式分布数据集RDD,具有自动容错和数据恢复机制。
三、3.MapReduce核心环节-Shuffle过程
所谓Shuffle,是指对Map输出结果进行分区、排序、合并等处理并交给Reduce的过程。因此,Shuffle过程分为Map端的操作和Reduce端的操作,主要执行以下操作。
四、了解spark架构
(1)客户端:用户提交作业的客户端。
(2)Driver:负责运行应用程序(Application)的 main 函数并创建 SparkContext,
应用程序包含Driver 功能的代码和分布在集群中多个节点上的Executor代码。
(3)SparkContext:应用上下文,控制整个生命周期。
(4)Cluster Manager:资源管理器,即在集群上获取资源的外部服务,目前主要有Standalone 和 YARN。
Standalone 是Spark原生的资源管理器,由Master进程负责资源的分配也可以理解为使用 Standalone 时Cluster Manager 是Master进程所在节点。
YARN是Hadoop 集群的资源管理器,若使用YARN作为Spark程序运行的资源管理器,则由ResourceManager 负责资源的分配。
(5)Spark Worker:集群中任何可以运行应用程序的节点,运行一个或多个 Executor 进程。
(6)Executor:运行在Spark Worker 上的任务(Task)执行器,Executor启动线程池运行Task,并负责将数据存在内存或磁盘上,每个应用程序都会申请各自的Executor以处理任务。
(7)Task:被发送到某个Executor的具体任务。
版权归原作者 yu: 所有, 如有侵权,请联系我们删除。