Spark的安装部署与基本原理总结 (linux系统)

  1. 安装部署Spark

1. 将安装包拖入到Linux虚拟机的桌面,然后进入桌面所在的文件路径,对Spark进行解压和重命名等操作

2.通过如下Linux命令进入Spark解压文件中的conf文件夹,并根据Spark自带的模板创建spark-env.sh配置文件

3.通过在Linux终端使用命令“vim spark-env.sh”修改配置文件spark-env.sh。在配置文件的空白处,添加如下内容

4.在spark-env.sh修改完成之后,我们进一步配置Spark的环境变量。使用如下命令打开当前用户根目录下的配置文件,然后,在该文件的尾部添加如下信息,并通过source命令来使配置生效。

5.在Linux终端通过如下命令来启动Spark,并查看Master和Worker进程是否启动

linux终端如果显示如下信息,即表明Spark安装和启动成功

  1. 总结Spark的基本原理

为了更好理解,借助MapReduce理解spark

MapReduce有一些缺点如下:

    1. MapReduce的编程模型表达能力有限

MapReduce计算框架将计算任务抽象为map和reduce两个计算任务,这简化了编程过程,但也导致MapReduce的编程模型表达能力有限。

当实际中有些处理过程比较复杂时,我们需要建立多个MapReduce过程并连接起来,这也使得MapReduce的编程过程变得复杂。

    1. 无法实现快速的迭代计算

当一个复杂的需求涉及多个MapReduce计算任务时,MapReduce只能一个任务完成之后将结果写入磁盘,另一个计算任务才能开始,无法实现快速的迭代计算。

    1. MapReduce计算过程的延迟一般比较高

,由于MapReduce的计算过程需要从磁盘中读取数据,并将中间结果和最终结果写入HDFS通过磁盘保存(同时考虑到HDFS的多备份机制),因此MapReduce计算任务涉及大量的磁盘I/O开销。

受制于磁盘的响应速度,MapReduce计算过程的延迟一般比较高。

一个普通的MapReduce作业往往需要分钟级的运算,复杂的作业或者是数据量更大的情况下,可能花费一个小时或者更多。

相对于MapReduce

1.Spark提供了更多的操作,这使得Spark的编程模型的表达能力更强

2.Spark将计算过程中的中间结果放到内存中而不是写入磁盘,通过提供基于内存的计算,Spark减少了磁盘的I/0开销,能够更好的支持迭代计算任务,并提高了计算的效率

3.Spark提供了基于有向无环图DAG的任务调度执行机制,能够较好的支持涉及多任务、多阶段的计算需求

 通过有向无环图的任务调度执行机制以及基于内存的计算,4.Spark具有比MapReduce更快的计算速度

5.虽然spark有很多的优点,但是它并不能取代hadoop,反而,spark在某些方面很好的融入了hadoop。虽然spark的部分运算在内存中进行不用写入文件系统,但最终结果或者不能一次性运算的体积较大的中间文件还是要写入HDFS文件系统的。所以spark是离不开hadoop的。

Spark 系统架构

Application: Appliction都是指用户编写的Spark应用程序,其中包括一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码

Driver:  Spark中的Driver即运行上述Application的main函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境,在Spark中有SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver

Cluter Manager:指的是在集群上获取资源的外部服务

Worker: 集群中任何可以运行Application代码的节点,在Standalone模式中指的是通过slave文件配置的Worker节点,在Spark on Yarn模式下就是NoteManager节点

Task: 被送到某个Executor上的工作单元,但hadoopMR中的MapTask和ReduceTask概念一样,是运行Application的基本单位,多个Task组成一个Stage,而Task的调度和管理等是由TaskScheduler负责

Job=多个stage,Stage=多个同种task, Task分为ShuffleMapTask和ResultTask,Dependency分为ShuffleDependency和NarrowDependency

我个人的理解:application就是spark程序,包括main函数(实现Driver功能,统筹管理代码的执行,相当于领导可以进行任务分配和监督)和executor功能的进程(负责原材料的搬运和储存,处理,到数据所在的结点进行操作)。

RDD

全称是Resilient Distributed DataSet,弹性分布式数据集

Spark所定义的一种抽象数据类型

是对Spark中一个只读数据集合的逻辑描述

封装了Spark中数据集合的分区列表、分区在集群中的位置、与其他RDD的衍生关系以及对数据集合的相关操作等信息,但并不包含数据集合中的具体数据

只能通过来自HDFS、Hbase等数据源的数据进行创建或者通过对其他RDD进行计算得到

RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后衍生血缘关系

RDD通过记录自己与其它RDD之间的血缘依赖关系,在部分分区数据丢失时,通过重新计算来恢复丢失的分区

转换操作(例如map,与MapReduce中相同)

转换操作是由一个RDD经过操作得到一个新的RDD。

这类操作在Spark中都是惰性的,也就是说Spark在碰到这类操作并不会立即执行。但新生成的RDD会记录转换的相关信息

动作操作(例如reduce,与MapReduce中不同,是对RDD的连续计算)

动作操作一般用于向Driver进程返回结果或者写入结果到文件中

这类操作会触发Spark中的一次Job作业的提交。

当碰到动作操作时,Spark会根据前面记住的RDD转换过程以及RDD之间衍生关系,建立RDD 有向无环图DAG,然后将DAG划分为不同的阶段,产生具体的任务集合,并将具体的任务分发给不同的Executor去执行

并不是所有的RDD都可以以流水线形式一次在同一结点执行。符合窄依赖的才行(指父RDD的每一个分区最多被一个子RDD的分区所用);符合宽依赖(指子RDD的分区依赖于父RDD的多个分区或所有分区)的要等待所有的父RDD所有分区执行完毕。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐风797

hadoop所有安装包

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值