Spark Streaming揭秘 Day18

空RDD判断及程序中止机制

空RDD的处理

从API我们可以知道在SparkStreaming中,对于RDD的操作一般都是在foreachRDD和Transform方法里。
在使用foreachRDD时,有一个风险,就是如果RDD为空可能会导致计算失败,那么应用如何来判断为空呢?

方法1:使用RDD.count

count方法会直接触发一个Job,代价有些大

方法2:调用RDD.paritions.isEmpty

我们可以看到partitions是一个方法,返回的是一个数组,那么isEmpty实际上就仅仅是对数组长度的判断,非常的高效。

这个判断是否有效?我们进入BlockGenerator,发现如果数据为空时,默认会不生成Block,也就是不会生成partition。所以说,从数据生成机制看,方法2是有效的。

方法3:调用RDD.isEmpty

方法2比较高效,但是也有一个隐患,就是进行shuffle操作,当并行度不变时,可能出现有partition没数据的情况,会导致方法2判断失效。
方法3,这个方法是目前来看最完备的方式。首先,对于数组为空的情况,在第一个条件处进行了短路,否则会执行take操作,来实际判断是否有数,但是take()方法内部还是会有Job生成,所以也会产生一定的效率影响。

Spark Streaming程序的停止

因为SparkStreaming可能由于各种异常情况等发生终止,所以其在设计时,对停止操作提供了一个通用的解决方法。

首先是在启动时,就注册了关闭的方法。

从注册方法的内部,我们看到,实际上是注册了一个jvm的hook方法,来确保一旦发生异常,关闭方法一定会被调用,从而确保了这个方法的强制执行。

下面让我们进入关闭方法内部:
这里出现了一个非常重要的参数,就是stopGracefullyOnShutdown,一旦使用stopGracefully,会将所有接收的数据处理完再执行关闭,建议打开,从而确保数据安全性。

最后,在关闭方法的内部,实际上是调用了jobScheduler来完成。

欲知后事如何,且听下回分解

DT大数据每天晚上20:00YY频道现场授课频道68917580

Spark Streaming揭秘 Day18 空RDD判断及程序中止机制的更多相关文章

  1. Spark Streaming揭秘 Day8 RDD生命周期研究

    Spark Streaming揭秘 Day8 RDD生命周期研究 今天让我们进一步深入SparkStreaming中RDD的运行机制.从完整的生命周期角度来说,有三个问题是需要解决的: RDD到底是怎 ...

  2. Spark Streaming揭秘 Day27 Job产生机制

    Spark Streaming揭秘 Day27 Job产生机制 今天主要讨论一个问题,就是除了DStream action以外,还有什么地方可以产生Job,这会有助于了解Spark Streaming ...

  3. Spark Streaming揭秘 Day25 StreamingContext和JobScheduler启动源码详解

    Spark Streaming揭秘 Day25 StreamingContext和JobScheduler启动源码详解 今天主要理一下StreamingContext的启动过程,其中最为重要的就是Jo ...

  4. Spark Streaming揭秘 Day24 Transformation和action图解

    Spark Streaming揭秘 Day24 Transformation和action图解 今天我们进入SparkStreaming的数据处理,谈一下两个重要的操作Transfromation和a ...

  5. Spark Streaming揭秘 Day5 初步贯通源码

    Spark Streaming揭秘 Day5 初步贯通源码 引子 今天,让我们从Spark Streaming最重要的三个环节出发,让我们通过走读,逐步贯通源码,还记得Day1提到的三个谜团么,让我们 ...

  6. Spark Streaming揭秘 Day35 Spark core思考

    Spark Streaming揭秘 Day35 Spark core思考 Spark上的子框架,都是后来加上去的.都是在Spark core上完成的,所有框架一切的实现最终还是由Spark core来 ...

  7. Spark Streaming揭秘 Day33 checkpoint的使用

    Spark Streaming揭秘 Day33 checkpoint的使用 今天谈下sparkstreaming中,另外一个至关重要的内容Checkpoint. 首先,我们会看下checkpoint的 ...

  8. Spark Streaming揭秘 Day32 WAL框架及实现

    Spark Streaming揭秘 Day32 WAL框架及实现 今天会聚焦于SparkStreaming中非常重要的数据安全机制WAL(预写日志). 设计要点 从本质点说,WAL框架是一个存储系统, ...

  9. Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续)

    Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续) 今天延续昨天的内容,主要对为什么一个处理会分解成多个Job执行进行解析. 让我们跟踪下Job调用过 ...

随机推荐

  1. C语言第四节数据类型、常量、变量

    数据 什么是数据 生活中时时刻刻都在跟数据打交道,比如体重数据.血压数据.股价数据等.在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据.图片数据.视频数据,还有聊QQ时产生的文字数据.用迅 ...

  2. Java字符流和字节流对文件操作

    记得当初自己刚开始学习Java的时候,对Java的IO流这一块特别不明白,所以写了这篇随笔希望能对刚开始学习Java的人有所帮助,也方便以后自己查询.Java的IO流分为字符流(Reader,Writ ...

  3. cocos2d-x之jni使用(对接Android各种sdk)

    游戏弄完了,要发布到各个平台,ios.Android是肯定少不了的,那么本文就来讲讲Android平台对接代理商付费sdk.各渠道.五大运营商.广告.分享.数据统计等等少不了的jni调用,接sdk真是 ...

  4. SSIS 学习(4):变量和表达式【转】

    变量,作为程序员的我们,是一个多么熟悉的概念,从开始学习编程的第一天起,就要了解什么是变量?如何定义一个变量?变量的使用范围等.现在还有必 要在这里大费口舌来讨论“变量”吗?不错,我们今天谈的变量,也 ...

  5. 笔记——Function类型 及其 call、apply方法

    每个函数都是Function类型的实例.函数有三种定义方式和两个内部属性arguments和this. 同时函数也是对象,也有属性和方法.本篇主要其call()和apply()方法 属性 length ...

  6. MAC下查看端口占用并杀死进程

    Eclipse在Run on Server时,Tomcat是开启的,但是报错,显示8080.8005和8009端口被占用 终端输入 查看所有开启的端口 sudo lsof -i -P | grep - ...

  7. linux cd

    cd -回到上一次 操作的目录 cd ..回到上级目录 cd ../../回到上两级目录

  8. [转]"Windows Phone 7程序设计”完全版电子书可以免费下载了

    本文转自:http://www.cnblogs.com/salam/archive/2010/10/29/1864246.html 现在学习Windows Phone 7开发资料十分有限,除了MSDN ...

  9. [改善Java代码]使用静态内部类提高封装性

    建议38: 使用静态内部类提高封装性 Java中的嵌套类(Nested Class)分为两种:静态内部类(也叫静态嵌套类,Static Nested Class)和内部类(Inner Class).内 ...

  10. [未完成]关于Java网络编程总结

    网络的七层结构: 第一层:物理层,网线. 第二层: 数据链路层,交换机.交换机有IP地址.这一层的数据叫做帧 第三层:网络层,数据包方向的定义,路由器.现在也有具有路由功能的交换机.主要将从下层接收到 ...