本期内容:

  1. Spark Streaming Job架构与运行机制

  2. Spark Streaming 容错架构与运行机制

  事实上时间是不存在的,是由人的感官系统感觉时间的存在而已,是一种虚幻的存在,任何时候宇宙中的事情一直在发生着的。

  Spark Streaming好比时间,一直遵循其运行机制和架构在不停的在运行,无论你写多或者少的应用程序都跳不出这个范围。

import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}/*** 使用Scala开发集群运行的Spark 在线黑名单过滤程序* 背景描述:在广告点击计费系统中,我们在线过滤掉黑名单的点击,进而保护广告商的利益,只进行有效的广告点击计费* 或者在防刷评分(或者流量)系统,过滤掉无效的投票或者评分或者流量;* 实现技术:使用transform Api直接基于RDD编程,进行join操作 **/
object OnlineForeachRDD2DB {def main(args: Array[String]){/*** 创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息,* 例如说通过setMaster来设置程序要链接的Spark集群的Master的URL,如果设置* 为local,则代表Spark程序在本地运行,特别适合于机器配置条件非常差(例如* 只有1G的内存)的初学者       **/val conf = new SparkConf() //创建SparkConf对象conf.setAppName("OnlineForeachRDD") //设置应用程序的名称,在程序运行的监控界面可以看到名称//conf.setMaster("spark://Master:7077") //此时,程序在Spark集群conf.setMaster("local[6]")//设置batchDuration时间间隔来控制Job生成的频率并且创建Spark Streaming执行的入口val ssc = new StreamingContext(conf, Seconds(5))val lines = ssc.socketTextStream("Master", 9999)val words = lines.flatMap(_.split(" "))val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _)wordCounts.foreachRDD { rdd =>rdd.foreachPartition { partitionOfRecords => {val connection = ConnectionPool.getConnection()partitionOfRecords.foreach(record => {val sql = "insert into streaming_itemcount(item,count) values('" + record._1 + "'," + record._2 + ")"val stmt = connection.createStatement();stmt.executeUpdate(sql);})ConnectionPool.returnConnection(connection)  // return to the pool for future reuse
      }}}ssc.start()ssc.awaitTermination()}
}

一.   通过案例透视Job执行过程的Spark Streaming机制解析,案例代码如下:

  通过运行以上代码对Job运行机制进行解析:

    1.  首先通过StreamingContext调用start方法,其内部再启动JobScheduler的Start方法,进行消息循环;

    2.  在JobScheduler的start内部会构造JobGenerator和ReceiverTacker;

    3.  然后调用JobGenerator和ReceiverTacker的start方法执行以下操作:

    01.  JobGenerator启动后会不断的根据batchDuration生成一个个的Job ;

    02.  ReceiverTracker启动后首先在Spark Cluster中启动Receiver(其实是在Executor中先启动ReceiverSupervisor);

    4.  在Receiver收到数据后会通过ReceiverSupervisor存储到Executor ;

    5.  同时把数据的Metadata信息发送给Driver中的ReceiverTracker,在ReceiverTracker内部会通过ReceivedBlockTracker来管理接受到的元数据信息;

    6.  每个BatchInterval会产生一个具体的Job,其实这里的Job不是Spark Core中所指的Job,它只是基于DStreamGraph而生成的RDD的DAG而已;

    7.  要想运行Job需要提交给JobScheduler,在JobScheduler中通过线程池的方式找到一个单独的线程来提交Job到集群运行,在线程中基于RDD的Action触发作业的运行;

    8.  由于流处理过程中作业不断生成,为了提升效率,可以使用线程池。同时有可能设置了Job的FAIR公平调度的方式,也需要多线程的支持;

  

 二.  从容错架构的角度透视Spark Streaming 运行机制:

  Spark Streaming是基于DStream的容错机制,DStream是随着时间流逝不断的产生RDD,也就是说DStream是在固定的时间上操作RDD,容错会划分到每一次所形成的RDD。

  Spark Streaming的容错包括 Executor 与  Driver两方面的容错机制 :

  1.  Executor 容错:

    01.  数据接收:分布式方式、wal方式,先写日志再保存数据到Executor

    02. 任务执行安全性 Job基于RDD容错 :

  2. Driver容错 : checkpoint 。

  基于RDD的特性,它的容错机制主要就是两种:

    01.  基于checkpoint;

      在stage之间,是宽依赖,产生了shuffle操作,lineage链条过于复杂和冗长,这时候就需要做checkpoint。

    02.  基于lineage(血统)的容错:

      一般而言,spark选择血统容错,因为对于大规模的数据集,做检查点的成本很高。

      考虑到RDD的依赖关系,每个stage内部都是窄依赖,此时一般基于lineage容错,方便高效。

  总结: stage内部做lineage,stage之间做checkpoint。

转载于:https://www.cnblogs.com/yinpin2011/p/5457197.html

