spark运行架构 storm 流数据处理

回顾:spark编程模型几个要素:driver program,输入,transformation,action,缓存,共享变量
RDD :特性:分区,依赖,函数,分区策略(K,V),本地性策略

spark运行架构
Job:包含多个Task组成的并行计算,由Spark action催生
Stage:Job的调动单位,对应于TaskSet
TaskSet:
Task:被送到某个executor的工作单元

  DAGScheduler构建Stage
  纪录哪个RDD或者Stage输出被物化--物化,计算结果复杂
  重新提交shuffle输出丢失的stage
  将Taskset 传给底层调度器
              -spark-cluster taskcheduler
              -yarn-cluster yarnclusetcheduler
              -yarn-client yarnclientclustercheduler

    taskScheduler:
            为每个taskset构建一个tasksetmanager实例管理这个taskset的生命周期
            数据本地性决定每个task最佳位置(process-local,node-local,rock-local and then any)
            提交taskset(一组task)到集群运行并监控
            推测执行,碰到straggle任务(卡住的任务)需要放到别的节点上重试
            出现shuffle输出lost要报告fetch failed错误
        driver->executerbackend:
            driver -> (触发action runjob)sparkcontext->(提交job runjob)DAGScheduler ->(把stage划分成task submittasks)
            taskscheduler->(把task添加到队列reviveOffers)schedulerBackend ->(调度task给指定的executer launchtask)executerbackend
        executerbackend->driver:
            1,任务执行成功status update -> schedulerBackend -(2,,任务执行成功status update ) ->taskScheduler    
             -(3,删除task removeRunningTask)->TaskSet Manager...
    两种task:shuffleMaptask和resultTask,被执行的task多数都是shuffleMaptask
         resultTask --finalStage 所对应任务,返回给driver的是运算结果本身
                    结果足够小,则直接放在directorTaskResult对象内
                    超过特定尺寸(默认10MB)则在executor端会将directTaskResult先序列化,再把序列化结果作为一个block存放在blockManager里,

而后将blockManager返回的blockID放在indirectaskresult对象中返回给driver
shuffleMaptask,返回给DAGScheduler的是一个MapStatus对象,MapStatus对象管理了shuffleMapTask的运算输出结果在shuffleblockManager
里的相关存储信息,而非结果本身,这些存储位置信息将作为下一个Stage的任务的获取输入数据的依据
shuffle的结果patition数目有shuffleDependcy 中的partitioner对象来决定
spark内核将提供一个可拔插的shuffle接口

     更多细节:blockManager,AKKA(消息传递组件),NETTY(网络IO组件)。。。

     例子:
     val lines=ssc.textfile(args(1))
     val words=lines.flatMap(x=>[x.split("")])
     wordCounts=words....


    (多组)        
    hadoopRDD->MapperRDD(String)->FlatMapperRDD(String)->PairRDD->MapPartitionRDD-(一对多)-->ShuffleRDD->MapPartitionsRDD->PairRDDFunction     

storm 流数据处理
解决方案:进程常驻运行,数据在内存中
常用流处理系统:storm,trlent,s4,spark streaming

storm 简介
nimbus 资源分配和任务调度,把任务相关信息写进zookeeper相应目录
supervlsor 接受nimbus分配任务,启动和停止属于自己管理的worker进程
worker 运行具体处理组件逻辑的进程
executer 运行spout/bolt线程
task work中每个spout/bolt线程称为task

    topology storm中运行的实时应用呈现,消息在各个组件间流动形成逻辑上拓扑结构
    spout 在一个topology中产生源数据流的组件,主动
    bolt 在以topology中接受数据然后执行处理的组件,被动

     tuple 消息传递的单元
     stream 源源不断传递的tuple
     stream grouping 消息的partition。。。shuffle,fields,hash
 多语言编程:java,ruby,python,增加其他语言支持,增加一个简单storm通信协议计科
 容错性,确保一个计算一直运行下棋
 水平拓展:计算是在多个线程,进程和服务器之间并行进行的
 快速
 系统可靠性:建立在zookeeper上大量系统运行状态的元信息都序列化在zk上

猜你喜欢

转载自blog.csdn.net/m0_37758017/article/details/78824860