一、Hadoop与spark区别

Hadoop虽然已经成为大数据技术的事实标准,但其本身存在很多缺陷。比如,mapreduce计算模型延迟过高,无法实现实时快速计算的需求,只适用于离线批处理,I/O磁盘开销大。

        spark在借鉴mapreduce优点同时,很好解决了mapreduce存在的缺陷:

        1、spark计算也属于mapreduce计算,但不局限于map和reduce操作;

        2、spark提供内计算,中间结果放入内存,提高迭代运算效率;

        3、基于DAG的任务调度执行机制,优于mapreduce调度机制。

二、优点

1、运行速度快; 2、容易使用; 3、通用性; 4、运行模式多样性。

三、运行框架

        spark Core包含spark最基础、核心功能

        在学习spark之前,我们首先要明白以下名词的意思:

  • RDD:弹性分布式数据集
  • DAG:有向无环图,反映RDD之间的依赖关系
  • Executor:运行在工作节点上的一个进程,负责运行任务,并为应用程序存储数据
  • 应用:
  • 任务:运行在Executor上的工作单元
  • 作业:一个作业包含多个RDD以及作用于相应RDD各种操作
  • 阶段:作业的基本调用单位

四、架构

主从架构,即一个master(driver)和若干个worker构成;

        (1)首先为应用构建起基本的运行环境,即由Driver创建一个SparkContext,进行资源的申请、任务的分配和监控

        (2)资源管理器为Executor分配资源,并启动Executor进程

        (3)SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理;Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行,并提供应用程序代码

        (4)Task在Executor上运行,把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源

pyspark连接hadoop集群 pyspark和hadoop_依赖关系

        一个应用由一个driver和若干个作业(worker)组成;

        一个作业由多个阶段构成;

        一个阶段由多个没有shuffle关系的任务构成

五、 RDD     

只读的分区记录集合,不能直接修改,通过转换得到新的RDD。

        在RDD的执行过程中,真正的计算发生在行动操作中,在前面的所有转换,spark只是记录下转换操作应用的一些基础数据集和RDD生成轨迹,不会触发计算。

        

pyspark连接hadoop集群 pyspark和hadoop_依赖关系_02

A、B是两个RDD,转换spark只记录了RDD生成和依赖关系,从而得到DAG图;

动作,生成一个作业,向DAG调度提交作业,触发从起点开始的真正计算。 

优点:惰性调用、管道化、避免同步等待、不需要保存中间结果、每次操作变得简单、高效的容错性、存放的数据可以是JAVA对象

六、RDD之间的依赖关系——窄依赖和宽依赖

        以是否包含shuffle操作作为判断依据:RDD可以分为宽依赖、窄依赖

        对于窄依赖其父RDD与子RDD之间为一对一、多对一关系;反之,对于宽依赖其父RDD与子RDD之间为一对多关系:

     

pyspark连接hadoop集群 pyspark和hadoop_mapreduce_03

窄依赖可以实现“流水线”优化;但宽依赖包含shuffle操作无法实现“流水线”优化。

        Spark通过分析各个RDD的依赖关系生成了DAG,再通过分析各个RDD中的分区之间的依赖关系来决定如何划分Stage,具体划分方法是:

  • 在DAG中进行反向解析,遇到宽依赖就断开
  • 遇到窄依赖就把当前的RDD加入到Stage中
  • 将窄依赖尽量划分在同一个Stage中,可以实现流水线计算