从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飞马网,点击菜单栏飞马直播,即可进行学习。

转载于:https://blog.51cto.com/13654660/2089584

Spark Streaming高级特性在NDCG计算实践相关推荐

  1. Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.Spark Streaming简介 1.1 概述 Spark Streaming 是Sp ...

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

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

  3. sparksteaming---实时流计算Spark Streaming原理介绍

    来源:http://www.cnblogs.com/shishanyuan/p/4747735.html 1.Spark Streaming简介 1.1 概述 Spark Streaming 是Spa ...

  4. Spark详解(十二):Spark Streaming原理和实现

    1 简介 SparkStreaming是Spark核心API的一个扩展,具有高吞吐量和容错能力的实时流数据处理系统,可以对多种数据源(如Kdfka.Flume.Twitter.Zero和TCP 套接字 ...

  5. Spark Streaming 总结

    Spark Streaming 引入 1. Spark Streaming 是什么 基本思想: Dstream: 时间区间: Dstream Graph: 持久化: 离散化: SparkStreami ...

  6. Spark Streaming从Kafka中拉取数据,并且使用过“窗口函数”统计一些流量信息

    一.应用案例场景: 在Spark Streaming中,我们通常计算的是一段时间间隔内的数据.比如http://blog.csdn.net/tototuzuoquan/article/details/ ...

  7. Spark Streaming + Elasticsearch构建App异常监控平台

    本文已发表在<程序员>杂志2016年10月期. 如果在使用App时遇到闪退,你可能会选择卸载App.到应用商店怒斥开发者等方式来表达不满.但开发者也同样感到头疼,因为崩溃可能意味着用户流失 ...

  8. Spark Streaming的玫瑰与刺

    为什么80%的码农都做不了架构师?>>>    玫瑰篇 玫瑰篇主要是说Spark Streaming的优势点. 玫瑰之代码复用 这主要得益于Spark的设计,以及平台的全面性.你写的 ...

  9. Spark Streaming + ES构建美团App异常监控平台

    如果在使用App时遇到闪退,你可能会选择卸载App.到应用商店怒斥开发者等方式来表达不满.但App开发者也同样感到头疼,因为App Crash(崩溃)可能意味着:用户流失.营收下滑.为了降低崩溃率,进 ...

最新文章

  1. 编码练习——Java-数组-API-练习
  2. Android 4 学习(19):Services
  3. 洛谷 P2596 [ZJOI2006]书架 解题报告
  4. 数据新动能:帆软第四届智数大会圆满落幕
  5. VC++工作笔记0003---C++中的explicit关键字
  6. 我是如何从通信成功转型为 Java 软件开发工程师的?
  7. php图片转化为base64,php获取图片转为base64
  8. oracle中rollback的使用方法
  9. 进入地图后分别进行放大缩小操作
  10. 天正电气图例_天正电气设计施工图中常用线路敷设方式
  11. chrome视频无法播放的解决方法(Solve the problem of Google player cannot be played normally)
  12. 自建exchange邮箱有什么成熟的超大附件解决方案?
  13. python查看mac的usb信息_Python实现的读取电脑硬件信息功能示例
  14. NYOJ 71 独木舟上的旅行
  15. 使用JIRA管理项目工单
  16. 神奇的递归!一文读懂函数递归(python实现)
  17. 9A530丨1ADSL丨10%,
  18. opencv鱼眼镜头矫正
  19. Cisco ASA、FTD和HyperFlex HX的漏洞分析复现
  20. Python爬虫之scrapy框架360全网图片爬取

热门文章

  1. Linux环境下段错误的产生原因及调试方法小结
  2. JavaScript改变 HTML 内容
  3. 【看完请推荐】记国庆前的一次码农受骗记
  4. How to Convert Array to ArrayList in Java?
  5. 如何有效地提升 JavaScript 水平?
  6. 我练习项目眼中的 vue
  7. Centos7 安装maven3.5.0和git
  8. 太晚睡不着的落寞与开心(记近况)
  9. LR11之web_reg_find文本检查点的使用
  10. 【原】移动端界面的适配