7 Spark Streaming
簡答題
T1 請闡述靜態資料和流資料的區別?
答:靜態資料是可以看作是靜止不動的,適合進行批次計算;流資料是指資料以大量、快速、時變的流形式持續到達的,適合進行實時計算。同時,流計算被處理後,只有部分進入資料庫成為靜態資料,其餘部分則被丟棄。
T2 請闡述批次計算和實時計算的區別。🌱
答:批次計算是以"靜態資料"為物件,可以在很充裕的時間內對海量資料進行批次處理,計算得到有價值的資訊;實時計算需要在資料到達時立即處理,實時得到計算結果,只有部分最終會成為有效資訊。
T3 對一個流計算而言,在功能設計上應該實現哪些需求?🌱
答:
① 高效能:這是處理大資料的基本要求,如每秒處理幾十萬條資料;
② 海量式:支援 TB 級甚至是 PB 級的資料規模;
③ 實時性:必須保證一個較低的延遲時間;
④ 分散式:支援大資料的基本架構,必須能夠平滑擴充套件;
⑤ 易用性:能夠快速進行開發和部署;
⑥ 可靠性:能可靠的處理流資料。
T4 請闡述典型的流計算框架有哪些?
答:可以分為三類:
① 商業級的流計算平臺,如 IBM StreamBase;
② 開源流計算框架,如 Twitter Strom;
③ 公司為支援自身業務開發的流計算框架,如 DStream。
T5 請闡述流計算的基本處理流程。🌱
答:
① 資料實時採集:採集多個資料來源的海量資料,需要保證實時性、低延遲與穩定可靠;
② 資料實時計算:對採集的資料進行實時地進行分析計算,並反饋實時結果;
③ 資料實時查詢:不斷更新結果,並將使用者所需的結果實時推送給使用者。
T6 請闡述資料採集系統各部分的組成及其功能。
答:通常有三個部分:
① Agent:主動採集資料,並將資料推送到 Colletcor 部分;
② Collector:接收多個 Agent 資料,並實現有序、可靠、高效能的轉發;
③ Store:儲存 Collector 轉發過來的資料。
T7 請闡述實時計算的基本流程。❌
答:流處理系統接受資料採集系統不斷髮來的實時資料,實時地進行分析計算,並反饋實時結果;經流處理系統處理後的資料,可視情況儲存,以便之後進行分析計算;在時效性較高的場景中,處理後的資料也可以直接丟棄。
T8 請闡述 Spark Streaming 設計的基本原理。
答:是將實時資料流以時間片為單位進行拆分,然後採用 Spark 引擎以類似批處理的方式處理每個時間片資料。
T9 請對 Spark Streaming 和 Storm 進行比較,它們各自有什麼優缺點?
答:
① Spark Streaming 的優缺點:
(1)優點:
- 相比於 Storm,RDD 的更容易做高效的容錯處理;
- 採用的小批次處理方式。使它可以同時相容批次資料處理和實時資料處理的邏輯與演算法,方便一些需要歷史資料和實時資料聯合分析的特定應用場合。
(2)缺點:
- 無法實現毫秒級的響應。因為其將流資料分解為一系列批處理作業,產生多個 Spark 作業,導致對每一段的資料處理需要經過 Spark 作業的流程,產生較大時間開銷;
② Storm 的優缺點:
(1)優點:
- 處理的資料單位為元組,只會產生極小的延遲。
(2)缺點:沒有 Spark Streaming 上述優點。
這缺點又要重新說一遍,但不寫這個格式又對不上題目要求。
T10 企業應用中的”Hadoop+Storm“結構是如何部署的。
答:Hadoop 和 Storm 框架部署在資源管理框架 YARN(或 Mesos) 之上,接受統一的資源管理和排程,並共享底層的資料儲存;其中 Hadoop 負責對批次歷史資料的實時查詢和離線分析,而 Storm 負責對流資料的實時處理。
T11 請闡述 Spark Streaming 的工作機制。🌱
答:Spark Streaming 中的元件 Receiver 作為一個長期執行的任務(task)執行一個 Executor 上,每個 Receiver 會負責一個 Dstream 輸入流,接受到資料來源發來的資料後,會提交給 Spark Streaming 程式處理,處理後的結果既可以交給視覺化元件進行視覺化展示,也可以寫入 HDFS 或者 HBase 中。
Receiver 收到資料來源的資料,交給程式處理,結果可以視覺化展示或者寫入HDFS或者HBase。
T12 闡述 Spark Streaming 程式編寫的基本步驟。🌱
答:
① 透過建立輸入 DStream 來定義輸入源。輸入源會源源不斷地產生資料,並將資料傳送給 Spark Streaming,Receiver 收到資料後會交給使用者自定義的 Spark Streaming 程式處理;
② 透過對 DStream 應用轉換操作和輸出操作來定義流計算;
③ 呼叫 StreamingContext 物件中的 start() 方法來開始接受資料和處理流程;
④ 透過呼叫 StreamingContext 物件的 awaitTermination() 方法來等待計算流計算程序結束或者呼叫 stop() 方法手動結束流計算程序。
定義輸入源(DStream)->定義計算過程(DStream;轉換 輸出操作)->開始(StreamingContext;start())->結束(等待,awaitTermination() ;手動 stop())
T13 Spark Streaming 主要包括哪 3 種型別的基本資料來源?
答:檔案流、套接字流和 RDD 佇列流。
T14 請闡述使用 Kafka 作為 Spark 資料來源時,如何編寫 Spark Streaming 應用程式。
答:
① 編寫生產者(Producer)程式;
② 編寫消費者(Consumer)程式;
③ 編寫日誌格式設定程式;
④ 編譯打包程式;
⑤ 執行程式。
T15 請闡述 Dstream 有狀態轉換操作和無狀態轉換操作區別。
答:
① 無狀態轉換操作:不會記錄歷史狀態資訊,每次對新的批次資料進行處理時,只會記錄當前批次資料的情況;
② 有狀態轉換操作:
(1)透過滑動視窗記錄歷史狀態資訊,每次對新的批次資料進行處理時,如果之前出現過且仍在視窗內,會將新的狀態資訊和歷史狀態資訊結合記錄;如果之前未出現過,則僅記錄新的狀態資訊。
(2)支援跨批次操作( updateStateByKey
)。