通过案例对 spark streaming 透彻理解三板斧之三:spark streaming运行机制与架构相关推荐

  1. 通过案例对 spark streaming 透彻理解三板斧之一: spark streaming 另类实验

    本期内容 : spark streaming另类在线实验 瞬间理解spark streaming本质 一.  我们最开始将从Spark Streaming入手 为何从Spark Streaming切入 ...

  2. 第3课:SparkStreaming 透彻理解三板斧之三:解密SparkStreaming运行机制和架构进阶之Job和容错...

    本期内容: 解密Spark Streaming Job架构和运行机制 解密Spark Streaming容错架构和运行机制 理解SparkStreaming的Job的整个架构和运行机制对于精通Spar ...

  3. 万字长文,带你彻底理解EF Core 5的运行机制,让你成为团队中的EF Core专家

    目录 1.将EF的ToTraceString移植为EF Core的ToQueryString 2.从EF Core记录详细信息 2.1. 简单的日志记录 2.2.响应EF Core 事件 2.3.使用 ...

  4. 理解JAVA与C的运行机制

    1.java的运行机制 java的编译过程,将java的源程序(扩展名为.java的文件),由java编译程序将java的字节码文件(.class文件)在jvm上运行,机器码有cpu运行, jvm编译 ...

  5. 谈谈spark.sql.shuffle.partitions和 spark.default.parallelism 的区别及spark并行度的理解

    谈谈spark.sql.shuffle.partitions和 spark.default.parallelism 的区别及spark并行度的理解 spark.sql.shuffle.partitio ...

  6. 深入理解GPU硬件架构及运行机制

    目录 一.导言 1.1 为何要了解GPU? 1.2 内容要点 1.3 带着问题阅读 二.GPU概述 2.1 GPU是什么? 2.2 GPU历史 2.2.1 NV GPU发展史 2.2.2 NV GPU ...

  7. spark学习-Spark Streaming初次理解

    1.Spark Streaming 是 Spark Core API 的扩展,它支持弹性的,高吞吐的,容错的实时数据流的处理.数据可以通过多种数据源获取,例如 Kafka,Flume,Kinesis ...

  8. 通过案例对SparkStreaming透彻理解-3

    2019独角兽企业重金招聘Python工程师标准>>> 本期内容: 解密Spark Streaming Job架构和运行机制 解密Spark Streaming 容错架构和运行机制 ...

  9. 2021年大数据Spark(五十三):Structured Streaming Deduplication

    目录 Streaming Deduplication 介绍 需求 ​​​​​​​代码演示 Streaming Deduplication 介绍 在实时流式应用中,最典型的应用场景:网站UV统计. 1: ...

最新文章

  1. HALCON双目三维重建实验
  2. myeclipse 2019中文版
  3. centos 使用 beyond compare 对比工具
  4. erp 弹不出oracle,ORACLE ERP系统经常出现的问题及解决办法
  5. springMVC整合swagger(亲自试验完全可用)
  6. python 控制 cmd 命令行颜色
  7. java 图片操作_Java对图片的操作
  8. Ubuntu 小白起步
  9. Computer:Todesk(远程控制软件)的简介、安装、使用方法之详细攻略
  10. 手把手教你架构3D引擎高级篇系列八
  11. 中国生物农药行业需求态势及“十四五”前景规划报告(2022-2027年)
  12. IntelliJ IDEA 在使用manven后的纠结(每次修改代码都要重启tomcat才能看效果吗?),请各位大侠来看看问题
  13. getch.h与走迷宫推箱子的简单实现
  14. MATLAB编写用户登陆界面小结——更改界面左上角图标、输入用户名提醒和输入密码隐藏
  15. python哪家培训
  16. 一位工作七年的Java工程师给毕业生的经验分享
  17. 再高贵的打工人都得在体检报告前低下高贵的头颅
  18. 955 互联网公司白名单来了!这些公司月薪20k,没有996!福利榜国内大厂只有这家!...
  19. excel服务器okr系统,OKR工具能帮企业落地OKR吗?从飞书OKR看专业工具的价值
  20. 几行 Java 代码搞定图片提取文字功能

热门文章

  1. Scala代码案例:100以内的数求和,求出当和第一次大于20的当前数(循环中断机制)
  2. Python3 数字类型转换
  3. Linux vim光标移动命令
  4. MySQL主键唯一键重复插入解决方法
  5. word2003快速排版工具栏_干货分享 | 闲到在家数瓜子?——先把ID排版秘籍学了吧(上)...
  6. Python 把函数视作对象
  7. windows清理图标缓存并重新加载
  8. kiss原则包括什么_和女孩牵手与kiss的具体方法
  9. win32按钮按下不弹起_为什么厨房插座都不装五孔插座了?听电工一说,懊悔没早知道...
  10. python正则表达式操作指南_Python重新正则表达式操作指南