Spark(二):Spark基础及架构

一级目录

二级目录

三级目录

Spark基础及架构

一、认识Spark

Apache Spark 是大数据领域最活跃的项目之一,其活跃度目前远超 Hadoop。特点是快速、易用、通用及多种运行模式。

快速

​ Spark 是面向内存的大数据处理引擎,这使得 Spark 能够为多个不同数据源

的数据提供近乎实时的处理性能,适用于需要多次操作特定数据集的应用场景。

​ 面向磁盘的 MapReduce 受限于磁盘读/写性能和网络 I/O 性能的约束,在处

理迭代计算、实时计算、交互式数据查询等方面并不高效,但是这些却在图计算、

数据挖掘和机器学习等相关应用领域中非常常见。针对这一不足,将数据存储在内存中并基于内存进行计算是一个有效的解决途径。

易用

​ 一方面,Spark 提供了支持多种语言的 API,如 Scala、Java、Python、R 等,

使得用户开发 Spark 程序十分方便。另一方面,Spark 是基于 Scala 语言开发的,由于Scala 是一种面向对象的、函数式的静态编程语言,其强大的类型推断、模式匹配、隐式转换等一系列功能结合丰富的描述能力使得 Spark 应用程序代码非常简洁。Spark 的易用性还体现在其针对数据处理提供了丰富的操作。

​ 在使用 MapReduce 开发应用程序时,通常用户关注的重点与难点是如何将一个需求 Job(作业)拆分成 Map 和 Reduce。由于 MapReduce 中仅为数据处理提供了两个操作,即 Map 和 Reduce,因此系统开发人员需要解决的一个难题是如何把数据处理的业务逻辑合理有效地封装在对应的两个类中。与之相对比,Spark 提供了 80 多个针对数据处理的基本操作,如 map、flatMap、reduceByKey、filter、cache、collect、textFile 等,这使得用户基于 Spark 进行应用程序开发非常简洁高效。以分词统计为例,虽然 MapReduce 固定的编程模式极大地简化了并行程序开发,但是代码至少几十行,若换成 Spark,其核心代码最短仅需一行。

​ 关于开发语言的选择问题,在 Spark 的实际项目开发中多用 Scala 语言,约占 70%;其次是 Java,约占 20%;而 Python 约占 10%。

通用

​ 位于底层的是 Spark Core,其实现了 Spark 的作业调度、内存管理、容错、

与存储系统交互等基本功能,并针对弹性分布式数据集提供了丰富的操作。在

Spark Core 的基础上,Spark 提供了一系列面向不同应用需求的组件,主要有 Spark

SQL、Spark Streaming、MLlib、GraphX。将这些组件放在一起,构成了 Spark 软

件栈。基于这个软件栈,Spark 提出并实现了大数据处理的一种理念——“一栈式解决方案(one stack to rule them all”,即 Spark 可同时对大数据进行批处理、流式处理和交互式查询,如下图所示。借助于这一软件栈用户可以简单而低耗地把各种处理流程综合在、一起,充分体现了 Spark 的通用性。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VPldvea1-1597061177269)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200804231142725.png)]

多种运行模式

​ 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 与Map Reduce 比较

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

二、了解 Spark 架构与运行环境

spark 环境部署

spark安装

2.1.2 Standalone

