从storm到spark streaming,再到flink,流式计算得到长足发展, 依托于spark平台的spark streaming走出了一条自己的路,其借鉴了spark批处理架构,通过批处理方式实现了实时处理框架。为进一步了解spark streaming的相关内容,飞马网于3月20日晚邀请到历任百度大数据的高级工程师—王富平,在线上直播中,王老师针对spark streaming高级特性以及ndcg计算实践进行了分享。

以下是本次直播的主要内容:

一.Spark Streaming简介

1.spark是什么?

spark就是一个批处理框架,它具有高性能、生态丰富的优势。

在没有spark之前,我们是怎么做大数据分析的呢?其实在没有spark之前,我们用的是基于Hadoop的MapReduce框架来做数据分析。时至今日,传统的MapReduce任务并没有完全退出市场,在一些数据量非常大的场景下,MapReduce表现地还是相当稳定的。

2.spark streaming是什么?

spark streaming是按时间对数据进行分批处理的框架,.spark平台带来的优势,使得spark streaming开发简单、广泛使用。

spark streaming的实现方式是基于spark的批处理理念,因此它可以直接使用spark平台提供的工具组件。

通过上面这张图,我们可以把spark streaming的输入当成一个数据流,通过时间将数据进行分批处理,分批时间根据我们自己的业务情况而定。

3.WordCount的例子:

下面举一个WordCount的例子,我们可以看到,短短几行代码,就实现了一个WordCount。由于spark平台与Hadoop是直接打通的,我们可以很方便地把数据保存到HDFS或数据库里,只需要运维一套spark平台,我们就可以既做实时任务,又做离线分析任务,比较方便。

二.Spark Streaming的高级特性

1.Window特性:

基于上面简单的WordCount例子,我们升级一下,假设我们需要每十秒钟统计一次单词在前一分钟内出现次数,这个需求不是简单的WordCount能够实现的,这时候,我们就要使用到spark streaming提供的Window机制。

关于spark streaming的Window特性,有三个参数需要注意:Batch Internal(分批时间间隔)、Window width(窗口长度)、Sliding Internal(窗口滑动间隔)。根据刚才的需求,窗口长度是60s,窗口滑动间隔是10s,分批时间间隔是1s,这里需要注意,分批时间间隔必须能被窗口长度和窗口滑动间隔整除。

通过讲述,或许你感觉Window特性有些复杂,但实际上,创建一个窗口的流是非常简单的,下面的两张图,是关于创建Window数据流和Window相关计算函数的,可以简单了解下。

下面这张图片是计算30s窗口期内的请求失败率。我们看一下它的参数,窗口时间设置为30s,滑动间隔是2s。整个代码非常简单,只需要多加一行代码,就能实现窗口流,之后这个流就能做一些正常计算。

我们简单读一下这个函数,首先创建一个窗口流,之后在任务里面计算失败的条数,用它来除以总条数,就得到请求失败率。

2.Sql特性:

spark streaming的第二个特性就是Sql特性,spark streaming把数据封装成DataFrame之后,天然就可以使用spark sql特性。

想完整使用写sql的方式,我们首先要注册临时表。我们注册的临时表还可以与我们建的多张临时表做join关联,比较实用。

使用sql,自定义函数会给我们带来很多扩展性,定义UDF有两种方式:加载jar包UDF和动态定义UDF。

4.CheckPoint机制:

Spark通过使用CheckPoint保存处理状态甚至当前处理数据,一旦任务失败后,可以利用CheckPoint对数据进行恢复。我们做数据处理,数据可靠性是很重要的,必须保证数据不丢失,Spark的CheckPoint机制就是帮助我们保障数据安全的。

CheckPoint机制主要有两种:

那么怎么去实现CheckPoint机制呢?

有以下三个条件:

我们来对比一下有WAL和无WAL的两张图。实际上有WAL,它首先会把数据先存到HDFS,然后对任务逻辑进行备份,再去执行处理,任务失败时,它会根据CheckPoint的数据,去读HDFS保存的数据,进行任务恢复。但实际上,这样会有缺点,一方面是降低了receivers的性能,另一方面它只能保证At-Least-Once,不能保证exactly-once。

针对WAL的缺点,spark streaming对kafka进行优化,提供了Kafka direct API,性能大大提升。

三.NDCG指标计算

1.NDCG是什么?

下面两张图片,是NDCG计算的具体例子。

2.NDCG在spark streaming实现:

我们如何用spark streaming实现NDCG计算呢?首先我们做了一个数据调研。

开始进行NDCG计算。

3.NDCG性能保障:

我们开发一个数据任务,不是静态工作,要保障数据的稳定性,根据数据的情况,做一个容量预估,以保证数据的性能。容量预估是一个必不可少的步骤。

我们最常见的容量调节。

在NDCG指标计算过程中,我们还会遇到一些问题,就是NDCG支持四个维度的组合计算,维度组合较多、较复杂。

这时候,多维分析就要借助于我们的OLAP引擎,目前我们使用的是Druid。

以上三大部分,就是这次线上直播分享的主要内容,在最后,王老师还针对大家提出的问题进行了一一解答,都有些什么问题呢?我们一起来看一下。

1.每间隔5s读一批数据,需要遍历每天数据进行各种计算分析,计算的结果还需要缓存作为下一次计算的参考,怎么实现?

王老师:这是一个实时任务,需要存储状态数据的话,有几种实现方式,第一个是spark streaming有保存状态数据的机制,第二种方式是,你可以把状态数据保存在一些KV数据库里,比如说spark等,也可以通过这种方式自己实现,不管哪条路,关键在于怎么实现。

2.学spark有推荐的上船方式么?

