其他分享
首页 > 其他分享> > Spark Streaming高级特性在NDCG计算实践

Spark Streaming高级特性在NDCG计算实践

作者:互联网

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


5604803-7e979c04d0892f98..jpg

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

一.Spark Streaming简介


1.spark是什么?

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


5604803-82f0b1566c10fb8b..jpg

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


2.spark streaming是什么?

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


5604803-5417d03340814ef8..jpg

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



5604803-5a231c88eb55a413..jpg

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


3.WordCount的例子:

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


5604803-e1fdb04874a6c99a..jpg

二.Spark Streaming的高级特性


1.Window特性:


5604803-62d8d96eef43b0a8..jpg

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


5604803-1a774414e329c8cc..jpg



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



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


5604803-f0d41d0fd7cd2ffa..jpg


5604803-c60140d154d3b9d0..jpg

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


5604803-8875e7f91ecf6e25..jpg

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


2.Sql特性:

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


5604803-e286bbc5cf0ae0bd..jpg

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


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


5604803-f519771b573639a3..jpg

4.CheckPoint机制:

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

CheckPoint机制主要有两种:


5604803-c8bbff67772b98d8..jpg


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

有以下三个条件:


5604803-939649501fbfaebf..jpg


5604803-f895609003309498..jpg

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


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


5604803-4fcd757d2ade6fff..jpg

三.NDCG指标计算


1.NDCG是什么?


5604803-82ce81874634f77a..jpg

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


5604803-34298a343e83f0e6..jpg


5604803-af0d93af4709ae51..jpg

2.NDCG在spark streaming实现:

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


5604803-6f3355ff1ace7ef9..jpg

开始进行NDCG计算。


5604803-d3e042e28599edcd..jpg

3.NDCG性能保障:

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


5604803-a9c494612eb9d3ac..jpg

我们最常见的容量调节。


5604803-224db5fd1e011860..jpg

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


5604803-7eb0f968db667e82..jpg

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


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


5604803-ed1f4284ac03192d..jpg

标签:streaming,我们,Streaming,计算,NDCG,Spark,数据,spark
来源: https://blog.csdn.net/weixin_34160277/article/details/87235978