设为首页 收藏本站
查看: 1592|回复: 0

[经验分享] Spark Streaming高级特性在NDCG计算实践

[复制链接]

尚未签到

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

以下是本次直播的主要内容:
一.Spark Streaming简介

1.spark是什么?
spark就是一个批处理框架,它具有高性能、生态丰富的优势。
DSC0001.jpg

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

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

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

DSC0003.jpg

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

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

二.Spark Streaming的高级特性

1.Window特性:
DSC0005.jpg

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

DSC0006.jpg



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


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

DSC0008.jpg

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

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

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

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

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

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


那么怎么去实现CheckPoint机制呢?
有以下三个条件:
DSC00013.jpg

DSC00014.jpg

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

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

三.NDCG指标计算

1.NDCG是什么?
DSC00016.jpg

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

DSC00018.jpg

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

开始进行NDCG计算。
DSC00020.jpg

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

我们最常见的容量调节。
DSC00022.jpg

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

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

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


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

DSC00025.jpg





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-669545-1-1.html 上篇帖子: 2017金砖会议之spark 下篇帖子: spark分组取 topN
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表