王老师:大家不要把spark看得那么神奇,java8里面提供的stream处理方式相关知识,和写spark没有多大区别,原理都是一样的,你理解了java8怎么写、stream处理的各种方法和计算逻辑,那么你就能理解spark streaming里的各种计算逻辑,spark streaming唯一高大上的就是它做的分布式。

3. spark streaming 将来最有可能被什么技术取代?

王老师:每个平台都有各自的优缺点,目前来看,虽然Flink比较火,但是Storm依然存在,Spark也有自己所适合的场景,Flink也有它本身先进的机制,所以说,各有优势。

最后,王老师向大家推荐了关于scala最经典的一本书—《programming in scala》,本次针对 spark streaming的直播内容简明且有针对性,相信你一定收获颇多。想了解更多更详细内容的小伙伴们,可以关注服务号:FMI飞马网,点击菜单栏飞马直播,即可进行学习。

Spark Streaming高级特性在NDCG计算实践的更多相关文章

  1. 苏宁基于Spark Streaming的实时日志分析系统实践 Spark Streaming 在数据平台日志解析功能的应用

    https://mp.weixin.qq.com/s/KPTM02-ICt72_7ZdRZIHBA 苏宁基于Spark Streaming的实时日志分析系统实践 原创: AI+落地实践 AI前线 20 ...

  2. 5. Spark Streaming高级解析

    5.1 DStreamGraph对象分析 在Spark Streaming中,DStreamGraph是一个非常重要的组件,主要用来: 1. 通过成员inputStreams持有Spark Strea ...

  3. Update(Stage4):Spark Streaming原理_运行过程_高级特性

    Spark Streaming 导读 介绍 入门 原理 操作 Table of Contents 1. Spark Streaming 介绍 2. Spark Streaming 入门 2. 原理 3 ...

  4. (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)

    本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...

  5. .Spark Streaming(上)--实时流计算Spark Streaming原理介

    Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍 http://www.cnblogs.com/shishanyuan/p/474 ...

  6. 实时流计算Spark Streaming原理介绍

    1.Spark Streaming简介 1.1 概述 Spark Streaming 是Spark核心API的一个扩展,可以实现高吞吐量的.具备容错机制的实时流数据的处理.支持从多种数据源获取数据,包 ...

  7. Apache 流框架 Flink,Spark Streaming,Storm对比分析(二)

    本文由  网易云发布. 本文内容接上一篇Apache 流框架 Flink,Spark Streaming,Storm对比分析(一) 2.Spark Streaming架构及特性分析 2.1 基本架构 ...

  8. spark streaming的理解和应用

    1.Spark Streaming简介 官方网站解释:http://spark.apache.org/docs/latest/streaming-programming-guide.html 该博客转 ...

  9. Spark Streaming之一:整体介绍

    提到Spark Streaming,我们不得不说一下BDAS(Berkeley Data Analytics Stack),这个伯克利大学提出的关于数据分析的软件栈.从它的视角来看,目前的大数据处理可 ...

随机推荐

  1. 我的Java设计模式-原型模式

    "不好意思,我是卧底!哇哈哈哈~"额......自从写了上一篇的观察者模式,就一直沉浸在这个角色当中,无法自拨.昨晚在看<使徒行者2>,有一集说到啊炮仗哥印钞票,我去, ...

  2. Nashorn——在JDK 8中融合Java与JavaScript之力

      从JDK 6开始,Java就已经捆绑了JavaScript引擎,该引擎基于Mozilla的Rhino.该特性允许开发人员将JavaScript代码嵌入到Java中,甚至从嵌入的JavaScript ...

  3. 【mongodb系统学习之四】查看mongodb进程

    四.查看mongodb进程(可以配合启动和关闭使用): 1).方法一:直接查看mongodb进程是否已经存在(用上面的方式启动后,需要另开一个窗口操作):ps –ef|grep mongodb, 如图 ...

  4. StackExchange.Redis 二次封装

    在NuGet直接搜索StackExchange.Redis,下载引用包: 帮助类: public class RedisUtils { /// <summary> /// redis配置文 ...

  5. php composer的学习之路(一)

    composer的介绍请看这里  http://docs.phpcomposer.com/00-intro.html composer的安装过程我就不介绍了,windows系统下跟其他安装没区别,一直 ...

  6. GridView中使用 jQuery DatePicker (UpdatePanel)

    1.无UpdatePanel   1.代码 <script> $(function () { $('.myDatePickerClass').datepicker({ dateFormat ...

  7. 结合实例分析Android MVP的实现

    最近阅读项目的源码,发现项目中有MVP的痕迹,但是自己却不能很好地理解相关的代码实现逻辑.主要原因是自己对于MVP的理解过于概念话,还没有真正操作过.本文打算分析一个MVP的简单实例,帮助自己更好的理 ...

  8. [Luogu2617]Dynamic Ranking

    题面戳这 类似算法总结 1.静态整体Kth 滑稽吧...sort一遍就好了. 时间复杂度\(O(nlogn)\) 空间复杂度\(O(n)\) 2.动态整体Kth 离散化后开一棵权值线段树,每个位置的值 ...

  9. 【BZOJ3262】陌上花开(CDQ分治)

    [BZOJ3262]陌上花开(CDQ分治) 题解 原来放过这道题目,题面在这里 树套树的做法也请点上面 这回用CDQ分治做的 其实也很简单, 对于第一维排序之后 显然只有前面的对后面的才会产生贡献 那 ...

  10. [JSOI2004]平衡点

    题面在这里 题意 ...见链接吧 sol 在此发一篇模拟退火的题解 不得不说luogu的数据真是太良心啦 一句话解释模拟退火:在一个慢慢缩小的范围内随机状态寻找最优解,当转移状态更优时直接接受,当当前 ...