Apache Spark基础及架构

Apache Spark是一款高效的大数据处理引擎,以其快速、易用、通用和多模式运行而著称。相较于MapReduce,Spark利用内存计算大幅提升性能,提供丰富API简化开发。Spark的组件包括Spark Core、Spark SQL、Spark Streaming、MLlib和GraphX,覆盖批处理、流处理和机器学习等领域。Spark架构中,SparkContext是核心入口,SparkSession是2.0后的统一编程接口。RDD是其核心数据结构,具备分区、compute函数、依赖、分区器和位置列表等特性。Spark支持多种运行模式,如Standalone、Yarn和Mesos。
摘要由CSDN通过智能技术生成

认识Spark

Apache Spark是大数据领域最活跃的项目之一,其活跃度目前远超Hadoop。特点是快速、易用、通用及多种运行模式。
1、快速
Spark是面向内存的大数据处理引擎,这使得Spark能够为多个不同数据源的数据提供近乎实时的处理性能,是用于需要多次操作特定数据集的应用场景。
面向磁盘的MapReduce受限于磁盘读/写性能和网络I/O性能的约束,在处理迭代计算、实时计算、交互式数据查询等方面并不高效,但是这些却在图计算、数据挖掘和机器学习等相关应用领域中非常常见。针对这一不足,将数据存储在内存中并基于内存进行计算是一个有效的解决途径。
2、易用
一方面,Spark提供了支持多种语言的API,如Scala、Java、Python、R等,使得用户开发Spark程序十分方便。另一方面,Spark是基于Scala语言开发的,由于Scala是一种面向对象的、函数式的静态编程语言,其强大的类型推断、模式匹配、隐式转换等一系列功能结合丰富的描述能力使得Spark应用程序代码非常简洁。Spark的易用性还体现在其针对数据处理提供了丰富的操作。
在使用MapReduce开发应用程序时,通常用户关注的重点与难点是如何将一个需求job(作业)拆分成两个操作,即Map与Reduce,因此系统开发人员需要解决的一个难题是如何把数据处理的业务逻辑合理有效的封装在对应的两个类中国。与之相对比,Spark提供了80多个针对数据处理的基本操作,如map、flatMap、reduceByKey、filter、cache、collect、textfile等,这使得用户基于Spark进行应用程序开发非常简洁高效。以分词统计为例,虽然MapReduce固定的编程模式极大的简化了并行程序开发,但是代码至少几十行,若换成Spark,其核心代码最短仅需要一行。
关于开发语言的选择问题,在Spark的实际项目中多用Scala语言,约占70%,其次是Java,约占20%,而Python约占10%。
3、通用
位于底层的是Spark Core,其实现了Spark的作业调度、内存管理、容错、与存储系统交互等基本功能,并针对弹性分布式数据提供了丰富的操作。在Spark Core的基础上,Spark提供了一系列面向不同应用需求的组件,主要有Spark SQL、Spark Streaming、MLlib、GraphX。将这些组件放在一起,构成了Spark软件栈。基于这个软件栈,Spark提出并实现了大数据处理的一种理念——“一栈式解决方案”,即Spark可同时对大数据进行批处理、流式处理和交互式查询,如下图所示,借助于这一软件栈用户可以简单而低耗的把各种处理流程综合在一起,充分体现了Spark的通用性。
在这里插入图片描述
4、多种运行模式
Spark支持多种运行模式:本地local运行模式、分布式运行模式。Spark集群的底层资源可以借助于外部的框架进行管理,目前Spark对Mesos和Yarn提供了相对稳定的支持。在实际生产环境中,中小规模的Spark集群通常可满足一般企业大多数的业务需求,而在搭建此类集群时推荐采用Standalone模式(不采用外部的资源管理框架)。该模式使得Spark集群更加轻量级。
Spark on Yarn模式:在这一模式下,Spark作为一个提交程序的客户端将Spark任务提交到Yarn上,然后通过Yarn来调度和管理Spark任务执行过程中所需的资源。在搭建此模式的Spark集群过程中,需要先搭建Yarn集群,然后将Spark作为Hadoop中的一个组件纳入到Yarn的调度管理下,这样将更有利于系统资源的共享。
Spark on Mesoes模式:Spark和资源管理框架Mesos相结合的运行模式。Apache Mesos与Yarn类似,能够将CPU、内存、存储等资源从计算机的物理硬件中抽象的隔离出来,搭建了一个高容错、弹性配置的分布式系统。Mesos同样也采用Master/Slave架构,并支持粗粒度模式和细粒度模式两种调度模式。
Spark Standalone模式:该模式是不借助于第三方资源管理架构的完全分布式模式。Spark使用自己的Master进程对应用程序运行过程中所需的资源进行调度和管理。对于中小规模的Spark集群首选Standalone模式。

