Spark基本原理(二)

1、關於Spark的調優部分

1)更好的序列化實現:在Spark中,需要序列化的地方包括寫入磁盤、Worker之間傳輸RDD等。默認的Java序列化性能比較低,所以將序列化的方式修改爲kryo;

2)配置多個臨時文件的目錄:在併發性高的情況下,對一個文件的操作會影響整體的性能,爲此可以創建多個文件夾,用於存放臨時文件;

3)啓用推測執行機制:類似於Hadoop中的Task任務處理,在某個Task處理速度明顯慢時,會啓用其它節點執行任務,有一個執行完就銷燬掉另一個未執行完的節點;

4GC調優:原則上是減少Full GC,在調優之前,必須先檢查代碼部分

2、Spark的CheckPoint機制

CheckPoint的機制是建立一個檢查點,類似於快照。

在Spark的RDD依賴中,若依賴的關係太長,同時沒有將中間結果存儲,會導致計算出錯時從頭再來。爲此Spark中可以利用緩存機制將部分中間結果緩存起來,此時一定程度上解決了數據丟失問題。但是若存儲的內存或磁盤出錯,也會導致重新計算,此時出現了checkpoint機制,就是將比較重要的中間數據做一個檢查點存儲到一個高可用的地方。

補充:在SparkStreaming中,也存在checkpoint機制。在需要對歷史數據進行累計處理,可以設置一個檢查目錄,在該目錄中,存儲歷史數據。

3、Spark的數據傾斜

出現情況:join(一大一小的情況)或者groupBy(某個key出現的次數過多)

解決:使用廣播變量,將小的數據轉換Map進行廣播,廣播會將Map發送到每個節點中,合併時利用該Map進行,可以減輕數據傾斜;

groupBy出現的可以將key後添加固定格式的隨機數來減輕數據傾斜

4、SparkStreaming與Storm

相同點:都是分佈式、容錯、可擴展的處理系統

不同點

Storm是實時數據計算,最快的處理可達10毫秒,對於數據的處理核心支持兩個級別:最多一次(可能會丟失)、最少一次(保證數據不丟失)

SparkStreaming是小批量計算,處理老版本只能到達秒級,新版本可以到達毫秒級。並且數據的處理只處理一次。由於Spark平臺的良好整合性,可以藉助於Spark的其它模塊,在開發效率上佔有一定的優勢。;

5、SparkStreaming的原理

SparkStreaming是將流式處理分解成一系列的短小的批處理作業,即按照batch size(如1秒)分成一段一段的數據DStream(discretized-離散化 Stream),每一段數據都轉換爲RDD,然後將針對SparkStreaming中的Dstream的Transformations操作轉換爲針對Spark RDD的Transformations操作,將RDD經過操作變成中間結果保存在內存中(也可以保存到磁盤)。

三種處理:只能處理最新的,處理歷史數據(checkpoint)和最新的,處理一段時間內的(滑動窗口機制)

6、Spark的模式(簡單介紹,具體請參考 https://www.jianshu.com/p/65a3476757a5

大致上分爲三種:本地單機模式、Spark自帶Cluster Manager的集羣模式、藉助於Yarn管理的集羣模式。

本地單機模式:主要是爲了測試代碼的邏輯;

Spark自帶Cluster Manager的集羣模式:啓動之前必須先啓動Spark的Master和Worker守護進程;

基於Yarn的Resource Manager的集羣模式:使用Yarn作爲Spark的Cluster Manager,來爲Spark的應用程序分配資源,並且啓動之前需要啓動Hadoop的各種服務。

 

提示:SparkSQL中的DataFrameSparkStreaming中的DStream底層都是RDD

 

 

補充:SparkSQL的介紹

SparkSQL提供了一個成爲DataFrame(數據框),底層是RDD,類似於關係型數據庫中的表。

引入了新的RDD類型SchemaRDD;可以混合不同來源的數據,例如將HiveQL的數據和MySQL的數據進行join;在把執行語句解析後,變成RDD的計算。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章