zoukankan      html  css  js  c++  java
  • spark(3)

    0.spark

    --------------------------------------------

      transformation

      map

      filter

      repartition

    spark核心API

    ----------------------------------------------------

      [SparkContext]

        连接到spark集群上的入口点

     [HadoopRDD]

        读取hadoop上的数据

     [MapPartitionsRDD]

        针对父RDD的每个分区提供了函数,构成的新类型的RDD

     [PairRDDFunctions]

        对偶RDD函数类

        可用于KV类型RDD的附加函数。可以通过隐式转化

     [ShuffleRDD]

        从shuffle中计算结果的RDD

     [RDD]  

        弹性分布式数据集

        不可变的数据分区集合

        基本操作:map  filter

        分区列表         //数据

        应用给每个切片的计算函数  //行为

        到其他RDD的依赖列表    //依赖关系

        (可选)针对kv类型的RDD分区类

        (可选)首选位置列表

      [DAGScheduler]

          高级调度器层面,实现按照阶段(stage),shuffle按照。

        对每个JOB的各阶段计算有向无环图(DAG),并且跟踪RDD和每个阶段的输出

        找出最小的调度运行作业,将Stage对象以TaskSet的方式提交给底层的调度器

        底层调度器要实现TaskScheduler接口,进而在cluster上运行job  

        TaskSet已经包含了全部的单独的task,这些Task都能够基于cluster的数据进行相应的正确的运行  

      Stage通过在需要shuffle的边界处将RDD打碎,来创建stage对象。

      具有"窄依赖"的RDD操作(比如map/filter)被管道化至另一个taskset中。而具有shuffle依赖的操作则包含多个Stage(一个进行输入,另一个进行输出)

      最后,每个stage都有一个针对其他stage的shuffle依赖,可以计算多个操作。

      

      DAG调度器检测首选位置运行task,通过基于当前缓存状态,并穿肚给底层的task调度器来进行实现,根据shuffle的输出是否丢失处理故障问题

      不是由stage内因为丢失文件而引发的故障有task调度处理,在取消整个stage之前,task会进行少量次数的重试操作

      【术语介绍】

        [job]提交给调度器的顶层工作项目,由ActiveJob表示,是Stage集合。

        [Stage]是task的集合,计算job的中间结果,同一个RDD的每个分区都会应用相同的计算函数。

            在shuffle的边界进行隔离(因此才引入了隔断,需要上一个stage完成之后,才能得到输出结果)

            有两种类型的stage:ResultStage;ShuffleMapStage:对shuffle输出文件的写操作,stage通常可以在job之间进行共享,可以跨越多个job实现共享

            如果job重用了同一个rdd的话,stage通常可以跨越多个job实现共享。

            并行任务的集合,都会计算同一函数,所有task有着同样的shuffle依赖

        [Task]单独的工作单元,发送给每一台主机

        [Cache tracking]DAG调度器可以找出那些RDD被缓存,避免不必要的计算,同时也会记住哪些shufflemap已经输出了结果,可以避免map端shuffle结果重复处理

        [Preferred localtions]

          dag调度器根据rdd的首选位置属性计算task在哪里运行

        [cleanup]运行的作业如果完成就会清除数据结构避免内存泄漏,主要针对耗时应用

        为了容错,同一阶段可能会运行多次 ,称之为"attemp",如果task调度器报告了一个故障,该故障是由于上一个stage丢失输出文件而导致的,DAG调度就会重新提交丢失的stage;DAG调度器会等待一段时间,看其他节点的任务是否失败,然后对丢失的stage重新提交ticketStage

        [ActiveJob]:在Dag调度器中运行job,作业分为两种类型:(1)result job,计算ResultStage来执行action;(2)map-stage job,为shuffleMapStage计算输出结果共下游stage使用,主要使用finalStage字段进行类型的划分;job只跟踪客户端提交的leaf stage,通过调用DAG调度器的submit job或者submitMapStage()方法来实现

    Action发生之后,spark流程

    ------------------------------------

      

      

  • 相关阅读:
    用nodejs的express框架在本机快速搭建一台服务器
    Python版求数组的最大连续区间
    简洁的python测试框架——Croner
    中国有嘻哈——押韵机器人
    服务端测试环境hosts配置检查脚本
    手机客户端软件测试用例设计模板
    【Tomcat】压力测试和优化
    【Tomcat】详解tomcat的连接数与线程池
    【RabbitMQ】2、心得总结,资料汇总
    【高并发解决方案】7、HAProxy安装和配置
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/9718248.html
Copyright © 2011-2022 走看看