Spark知识点总结

绪论

  Spark 则是加州大学伯克利分校AMP实验室所开源的类Hadoop MapReduce的通用并行框架, 专门用于大数据量下的迭代式计算。是为了跟 Hadoop 配合而开发出来的,不是为了取代 Hadoop, Spark 运算比 Hadoop 的 MapReduce 框架快的原因是因为 Hadoop 在一次 MapReduce 运算之后,会将数据的运算结果从内存写入到磁盘中,第二次 Mapredue 运算时在从磁盘中读取数据,所以其瓶颈在2次运算间的多余 IO 消耗. Spark 则是将数据一直缓存在内存中,直到计算得到最后的结果,再将结果写入到磁盘,所以多次运算的情况下, Spark 是比较快的. 其优化了迭代式工作负载。

  具体区别如下:

Hadoop的局限Spark的改进
抽象层次低,编码难以上手。通过使用RDD的统一抽象,实现数据处理逻辑的代码非常简洁。
只提供Map和Reduce两个操作,欠缺表达力。通过RDD提供了许多转换和动作,实现了很多基本操作,如sort、join等。
一个job只有map和reduce两个阶段,复杂的程序需要大量的job来完成。且job之间的依赖关系需要应用开发者自行管理。一个job可以包含多个RDD的转换操作,只需要在调度时生成多个stage。一个stage中也可以包含多个map操作,只需要map操作所使用的RDD分区保持不变。
处理逻辑隐藏在代码细节中,缺少整体逻辑视图。RDD的转换支持流式API,提供处理逻辑的整体视图。
对迭代式数据的处理性能比较差,reduce与下一步map的中间结果只能存放在HDFS的文件系统中。通过内存缓存数据,可大大提高迭代式计算的性能,内存不足时可溢写到磁盘上。
reduce task需要等所有的map task全部执行完毕才能开始执行。分区相同的转换可以在一个task中以流水线的形式执行。只有分区不同的转换需要shuffle操作。
时延高,只适合批数据处理,对交互式数据处理和实时数据处理支持不够。将流拆成小的batch,提供discretized stream处理流数据


  尊重原创,本文绪论转载自:https://blog.csdn.net/databatman/article/details/53023818

1、Spark简介

 1)、Spark的历史:2012年发布初始版本0.6版本,已经有6年的历史了。
 2)、Spark的创始人:美国加州大学的伯克利分校的AMP实验室。
 3)、Spark比MR快的原因:
   ①Spark是粗粒度的资源调度,资源复用。
   ②Spark支持基于内存迭代,MR不支持。
   ③Spark支持DAG有向无环图 task pipleline。
   ④Spark可以根据不同场景选择不同shuffle,spark shuffle 比MR性能高(sortShuffle)
 4)、AMP数据分析栈:
在这里插入图片描述
    5)、spark的运行模式:local、standalone、yarn、mesos。
    6)、开发Spark的语言:scala、java、python、R。(Scala和Java兼容性和效率都是一样的)

2、RDD(弹性分布式数据集)(重点)

    1)、RDD五大特性:(重点)

         1. RDD是由一系列的Paratition组成的。(partition个数=split切片数 约等于 block数;Spark没有读文件的方法,依赖MR读文件的方法)
         2. RDD提供的每一个算子实际上是作用在每一个Paratition上的。
         3. RDD实际上是有一系列的依赖关系的,依赖于其他的RDD。(计算的容错性;体现了RDD的弹性;父RDD不一定知道子RDD是谁,子RDD一定知道父RDD是谁)
         4. 可选:分区器作用在内部计算逻辑的返回值是kv格式的RDD上。
         5. 可选:RDD会提供一系列的最佳计算位置。(计算找数据)

    2)、算子

         1. taransformation类算子
             map(一对一)、flatMap(一对多)、filter(一对N(0、1))、join、leftouterJoin、rightouterJoin、fullouterJoin、sortBy、sortByKey、gorupBy、groupByKey、reduceBy、reduceByKey、sample、union、mappatition、mappatitionwithindex、zip、zipWithIndex。
         2. action类算子
            count、collect(将task的计算结果拉回到Driver端)、foreach(不会回收所有task计算结果,原理:将用户传入的参数推送到各个节点上去执行,只能去计算节点找结果)、saveAsTextFile(path)、reduce、foreachPatition、take、first。
