Spark 實現黑名單實時過濾

2021-08-03 07:29:31 字數 3048 閱讀 1628

本節課主要講解 spark 的 rdd 操作,讓您對 spark 運算元的特性快速了解。通過演示案例實時黑名單過濾,讓您切身體會到 rdd 的強大功能,然後學以致用。

spark 系列課程

本課程屬於中級難度級別,適合具有 spark 基礎的使用者,如果對 scala 熟悉 ,能夠更好的上手本課程。

提到 spark transformation,不得不說 spark rdd,那麼 rdd 是什麼?

彈性分布式資料集(rdd)是 spark 框架中的核心概念。它是由資料組成的不可變分布式集合,其主要進行兩個操作:transformation 和 action。spark 將資料儲存在不同分割槽上的 rdd 之中,rdd 可以幫助重新安排計算並優化資料處理過程,此外,它還具有容錯性,因為 rdd 知道如何重新建立和重新計算資料集。transformation 是類似在 rdd上 做 filter()、map()或 union() 以生成另乙個 rdd 的操作,而 action 則是 count()、first()、take(n)、collect() 等觸發乙個計算操作。transformations 一般都是 lazy 的,直到 action 執行後才會被執行。spark master/driver 會儲存 rdd 上的 transformations。這樣一來,如果某個 rdd 丟失,它可以快速和便捷地轉換到集群中存活的主機上。這也就是 rdd 的彈性所在。

rdd 支援兩種型別的操作:

最新的 rdd operations,請參考: rdd operations

在一些企業中,比如小額貸款公司,需要做好風控,對那些信譽不好的使用者,我們需要設定黑名單,只要是黑名單中的使用者,我們就給過濾掉,禁止提供貸款服務。既然是實時,必然用到 sparkstreaming,這裡採用sockettextstream,結合nc命令使用。由於是實驗,不方面提供真實資料,這裡一再簡化,可以簡單模擬乙份資料,進行測試,原理是相同的。

注意:模擬的資料字段格式為(id user),例如: 00001 張三。

1). 雙擊開啟桌面 xfce 終端,首先使用nc啟動乙個監聽埠8888。

由於我們要使用sockettextstream傳入乙個埠及對應的主機名,不先啟動埠會報錯。

nc -lk 8888
2). 再次雙擊開啟桌面 xfce 終端,啟動 spark-shell。

spark-shell
使用import匯入依賴。

import

org.apache

.spark

.sparkconf

import

org.apache

.spark

.streaming

.streamingcontext

import

org.apache

.spark

.streaming

.seconds

注意:如果是 spark-shell,那麼在進入 spark-shell 的時候,spark-shell 自動建立了乙個 sparkcontext 為sc,那麼建立 streamingcontext 只需要用 sc 來 new 就可以了,這樣就不會出現多個sc 的衝突問題,否則會報錯。

建立streamingcontext,設定每一秒重新整理一次。

val ssc = new streamingcontext(sc, seconds(2))
設定需要過濾的黑名單,這裡設定兩個名字,您也可設定多個。

val bl = array(("jim", true),("hack", true))
設定並行度,這裡指定為3。

val blrdd = ssc.sparkcontext.parallelize(bl, 3)
設定主機名,埠號。

val st = ssc.sockettextstream("localhost", 8888)
對輸入資料進行轉換,(id, user) => (user, id user) ,以便對每個批次rdd,與之前定義好的黑名單進行leftouterjoin操作。

val users = st.map
呼叫左外連線操作leftouterjoin,進行黑名單匹配,過濾掉。

val validrddds = users.transform(ld =>  else 

})val validrdd = frdd.map(tuple => tuple._2._1)

validrdd

})

#列印白名單

validrddds.print()

#執行

ssc.start()

#等待完成

ssc.awaittermination()

此刻,你會看到每隔一秒不斷重新整理。

接下來,回到第一次開啟的 xfce 終端,即監聽 8888 埠。

輸入以下內容:

0001 marry

0003 hack

0002 tom

同理繼續輸入一下內容:

0004 jim

0005 john

0006 shiro

經過兩次的輸入,發現對黑名單裡的資料都過濾掉,實驗完畢。由於設定的重新整理間隔太短您可能,看得不是很清楚,可以將間隔設定大一點,方便觀察。

由於篇幅的原因,本節課主要介紹了spark 的運算元操作,包括lazyaction兩種,然後基於乙個小案例進行加深學習,涉及到 sparkstreaming 的一些操作。更多的 sparkrdd 操作請參考:spark 官網

SparkStreaming黑名單過濾

1 獲取黑名單資料,處理成rdd形式 一般情況,黑名單資料儲存在資料庫裡面,獲取之後將每個黑名單資料處理成 blackname,true 的tuple形式 2 接收資料,處理成 k,v 形式 從資料來源接收到資料之後,取出name作為key,整條資料作為value,譬如 輸入資料為 20190929...

asp 檢查黑名單 黑名單驗證的突破

黑名單驗證的突破 作業系統特性 windows下對大小寫不敏感,php和php對windows來說都是一樣的。windows下,上傳的檔名中帶有test.php data會在伺服器生產乙個test.php的檔案並可以被解析。及 test.php test.php data windows下檔名結尾加...

aws 黑名單功能

如果你想授權某段ip訪問,那麼可以用安全組的白名單功能,但是安全組不提供黑名單功能。如果我們的某個服務受某個ip攻擊,那麼此時可以選擇網路acl對其進行黑名單限制,操作步驟如下 1.登入aws,選擇vpc 2.vpc裡有個網路acl,當然事先你要找到你服務對應的vpc 3.選擇編輯入站規則,入站規則...