从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. A.Alyona and copybooks

    这题考查思维的全面性. 一开始我直接分类推公式,余数不同分类讨论. AC代码: #include<cstdio> #include<algorithm> using names ...

  2. UVA - 11292 Dragon of Loowater 贪心

    贪心策略:一个直径为X的头颅,应该让雇佣费用满足大于等于X且最小的骑士来砍掉,这样才能使得花费最少. AC代码 #include <cstdio> #include <cmath&g ...

  3. 为什么java局部变量没有初始化就会报错,而成员变量没有初始化就不会报错?

    代码如下 1.局部变量,报错!!! public void test(){ int i; System.out.println(i); } 2.成员变量,输出0 int i; @Test public ...

  4. spring boot actuator 简单使用

    spring boot admin + spring boot actuator + erueka 微服务监控 简单的spring boot actuator 使用 POM <dependenc ...

  5. nginx的环境配置的问题

    在安装好nginx之后,运行nginx,报错: nginx dyld: Library not loaded: /usr/local/lib/libpcre.1.dylib Referenced fr ...

  6. 关于使用srping @RequestParam 容易出错的地方

    大家都知道,在spring中的@RequestParam主要用户传递参数用的,具体的解释就是将请求参数去数据映射到功能处理方法的参数上.其中包括三个参数: value:参数名字,即入参的请求参数名字, ...

  7. 30分钟掌握ES6/ES2015核心内容(上)

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...

  8. QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式

    目录 功能介绍 常见问题 效果图与示例 apk Gradle 依赖 布局文件 自定义属性说明 接口说明 关于我 功能介绍 根据之前公司的产品需求,参考 barcodescanner 改的,希望能帮助到 ...

  9. 规模数据导入高效方式︱将数据快速读入R—readr和readxl包

    本文由雪晴数据网负责翻译整理,原文请参考New packages for reading data into R - fast作者David Smith.转载请注明原文链接http://www.xue ...

  10. 用GA算法设计22个地点之间最短旅程-R语言实现

    数据挖掘入门与实战  公众号: datadw 相关帖子 转载︱案例 基于贪心算法的特征选择 用GA算法设计22个地点之间最短旅程-R语言实现 ----------------------------- ...