Spark与MapReduce比较

对比MapReduce与Spark的主要区别
1)易用性
由于MapReduce中仅为数据处理提供了两个操作,即Map和Reduce,因此系统开发人员需要解决的一个难题是如何把数据处理的业务逻辑合理有效的封装在对应的两个类中。而通常同样的功能若换成Spark,其核心代码最短仅需要一行。
MapReduce自身并没有交互模式,需要借助Hive和Pig等附加模块。Spark则提供了一种命令行交互模式,即Spark Shell,使得用户可以获取到查询和其他操作的及时反馈。
2)效率
Map中间结果写入磁盘,效率低下,不适合迭代运算。Spark job中间输出结果可以保存在内存,不再需要读写HDFS。
3)任务启动开销
Spark 和Hadoop MapReduce都实现了异步并发模型,而MapReduce采用的是多进程模型,Spark采用了多线程模型。
多进程模型便于细粒度控制每个任务占用的资源,但会消耗较多的启动时间,不适合运行低延迟类型的作业,这是MapReduce广为诟病的原因之一。多线程模型则相反,该模型使得Spark很适合运行低延迟类型的作业。

Spark技术栈

这里对Spark的组件制作概述性介绍
1、Spark Core
核心组件,分布式计算引擎。其实现了Spark的作业调度、内存管理、容错、与存储系统交互等基本功能,并针对弹性分布式数据集提供了丰富的操作。
2、Spark SQL
又一个高性能的基于Hadoop的SQL解决方案。部分用法与Hive非常相似。
3、Spark Streaming
基于Spark Core实现的高吞吐量、具备容错机制的准实时流处理系统。将流式计算分解成一系列小批处理作业,也称微批处理。
4、Spark GraphX
分布式图处理框架,支持图并行计算。现在已经提供了很多算法,新的算法还在不断加入。
5、Spark MLlib
构建在Spark上的分布式机器学习库。是Spark对常用的机器学习算法的实现库,还提供了相关的测试与数据生成器。

了解Spark架构与运行环境

Spark环境部署

Spark架构

先了解Spark的架构中的术语。具体解释术语时,结合“WordCount”示例在运行架构图中指出各部分代码对应的组件。
Application:建立在Spark上的用户程序,包括Driver代码和运行在集群各节点Executor中的代码。
Driver program:驱动程序。Application中的main函数并创建SparkContext。
Cluster Manager:在集群(Standalone、Mesos、YARN)上获取资源的外部服务。
Worker Node:集群中任何可以运行Application代码的节点。
Executor:某个Application运行在worker节点上的一个进程。
Task:被送到某个Executor上的工作单元。
job:包含多个Task组成的并行计算,往往由Spark Action算子触发生成,一个Application中往往会产生多个job。
Stage:每个job会被拆分为多组Task,作为一个TaskSet,其名称为Stage。
在这里插入图片描述
重点注意:
SparkRDD包括四类算子:创建算子、转换算子、持久化算子和Action算子。一个Action算子对应一个job,其余的算子对应一个Task。

Spark编程入口

在开发过程中,常用的API主要有:SparkContext、SparkSession、RDD、DataSet及DataFrame,这里主要介绍SparkContext、SparkSession。因为RDD、DataSet及DataFrame有一定的相似之处

SparkContext

从前面Spark运行架构图中可以看出,SparkContext是连接Driver、Worker以及Cluster Manager(Master)的桥梁。作为Spark应用程序的核心、编程入口,SparkContext主要完成了如下工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值