美文网首页
Spark知识点总结

Spark知识点总结

作者: longLiveData | 来源:发表于2020-07-21 21:32 被阅读0次

    1.什么是Spark?
    Spark 大规模数据处理的快速通用的计算引擎。Spark来源于Hadoop MapReduce,同时Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,内存计算下比hadoop快100倍。

    2.Spark生态系统?

    Spark生态系统

    核心为Spark Core,包含Spark的基本功能及定义了RDD。Spark库都构建在RDD和SparkCore之上;
    上层有Spark SQL和Hive交互;Spark Streaming做实时数据流处理;MLlib常用机器学习算法库;GraphX图操作。
    底层用HDFS做存储

    3. 什么是RDD?属性有哪些?
    答:RDD(Resilient Distributed Dataset)叫做分布式数据集,是spark中最基本的数据抽象,它代表一个不可变,可分区,分区可改变,里面的元素可以并行计算的集合,其中数据优先存储在内存,不够时到磁盘中。
    Resilient:表示弹性的,弹性表示
    Destributed:分布式,可以并行在集群计算
    Dataset:就是一个集合,用于存放数据的

    五大属性:
    1.一个分区列表,RDD中的数据都存储在一个分区列表中
    2.作用在每一个分区中的函数
    3.RDD之前的依赖关系,根据依赖关系实现容错机制
    4.分区函数,可选,针对于kv类型的RDD(必须产生shuffle)才有这个特性,决定数据的来源以及去向
    5.存储位置,可选,数据本地性数据位置最优,优先分配给有数据的节点上进行计算——【移动数据不如移动计算】

    4.Spark的宽窄依赖?
    RDD和它的父RDD的关系有两种类型:窄依赖和宽依赖
    宽依赖:指的是多个子RDD的Partition会依赖同一个父RDD的Partition,关系是一对多,父RDD的一个分区的数据去到子RDD的不同分区里面,会有shuffle的产生
    窄依赖:指的是每一个父RDD的Partition最多被子RDD的一个partition使用,是一对一,也就是父RDD的一个分区去到了子RDD的一个分区中,这个过程没有shuffle产生
    区分的标准就是看父RDD的一个分区的数据的流向,要是流向一个partition的话就是窄依赖,否则就是宽依赖

    5.stage和task概念?如何划分?划分的流程?
    概念:Spark任务会根据RDD之间的依赖关系,形成一个DAG有向无环图,DAG会提交给DAGScheduler,DAGScheduler会把DAG划分相互依赖的多个stage,划分依据就是宽窄依赖,遇到宽依赖就划分stage,何时产生宽依赖就会产生一个新的stage,例如reduceByKey,groupByKey,join的算子,会导致宽依赖的产生;

    划分流程是从最后一个rdd开始往前推,把当前rdd加入到一个stage中,如果遇到窄依赖,就把当前rdd加入本stage中,如果遇到宽依赖,就从宽依赖切开,重新生成一个新的stage

    每个stage包含一个或多个task,这些并行的task组成了stage,然后将这些task以taskSet的形式提交给TaskScheduler运行。每个 stage 里面 task 的数目由该 stage 最后一个 RDD 中的 partition 个数决定。

    6.Spark shuffle?
    Shuffle 过程本质上都是将 Map 端获得的数据使用分区器进行划分,并将数据发送给对应的 Reducer 的过程。shuffle作为处理连接map端和reduce端的枢纽,其shuffle的性能高低直接影响了整个程序的性能和吞吐量。

    map端的shuffle一般为shuffle的Write阶段,reduce端的shuffle一般为shuffle的read阶段。
    map端的Shuffle主要有input数据切分,patition内存缓冲,spill写回磁盘,merge文件合并
    1)input, 根据split输入数据,运行map任务;
    2)patition, 每个map task都有一个内存缓冲区,存储着map的输出结果;
    3)spill, 当缓冲区快满的时候需要将缓冲区的数据以临时文件的方式存放到磁盘;
    4)merge, 当整个map task结束后再对磁盘中这个map task产生的所有临时文件做合并,生成最终的正式输出文件,然后等待reduce task来拉数据。
    Reduce 端的Shuffle简述: Copy拉取数据,Merge合并,Reducer计算,Output输出
    Reduce task在执行之前的工作就是不断地拉取当前job里每个map task的最终结果,然后对从不同地方拉取过来的数据不断地做merge,也最终形成一个文件作为reduce task的输入文件。
    1)Copy过程,拉取数据。
    2)Merge阶段,合并拉取来的小文件
    3)Reducer计算
    4)Output输出计算结果

    Spark的shuffle分为两种实现,分别为HashShuffle和SortShuffle

    HashShuffle又分为普通机制和合并机制,普通机制因为其会产生M * R个数的巨量磁盘小文件而产生大量性能低下的Io操作,从而性能较低,因为其巨量的磁盘小文件还可能导致OOM,HashShuffle的合并机制通过重复利用buffer从而将磁盘小文件的数量降低到Core * R个,但是当Reducer端的并行任务或者是数据分片过多的时候,依然会产生大量的磁盘小文件。

    SortShuffle也分为普通机制和bypass机制,普通机制在内存数据结构(默认为5M)完成排序,会产生2M个磁盘小文件。而当shuffle map task数量小于spark.shuffle.sort.bypassMergeThreshold参数的值,或者算子不是聚合类的shuffle算子(比如reduceByKey)的时候会触发SortShuffle的bypass机制,SortShuffle的bypass机制不会进行排序,极大的提高了其性能

    在Spark 1.2以前,默认的shuffle计算引擎是HashShuffleManager,因为HashShuffleManager会产生大量的磁盘小文件而性能低下,在Spark 1.2以后的版本中,默认的ShuffleManager改成了SortShuffleManager。SortShuffleManager相较于HashShuffleManager来说,有了一定的改进。主要就在于,每个Task在进行shuffle操作时,虽然也会产生较多的临时磁盘文件,但是最后会将所有的临时文件合并(merge)成一个磁盘文件,因此每个Task就只有一个磁盘文件。在下一个stage的shuffle read task拉取自己的数据时,只要根据索引读取每个磁盘文件中的部分数据即可。

    7.Spark数据倾斜
    数据倾斜:通俗解释是各节点上数据分布不均匀,就有的算的快有的慢
    原理解释:Shuffle必须将各个节点上相同的key拉取到某个节点上的一个task来进行处理,比如按照key进行聚合或join等操作。此时如果某个key对应的数据量特别大的话,就会发生数据倾斜。
    解决思路:
    定位位置——groupByKey,reduceByKey,join等shuffle算子易出现问题,或者观察某个stage下task分配的数据量
    解决问题:
    a. 数据角度:如果不重要直接过滤掉;
    b. 并行度:提高shuffle操作的并行度;
    c. 两阶段聚合:局部聚合(大任务划分) + 全局聚合

    8.Spark运行架构?


    Driver:运行Application 的main()函数
    Cluster Manager: Master主节点,控制整个集群中的worker。在YARN模式中为资源管理器
    Worker节点:从节点,负责控制计算节点,启动Executor或者Driver。
    Executor:执行器,是为某个Application运行在worker node上的一个进程

    9. Spark运行基本流程


    1、构建基本的运行环境,由dirver创建一个SparkContext,分配并监控资源使用情况
    2、资源管理器为其分配资源,启动Excutor进程
    3、SparkContext根据RDD 的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成stage,然后提交给底层的taskscheduler处理。ExcutorSparkContext申请taskTaskschedulertask发放给Executor运行并提供应用程序代码
    4、taskExecutor运行把结果反馈给TaskScheduler,一层层反馈上去。最后释放资源
    运行架构特点:多线程运行、运行过程与资源管理器无关、Task采用了数据本地性和推测执行来优化。

    相关文章

      网友评论

          本文标题:Spark知识点总结

          本文链接:https://www.haomeiwen.com/subject/ppbwkktx.html