(查看计算结果的方式:WEBUI、去各个节点的Worker工作目录查看)
         3. 控制类算子
            cache(相当于MEMOORY_ONLY)、
            persist(MEMORY_ONLY、DISK_ONLY、MEMORY_AND_DISK)
            控制类算子注意点:
                1)、控制类算子后不能紧跟action类算子
                2)、缓存单元是partition
                3)、懒执行、需要action类算子触发执行。(如果application中只有一个job,没必要使用控制类算子)

3、Spark在集群中大概运行流程

     1. Driver分发task到节点运行(计算找数据)。
     2. task执行结果拉回到Driver(有可能发生OOM)。
     Driver的作用:
         1)、分发任务到计算节点运行。
         2)、监控task(thread)的运行情况。
         3)、如果task失败,会重新发送(有限制)。
         4)、可以拉回结果到Driver进程。
     结论:Driver进程会和集群频繁通信。

4、提交Application的方式

    1、Client
        提交方式:spark-submit --deploy-mode client --class jarPath args
        特点:Driver进程在客户端节点启动
        适用场景:测试环境
        大概运行流程:
            1)、在Client本地启动Driver进程。
            2)、Driver会向Master为当前Application申请资源。
            3)、Master接收到请求后,会在资源充足的节点上启动Executor进程。
            4)、Driver分发task到Executor执行。
    2、Cluster
        提交方式:spark-submit --deploy-mode cluster --class jarPath args
        特点:每次启动application,Driver进程在随机一台节点启动
        适用场景:生产环境
        大概运行流程:
            1)、客户端执行spark-submit --deploy-mode cluster --class jarPath args命令,启动一个sparksubmit进程。
            2)、为Driver向Master申请资源。Driver进程默认需要1G内存,1core。
            3)、master会随机找一台Worker节点启动Driver进程。
            4)、Driver进程启动成功后,spark-submit进程关闭,然后Driver会向Master为当前Application申请资源。
            5)、Master接收到请求后,会在资源充足的节点上启动Executor进程。
            6)、Driver分发task到Executor执行。

5、搭建及测试集群

  由于Spark的执行效率要比MapReduce快的多,所以我们有必要搭建Spark集群。搭建详细过程请参考我的另一篇博客:Spark集群的搭建及测试

6、Spark的任务调度

  在Spark中一切的任务都是由Driver申请资源,然后在申请到资源的worker节点启动Executor进程。最后Driver将任务分发到这些Executor进程中执行。详情请参考我的另一篇博客:Spark的任务调度

7、Spark的资源调度

  有任务调度自然也会有资源的调度,任务的运行离不开资源。一个Application想要运行,首先要向Master为Driver申请资源,然后Driver向Master为Application申请资源。详情请参考我的另一篇博客:Spark的资源调度

8、Spark的(任务调度+资源调度)整合

  上面虽然分开介绍了任务调度与资源调度。但是资源调度和任务调度在计算机中是密不可分的,详情请参考我的另一篇博客:Spark的调度流程(任务调度+资源调度)

9、Spark Shuffer

  与MapReduce一样,在Spark中也有shuffle。Sparkshuffle包含hashShuffle和sortShuffle。详情请参考我的另一篇博客:Spark Shuffer

10、Spark SQL

  详情请参考我的另一篇博客:Spark SQL

11、Spark案例一(Scala)

  学完了Spark的理论知识,下面介绍一下在代码中如何应用Spark。由于Scala语言编写Spark程序比较简单,这里首先用Scala语言写一个Scala小案例。详情请参考我的另一篇博客:Spark日志分析案例

12、Spark案例二(Java)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值