spark发行版笔记9

时间:2021-08-05 02:57:34

感谢DT大数据梦工厂支持提供技术支持,DT大数据梦工厂专注于Spark发行版定制。

本期概览:

1 Receiver生命全周期

首先,我们找到数据来源的入口,入口如下

spark发行版笔记9
Receiver的设计是极其巧妙的。它的设计非常的出色,很多的地方都值得我们认真的学习。

在深入认识Receiver之前,我们有必要思考一下,假如没有spark,我们可以尝试思考一下,Receiver不断的接受输入进来的数据,如果是我们来做,我们该怎么做?该怎么启动Receiver呢?

我们尝试从以下几个方向来假设思考。

方式如下所示

Receiver是应用程序启动的一部分,我们启动Receiver的时候,Receiver与InputStream是一一对应的。假如我们启动多个Receiver,一个partition有多条一条数据是没有关系的。但是这里有一个问题,从资源调度的角度看,有可能从一台机器上启动多个Receiver,从而导致负载不均衡,同时也有可能导致Receiver启动失败。因为RDD不同的分片对应不同的分片。在不同的机器上有可能Executor失败,导致任务失败。

我们要要求,只要我们的集群在运行,我们的Receiver就要正常运行。如果Receiver不正常运行,就导致整个集群任务不能执行,这是不可以接受的。

因此,我们的这俩个假设都不可行,可行的办法是,Receiver可以失败,但是不能影响Job的正常运行。Receiver失败后一定会容错,最终一定会成功运行,那么我们来看spark官方是怎么做这么一个巧妙的Receiver的容错性能的。

其实我们可以认为InputStreams与Receivers是一一对应的。

spark发行版笔记9

不过,这样可能导致负载不均衡,因为Receiver在不同的机器上。另外Receiver启动可能失败。

至今,我们仍然没有看到启动Receiver的代码,那么启动它的代码在哪呢?

spark发行版笔记9
spark发行版笔记9

spark发行版笔记9

然后接下来就是启动Receiver的方法了

spark发行版笔记9

这个代码进一步证明了一个Receiver只有一个InputStream与之对应。

spark发行版笔记9

spark发行版笔记9
spark发行版笔记9

Driver层面决定在哪个Executor上执行Receiver

spark发行版笔记9
终止一个Receiver,意味着不用重新启动一个JOB

spark发行版笔记9

Receiver start不会重试

spark发行版笔记9

spark发行版笔记9

为了启动Receiver,启动了一个spark作业

spark发行版笔记9
下面一个问题很重要:

这里要启动一个作业,这个作业是每个Receiver都启动一个Job,还是多个Receiver启动一个Job.循环启动每个Receiver,每个Receiver启动一个Job

spark发行版笔记9

spark发行版笔记9

这样,我们就解决了启动一个Task来启动Receiver的缺点,每个Receiver对应一个Job,对应一个任务。最大程度的避免负载不均衡,不会使得Receiver失败使得整个Job不能运行。另外对解决任务倾斜也有一定好处。

重新启动Receiver的时候会将不可用的Executor剪掉

spark发行版笔记9

这里设计得非常的美妙,能保证Receiver无论如何都能成功的启动

spark发行版笔记9

任务一旦失败,框架会装作若无其事的ReStartReceiver,可以说设计得天衣无缝。

线程池的方式并发启动Receiver,因为可能不同的Receiver接收来的数据是没有耦合的

spark发行版笔记9

到现在,我们视乎还有一团乌云没有解开,那就是决定Receiver具体在哪些机器上,代码如下

spark发行版笔记9

最后研究的一行代码:保证Executor活着(默认50个线程,20个并发度),作为一个SparkStreaming应用程序,超过50个数据来源的可能性不大。

spark发行版笔记9

