Spark Streaming高級特性在NDCG計算實踐

從storm到spark streaming,再到flink,流式計算得到長足發展, 依托于spark平臺的spark streaming走出了一條自己的路,其借鑒了spark批處理架構,通過批處理方式實現了實時處理框架。為進一步了解spark streaming的相關內容,飛馬網于3月20日晚邀請到歷任百度大數據的高級工程師—王富平,在線上直播中,王老師針對spark streaming高級特性以及ndcg計算實踐進行了分享。

幻燈片0.jpg?

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

一.Spark Streaming簡介

?

1.spark是什么?

spark就是一個批處理框架,它具有高性能、生態豐富的優勢。

幻燈片1.jpg?

在沒有spark之前,我們是怎么做大數據分析的呢?其實在沒有spark之前,我們用的是基于Hadoop的MapReduce框架來做數據分析。時至今日,傳統的MapReduce任務并沒有完全退出市場,在一些數據量非常大的場景下,MapReduce表現地還是相當穩定的。

?

2.spark streaming是什么?

spark streaming是按時間對數據進行分批處理的框架,.spark平臺帶來的優勢,使得spark streaming開發簡單、廣泛使用。

幻燈片2.jpg?

spark streaming的實現方式是基于spark的批處理理念,因此它可以直接使用spark平臺提供的工具組件。

?

幻燈片3.jpg?

通過上面這張圖,我們可以把spark streaming的輸入當成一個數據流,通過時間將數據進行分批處理,分批時間根據我們自己的業務情況而定。

?

3.WordCount的例子:

下面舉一個WordCount的例子,我們可以看到,短短幾行代碼,就實現了一個WordCount。由于spark平臺與Hadoop是直接打通的,我們可以很方便地把數據保存到HDFS或數據庫里,只需要運維一套spark平臺,我們就可以既做實時任務,又做離線分析任務,比較方便。

幻燈片4.jpg?

二.Spark Streaming的高級特性

?

1.Window特性:

幻燈片5.jpg?

基于上面簡單的WordCount例子,我們升級一下,假設我們需要每十秒鐘統計一次單詞在前一分鐘內出現次數,這個需求不是簡單的WordCount能夠實現的,這時候,我們就要使用到spark streaming提供的Window機制。

?

幻燈片6.jpg

?

?

關于spark streaming的Window特性,有三個參數需要注意:Batch Internal(分批時間間隔)、Window width(窗口長度)、Sliding Internal(窗口滑動間隔)。根據剛才的需求,窗口長度是60s,窗口滑動間隔是10s,分批時間間隔是1s,這里需要注意,分批時間間隔必須能被窗口長度和窗口滑動間隔整除。

?

??

通過講述,或許你感覺Window特性有些復雜,但實際上,創建一個窗口的流是非常簡單的,下面的兩張圖,是關于創建Window數據流和Window相關計算函數的,可以簡單了解下。

幻燈片7.jpg?

幻燈片8.jpg?

下面這張圖片是計算30s窗口期內的請求失敗率。我們看一下它的參數,窗口時間設置為30s,滑動間隔是2s。整個代碼非常簡單,只需要多加一行代碼,就能實現窗口流,之后這個流就能做一些正常計算。

幻燈片9.jpg?

我們簡單讀一下這個函數,首先創建一個窗口流,之后在任務里面計算失敗的條數,用它來除以總條數,就得到請求失敗率。

?

2.Sql特性:

spark streaming的第二個特性就是Sql特性,spark streaming把數據封裝成DataFrame之后,天然就可以使用spark sql特性。

幻燈片10.jpg?

想完整使用寫sql的方式,我們首先要注冊臨時表。我們注冊的臨時表還可以與我們建的多張臨時表做join關聯,比較實用。

?

使用sql,自定義函數會給我們帶來很多擴展性,定義UDF有兩種方式:加載jar包UDF和動態定義UDF。

幻燈片11.jpg?

4.CheckPoint機制:

Spark通過使用CheckPoint保存處理狀態甚至當前處理數據,一旦任務失敗后,可以利用CheckPoint對數據進行恢復。我們做數據處理,數據可靠性是很重要的,必須保證數據不丟失,Spark的CheckPoint機制就是幫助我們保障數據安全的。

CheckPoint機制主要有兩種:

幻燈片12.jpg?

?

那么怎么去實現CheckPoint機制呢?

有以下三個條件:

幻燈片13.jpg?

幻燈片14.jpg?