Standalone 模式
即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任
何其他资源管理系统。从一定程度上说,该模式是其他两种的基础。借鉴 Spark
开发模式,我们可以得到一种开发新型计算框架的一般思路:先设计出它的
standalone 模式,为了快速开发,起初不需要考虑服务(比如 master/slave)的
容错性,之后再开发相应的 wrapper,将 stanlone 模式下的服务原封不动的部署
到资源管理系统 yarn 或者 mesos 上,由资源管理系统负责服务本身的容错。目
前 Spark 在 standalone 模式下是没有任何单点故障问题的,这是借助 zookeeper
实现的,思想类似于 Hbase master 单点故障解决方案。将 Spark standalone 与
MapReduce 比较,会发现它们两个在架构上是完全一致的:

  1. 都是由 master/slaves 服务组成的,且起初 master 均存在单点故障,后来
    均通过 zookeeper 解决(Apache MRv1 的 JobTracker 仍存在单点问题,但 CDH 版
    本得到了解决);
  2. 各个节点上的资源被抽象成粗粒度的 slot,有多少 slot 就能同时运行多少
    task。不同的是,MapReduce 将 slot 分为 map slot 和 reduce slot,它们分别只能
    供 Map Task 和 Reduce Task 使用,而不能共享,这是 MapReduce 资源利率低效
    的原因之一,而 Spark 则更优化一些,它不区分 slot 类型,只有一种 slot,可以
    供各种类型的 Task 使用,这种方式可以提高资源利用率,但是不够灵活,不能
    为不同类型的 Task 定制 slot 资源。总之,这两种方式各有优缺点。
    -master: 指定运行模式,spark://host:port, mesos://host:port, yarn, or local[n]
    master 和 worker 是物理节点,driver 和 executor 是进程。
    Client :客户端进程,负责提交作业到 Master。
    Master :Standalone 模式中主控节点,负责接收 Client 提交的作业,管理
    Worker,并命令 Worker 启动 Driver 和 Executor(集群模式)。
    当 deployMode 为 CLIENT 时,driver 会在客户端直接运行. 1、master 和 worker 节点
    搭建 spark 集群的时候我们就已经设置好了 master 节点和 worker 节点,一个集群有多个 master 节点和多个 worker 节点。
    master 节点常驻 master 守护进程,负责管理 worker 节点,我们从 master
    节点提交应用。
    worker 节点常驻 worker 守护进程,与 master 节点通信,并且管理 executor
    进程。
    一台机器可以同时作为 master 和 worker 节点(举个例子:你有四台机器,
    你可以选择一台设置为 master 节点,然后剩下三台设为 worker 节点,也可以把
    四台都设为 worker 节点,这种情况下,有一个机器既是 master 节点又是 worker
    节点)
    类似与 Hadoop 中的 namenode 和 datanode,主从关系。
    2、driver 和 executor 进程
    driver 进程就是应用的 main()函数并且构建 sparkContext 对象,当我们提交
    了应用之后,便会启动一个对应的 driver 进程,driver 本身会根据我们设置的参
    数占有一定的资源(主要指 cpu core 和 memory)。下面说一说 driver 和 executor
    会做哪些事。
    在这里插入图片描述
    driver 可以运行在 master 上,也可以运行 worker 上(根据部署模式的不
    同 -deploy-mode: 指定将 driver 端运行在 client 还是在 cluster)。
    driver 首先会向集群管理者(standalone、yarn,mesos)申请 spark 应用所
    需的资源,也就是 executor,
    然后集群管理者会根据spark应用所设置的参数在各个worker上分配一定数
    量的 executor,每个 executor 都占用一定数量的 cpu 和 memory。
    在申请到应用所需的资源以后,driver 就开始调度和执行我们编写的应用代
    码了。
    driver 进程会将我们编写的 spark 应用代码拆分成多个 stage,每个 stage 执
    行一部分代码片段,并为每个 stage 创建一批 tasks,然后将这些 tasks 分配到各
    个 executor 中执行。
    executor 进程宿主在 worker 节点上,一个 worker 可以有多个 executor。
    每个 executor 持有一个线程池,每个线程可以执行一个 task,executor 执行
    完 task 以后将结果返回给 driver,每个 executor 执行的 task 都属于同一个应用。
    此外executor还有一个功能就是为应用程序中要求缓存的 RDD 提供内存式
    存储,RDD 是直接缓存在 executor 进程内的,因此任务可以在运行时充分利用
    缓存数据加速运算。
    为了加深理解,做了一个说明图,为了便于作图,假设了一种非常简单的集
    群模式。
    (1)
    在这里插入图片描述
    假设我们现在有一个集群,为了便于作图,我们设有一个 master 节点,两
    个 worker 节点,并且驱动程序运行在 master 节点上。
    (2)在这里插入图片描述
    在 master 节 点 提 交 应 用 以 后 , 在 master 节点中启动 driver 进 程
    ( -deploy-mode client,这里由于节点是 mater,所以再这里启动),driver 进程向集
    群管理者申请资源(executor),集群管理者在不同的 worker 上启动了 executor
    进程,相当于分配资源。
    (3)
    在这里插入图片描述
    driver 进程会将我们编写的 spark 应用代码拆分成多个 stage,每个 stage 执
    行一部分代码片段,并为每个 stage 创建一批 tasks,然后将这些 tasks 分配到各
    个 executor 中执行。
    yarn 运行模式
    spark on yarn(spark 作为客户端,spark 需要做的事情是提交作业到 yarn 上执
    行)
    yarn 支持 client 和 cluster 模式:driver 运行在哪里 -deploy-mode: 指定将driver 端运行在 client 还是在 cluster
    client:提交作业的进程是不能停止的否则作业就挂了
    cluster:提交完作业,那么提交作业端就可以断开,因为 driver 是运行在 am
    里面的
    查看已经运行完的 yarn 的日志信息:yarn logs -applicationId
    yarn 和 standalone 的区别:
    yarn 模式:只需要一个节点,然后提交作业即可,不需要 spark 集群的(不需
    要启动 Maser 和 Worker)
    standalone 模式:在 spark 集群上的每个节点都需要部署 spark,然后需要启
    动 spark 集群(需要 Maser 和 Worker 进程节点)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值