spark发行版笔记9的更多相关文章

  1. spark发行版笔记10

    感谢DT大数据梦工厂支持提供技术支持,DT大数据梦工厂专注于Spark发行版定制. 本期概览: 数据接收全生命周期的思考 大数据处理框架中,最重要的就是性能,性能是排在前面的.其次再考虑其他的.因为数 ...

  2. spark发行版笔记4Spark Streaming事务处理彻底掌握

    Spark Streaming事务处理彻底掌握 感谢DT大数据梦工厂支持提供以下内容,DT大数据梦工厂专注于Spark发行版定制. 内容概括: 1Exactly once 2 输出不重复 1 正如银行 ...

  3. spark发行版笔记11

    本期概览: ReceiverTracker架构设计 消息循环系统 ReceiverTracker具体的实现 Spark Streaming作为Spark Core基础 架构之上的一个应用程序,其中的R ...

  4. spark发行版笔记13

    本期概览: ReceiverTracker架构设计 消息循环系统 ReceiverTracker具体的实现 Spark Streaming作为Spark Core基础 架构之上的一个应用程序,其中的R ...

  5. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  6. 2016年如何选择 Linux 发行版

    不管是在企业级应用还是在消费者领域,2015 对于 Linux 来说都是极其重要的一年.作为一个从 2005 年就开始使用 Linux 的老用户,我有幸见证了 Linux 过去这 10 年里的重大发展 ...

  7. 一款国内好用的Linux发行版?Deepin(深度)Linux

    一款国内好用的Linux发行版?Deepin(深度)Linux 目前来说,要将Linux作为桌面解决方案,对于大多数PC用户来说,当然是不现实的,毕竟Linux的主力用户群体依然是少数极客用户.说白了 ...

  8. Oracle 11g 发行版2的安装,PLSQL_Developer安装 , Oracle数据库安装失败,完全卸载,常用的命令

    Oracle 11g 发行版2的安装 PLSQL_Developer安装 Oracle数据库安装失败,完全卸载oracle11g 常用的命令 Oracle 11g 发行版2的安装 1. 下载 下载地址 ...

  9. Linux发行版Debian操作系统破译密码

    Linux发行版Debian操作系统破译密码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实玩过Linux的小伙伴,对破解服务器密码都应该有所了解,典型的两个代表,我觉得一个是 ...

随机推荐

  1. Android中Service通信(二)——绑定Service进行通信

    一.把输入文本的数据同步到服务的实例(如何执行服务的内部代码) 绑定服务比启动服务更加方便高效,绑定服务中的直接方法调用比Intent作为载体传输更为快捷得多. 1.activity_main.xml ...

  2. 【全面解析DeepZoom 之三】建立DeepZoom应用

    文章出处:http://www.cnblogs.com/zhouyinhui/archive/2008/04/14/1153371.html (周银辉) 与导出整图不一样,你不能这样使用: <M ...

  3. python写的多线程下载工具

    其实只是想练习一下threading的用法. 写完后发现其实下载速度也没增加多少,略显尴尬,汗 # -*- coding: cp936 -*- import urllib2 import thread ...

  4. MYSQL BLOB 字段大小以及个数的限制測试。

    測试结论 mysql版本号 5.1     表类型: innodb, row_format=compact (这是默认的行格式)     插入超过10个blob, blob的数据量非常小(<76 ...

  5. 202&period; Happy Number &lpar;INT&rpar;

    Write an algorithm to determine if a number is "happy". A happy number is a number defined ...

  6. day16 python学习 递归

    初识递归 递归的定义——在一个函数里再调用这个函数本身 现在我们已经大概知道刚刚讲的story函数做了什么,就是在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归. 刚刚我们就已经写了 ...

  7. spring中的context&colon;include-filter和context&colon;exclude-filter的区别

    在Spring 的配置文件中有: <context:component-scan base-package="njupt.dao,njupt.service"> &lt ...

  8. PHP之string之addcslashes&lpar;&rpar;函数使用

    addcslashes (PHP 4, PHP 5, PHP 7) addcslashes - Quote string with slashes in a C style addcslashes - ...

  9. centos 下单独安装mysql

    https://www.cnblogs.com/running-mydream/p/4666094.html https://www.cnblogs.com/lzj0218/p/5724446.htm ...

  10. Dawn 阿里开源前端开发构建工具

    Dawn 取「黎明.破晓」之意,原为「阿里云·业务运营团队」内部的前端构建和工程化工具,现已完全开源.它通过pipeline 和 middleware 将开发过程抽象为相对固定的阶段和有限的操作,简化 ...