我們來對比一下有WAL和無WAL的兩張圖。實際上有WAL,它首先會把數據先存到HDFS,然后對任務邏輯進行備份,再去執行處理,任務失敗時,它會根據CheckPoint的數據,去讀HDFS保存的數據,進行任務恢復。但實際上,這樣會有缺點,一方面是降低了receivers的性能,另一方面它只能保證At-Least-Once,不能保證exactly-once。

?

針對WAL的缺點,spark streaming對kafka進行優化,提供了Kafka direct API,性能大大提升。

幻燈片15.jpg?

三.NDCG指標計算

?

1.NDCG是什么?

幻燈片16.jpg?

下面兩張圖片,是NDCG計算的具體例子。

幻燈片17.jpg?

幻燈片18.jpg?

2.NDCG在spark streaming實現:

我們如何用spark streaming實現NDCG計算呢?首先我們做了一個數據調研。

幻燈片19.jpg?

開始進行NDCG計算。

幻燈片20.jpg?

3.NDCG性能保障:

我們開發一個數據任務,不是靜態工作,要保障數據的穩定性,根據數據的情況,做一個容量預估,以保證數據的性能。容量預估是一個必不可少的步驟。

幻燈片21.jpg?

我們最常見的容量調節。

幻燈片22.jpg?

在NDCG指標計算過程中,我們還會遇到一些問題,就是NDCG支持四個維度的組合計算,維度組合較多、較復雜。

幻燈片23.jpg?

這時候,多維分析就要借助于我們的OLAP引擎,目前我們使用的是Druid。

幻燈片24.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飛馬網,點擊菜單欄飛馬直播,即可進行學習。

?

服務號.jpg

轉載于:https://www.cnblogs.com/lsyz/p/8619635.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280890.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280890.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280890.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mac觸控板 鼠標中鍵_如何在Windows 10中停止意外的觸控板點擊(以及其他鼠標增強功能)...

mac觸控板 鼠標中鍵It’s been the bane of laptop users for years: you’re typing away, your palm brushes the trackpad, and the accidental click inserts the cursor in the middle of the text completely screwing things up. Banish the frustration of accidental …

.Net 7的AOT原理簡析

楔子上節了解AOT和CLR的區別,這節來稍微深入看下AOT的原理是什么?原理其實 AOT 的原理非常簡單,為啥呢?因為微軟又回歸了傳統,搞起來Obj目標文件和Link連接器。當年的VC就是這么弄的。AOT的編譯實際上是圍繞這兩個東西…

垂直居中及容器內圖片垂直居中的CSS解決方法

