Spark Streaming高级特性在NDCG计算实践
从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计算实践相关推荐
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.Spark Streaming简介 1.1 概述 Spark Streaming 是Sp ...
- .Spark Streaming(上)--实时流计算Spark Streaming原理介
Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍 http://www.cnblogs.com/shishanyuan/p/474 ...
- sparksteaming---实时流计算Spark Streaming原理介绍
来源:http://www.cnblogs.com/shishanyuan/p/4747735.html 1.Spark Streaming简介 1.1 概述 Spark Streaming 是Spa ...
- Spark详解(十二):Spark Streaming原理和实现
1 简介 SparkStreaming是Spark核心API的一个扩展,具有高吞吐量和容错能力的实时流数据处理系统,可以对多种数据源(如Kdfka.Flume.Twitter.Zero和TCP 套接字 ...
- Spark Streaming 总结
Spark Streaming 引入 1. Spark Streaming 是什么 基本思想: Dstream: 时间区间: Dstream Graph: 持久化: 离散化: SparkStreami ...
- Spark Streaming从Kafka中拉取数据,并且使用过“窗口函数”统计一些流量信息
一.应用案例场景: 在Spark Streaming中,我们通常计算的是一段时间间隔内的数据.比如http://blog.csdn.net/tototuzuoquan/article/details/ ...
- Spark Streaming + Elasticsearch构建App异常监控平台
本文已发表在<程序员>杂志2016年10月期. 如果在使用App时遇到闪退,你可能会选择卸载App.到应用商店怒斥开发者等方式来表达不满.但开发者也同样感到头疼,因为崩溃可能意味着用户流失 ...
- Spark Streaming的玫瑰与刺
为什么80%的码农都做不了架构师?>>> 玫瑰篇 玫瑰篇主要是说Spark Streaming的优势点. 玫瑰之代码复用 这主要得益于Spark的设计,以及平台的全面性.你写的 ...
- Spark Streaming + ES构建美团App异常监控平台
如果在使用App时遇到闪退,你可能会选择卸载App.到应用商店怒斥开发者等方式来表达不满.但App开发者也同样感到头疼,因为App Crash(崩溃)可能意味着:用户流失.营收下滑.为了降低崩溃率,进 ...
最新文章
- 编码练习——Java-数组-API-练习
- Android 4 学习(19):Services
- 洛谷 P2596 [ZJOI2006]书架 解题报告
- 数据新动能:帆软第四届智数大会圆满落幕
- VC++工作笔记0003---C++中的explicit关键字
- 我是如何从通信成功转型为 Java 软件开发工程师的?
- php图片转化为base64,php获取图片转为base64
- oracle中rollback的使用方法
- 进入地图后分别进行放大缩小操作
- 天正电气图例_天正电气设计施工图中常用线路敷设方式
- chrome视频无法播放的解决方法(Solve the problem of Google player cannot be played normally)
- 自建exchange邮箱有什么成熟的超大附件解决方案?
- python查看mac的usb信息_Python实现的读取电脑硬件信息功能示例
- NYOJ 71 独木舟上的旅行
- 使用JIRA管理项目工单
- 神奇的递归!一文读懂函数递归(python实现)
- 9A530丨1ADSL丨10%,
- opencv鱼眼镜头矫正
- Cisco ASA、FTD和HyperFlex HX的漏洞分析复现
- Python爬虫之scrapy框架360全网图片爬取