当前位置: 首页 > news >正文

Spark streaming的执行流程

http://www.cnblogs.com/shenh062326/p/3946341.html  其实流程是从这里转载下来的,我只是在流程叙述中做了一下的标注。 当然为了自己能记住的更清楚,我没有直接copy而是打出来的。

 

 

1、客户端提交作业后,启动Driver,Driver是Spark作业的Master(也就是通过Driver来启动Receiver,定时去启动任务的处理,注意的是,驱动启动任务会受前一个任务执行的影响。也就是前一个任务没有执行完成后,是不会启动后边的任务的。  所以,注意你的streaming的执行时间,绝对不要超过Recive数据的时间)

2、每个作业包含多个Executor,每个Executor以线程的方式运行task,Spark Streaming至少包含一个Receiver task。(一个Executor就是一个spark进程,在yarn中就是一个container,这个大家应该知道。然后Receiver task是在driver中创建的,我理解一个Receiver是运行在一个Executor中的。然后如果想要创建多个Receiver,那么需要大概这样做(1 to 10).map(_.createStream....),这样就能创建10个receiver task啦。 注意这个数量当然不能超过你的结点数量啦。   还有个问题,通常使用kafka比较合适,因为kafka是stream向kafka来poll数据。而他妈的flume默认只支持pull,如果想支持poll,那需要定制sink,那真是太恶心了。)

3、Receiver接收数据后生成Block,并把BlockId汇报给Driver,然后备份到另外一个Executor上。(默认情况下接受数据是200毫秒生成一个block,我理解一个block应该是一个partition?这个还不确定,需要对照源代码看一下;然后会把生成的Block随机扔到不同的Executor,同时,driver去派发任务时,也会找到就近的Executor。我理解,节点中的所有executor都应该会有数据才对)

4、ReceiverTracker维护Receiver汇报的BlockId。(这个ReceiverTracker应该是维护在Driver中,Driver会根据维护的这些数据块进行任务的派发)

5、Driver定时生成JobGenerator,根据DStream的关系生成逻辑RDD,然后创建Jobset,交给JobScheduler。

6、JobScheduler负责调度Jobset,交给DAGScheduler,DAGScheduler根据逻辑RDD,生成相应的Stages,每个stage包含一到多个task。(我记得DAGScheduler会对任务做一层优化)

7、TaskScheduler负责把task调度到Executor上,并维护task的运行状态。

8、当tasks,stages,jobset完成后,单个batch才算完成。

 

相关文章:

  • tpcc-mysql 系列一:安装使用
  • 一个动画 Label (走马观花)
  • 携程网瘫痪超8小时,可能故障原因分析
  • phpcms v9修改栏目描述的多行文本为编辑器方法
  • 黎活明给程序员的忠告(转)
  • C# 添加.DLL 出错的解决方法
  • HihoCoder第十周:后序遍历
  • NPM vs Bower 的区别
  • yii 10.16
  • Android开发模板------自己定义SimpleCursorAdapter的使用
  • 代码html
  • Php5.5新特性 Generators详解
  • js修改后没反应-看看是不是取的缓存
  • 新时代的“网盘模型”——够快云库
  • ADT下载地址整理(转)
  • 【RocksDB】TransactionDB源码分析
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Babel配置的不完全指南
  • docker python 配置
  • swift基础之_对象 实例方法 对象方法。
  • Vue2.x学习三:事件处理生命周期钩子
  • 官方解决所有 npm 全局安装权限问题
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 码农张的Bug人生 - 初来乍到
  • 排序(1):冒泡排序
  • 使用 Docker 部署 Spring Boot项目
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 学习笔记TF060:图像语音结合,看图说话
  • 优秀架构师必须掌握的架构思维
  • Semaphore
  • ​configparser --- 配置文件解析器​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # Maven错误Error executing Maven
  • ( 10 )MySQL中的外键
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (一)基于IDEA的JAVA基础12
  • .NET BackgroundWorker
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 发展历程
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .netcore如何运行环境安装到Linux服务器
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .NET企业级应用架构设计系列之开场白
  • .NET中使用Redis (二)
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [<死锁专题>]
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [2016.7 test.5] T1
  • [AR Foundation] 人脸检测的流程
  • [C++][数据结构][算法]单链式结构的深拷贝