方法一: <style type"text/css"> <!-- * {margin:0;padding:0} div { width:500px; height:500px; border:1px solid #666; overflow:hidden; position:relative; display:table-cell; text-align:center; vertical-align:middle } div p …

Django04: ORM配置與使用MySQL數據庫

配置&#xff1a; 1.手動創建數據庫。 create database testDB 2. 在Django項目的settings.py文件中&#xff0c;配置數據庫連接信息&#xff1a; DATABASES {"default": {"ENGINE": "django.db.backends.mysql","NAME": "你…

推薦一款 .NET 編寫的 嵌入式平臺的開源仿真器

Renode 是一個開發框架&#xff0c;通過讓你模擬物理硬件系統來加速物聯網和嵌入式系統開發。Renode 可以模擬 Cortex-M、RISC-V 等微控制器&#xff0c;不僅可以模擬 CPU指令&#xff0c;還可以模擬外設&#xff0c;甚至可以模擬板載的外設。更強的是&#xff0c;它可以讓你在…

Android Bluetooth模塊學習筆記

一、藍牙基礎知識 1.藍牙&#xff08; Bluetooth &#xff09;是一種無線技術標準&#xff0c;可實現固定設備、移動設備和樓宇個人域網之間的短距離數據交換。藍牙基于設備低成本的收發器芯片&#xff0c;傳輸距離近、低功耗。 2.微波頻段&#xff1a;使用2.402GGHz到2.480GHz…

sql刪除無人借閱的書_查找,下載,借閱,租賃和購買電子書的最佳網站

sql刪除無人借閱的書So, you’ve got yourself an eBook reader, smartphone, tablet, or other portable device and you want to put some eBooks on it to take with you. There are many options for obtaining free eBooks as well as purchasing, borrowing, or even ren…

django05:ORM示例--person 增刪改查

建立數據庫連接后&#xff0c;演示代碼 見我的資源 https://download.csdn.net/my

C#如何用正則表達式截取https和帶端口的域名

如題。現有代碼如下。只能截取 http://www.baidu.com的 www.baidu.com當域名為https://www.baidu.com 或者為 http://www.baidu.com:8080 時 則無法正確讀取。。求高手給去能截取這樣格式的代碼 Thanks!string p "http://[^\.]*\.(?<domain>[^\.]*)";Regex r…

推薦一個開源的 .NET 二維碼生成庫

你好&#xff0c;這里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;實用的工具和組件&#xff0c;希望對您有用&#xff01;介紹QrCodeGenerator 是開源的 .NET 二維碼生成庫&#xff0c;它支持從文本字符串和字節數組生成二維碼圖片。這個庫是基于 .NET Stan…

vue循環中的v-show

v-show如果使用循環對象的屬性來時控制, 這個屬性必須是加載時就存在的 <div class"list-group col-sm-12" v-for"(issue,index) in issue_list"><a click"switch_comments(issue, index)" style"background-color:#5cb85c;font-w…

C# 圖片畫矩形,添加文字

1.初始設置字體與筆 Pen pen new Pen(Color.FromArgb(220, Color.Green), 5);Font font new Font("微軟雅黑", fontSize, FontStyle.Bold); // 定義字體Brush whiteBrush new SolidBrush(Color.FromArgb(220, Color.Red)); // 畫文字用 2.初始設置圖片和Graphics …

全量更新和增量更新_增量BIOS更新或直接更新到最新版本哪個更好?

全量更新和增量更新There are few things as irritating as a Blue Screen of Death, but sometimes there is an easy fix for it like updating the BIOS for instance. If multiple updates are available though, do you do incremental updates or can you just use the l…

BZOJ4590: [Shoi2015]自動刷題機

【傳送門&#xff1a;BZOJ4590】 簡要題意&#xff1a; 有l秒時間&#xff0c;AC了k道題&#xff0c;給出每秒寫的代碼行數&#xff08;行數>0表示寫&#xff0c;<0表示刪除&#xff0c;如果剩下的行數不夠刪&#xff0c;則為0&#xff09;&#xff0c;假設行數>n時能…

[Office 2010 易寶典]什么是Office Web App?如何在線查看Office文檔?

什么是Office Web App&#xff1f; Office Web App使得Microsoft Office能擴展到網絡瀏覽器上。用戶可以直接在通過瀏覽器在線查看和編輯保存在網站上的文檔。 如何上傳Office文檔&#xff1f; 在Microsoft Word 2010里面&#xff0c;您可以把Word文檔保存到Windows Live SkyDr…

Pipy:保護 Kubernetes 上的應用程序免受 SQL 注入和 XSS 攻擊

注入攻擊在 OWASP Web 應用 10 大安全風險[1] 排名 2021 年下滑至第 3 位&#xff0c;多年來一直位居前十。SQL 注入 (SQLi) 是一種用于攻擊網站和 Web 應用程序的常見注入技術。沒有將用戶輸入與數據庫命令完全分開的應用程序面臨著將惡意輸入作為 SQL 命令執行的風險。成功的…

docker 開啟命令\退出容器

開啟 docker load -i test.tar docker imagesdocker run -it -p 8000:80 test //8000為訪問ip 的端口 80 為test設置的端口 docker rename 原容器名 新容器名訪問IP 為 localhost:8000 退出容器 如果要正常退出不關閉容器&#xff0c; 請按CtrlPQ進行退出容器

如何阻止YouTube在iOS,Android和Web上自動播放視頻

Over at YouTube, they love it when you watch more YouTube. If you’re sick of YouTube automatically queuing up more videos for you, however, it’s easy enough to turn the autoplay feature off and go back to watching your videos at your own pace. 在YouTube上…

(php)thinkphp3.2配置sql_server

(php)thinkphp3.2配置sql_server 標簽&#xff1a; php thinkphp sql_server2016年12月16日 15:20:19631人閱讀 評論(0) 收藏 舉報分類&#xff1a;php&#xff08;18&#xff09; 最近要整一個crm和erp的對接&#xff0c;最坑的是&#xff0c;erp的是用.net寫的&#xff0c;數…

viewData

viewdata[alert]"alert(你好)"<script>viewdata[alert]</script> 在Controller存儲數據 在 界面得到 關于 ViewData和ViewMode 點擊這里 http://wanshiqian1221.blog.163.com/blog/static/6872130420095242016546/