spark on yarn架構簡介

2021-08-05 20:33:19 字數 1694 閱讀 8007

spark自從問世以來就收到了廣泛的關注,其熱度一直居高不下。spark的出現,為實時資料的處理帶來了極大的方便,相比hadoop,spark在某些情況下處理資料的速度要快於hadoop,其主要原因有以下兩點:

1. spark中間的資料不落地,這是最主要的原因,中間的資料存放在記憶體中,這就極大的減少了磁碟的讀取以及io的操作,所以,這也是spark適合迭代式工作的原因。

2. spark中dagscheduler的出現,對任務進行了乙個很好的劃分,其主要的劃分的依據是寬依賴(這個後面我會細說),也就是根據任務的拓撲結構進行劃分,保證了窄依賴的rdd會在一起,減少了shuffle的操作過程,極大的減少了時間開銷。

但是如果說spark取代了hadoop,我認為不能這麼說,還是要看業務場景,hadoop適合大吞吐量的靜態資料,spark適合實時資料流,說實在,如果spark跑mr作業,其時間不一定比hadoop快,因為spark太吃記憶體了。下面就說下我理解的spark的架構(我用到的排程器是yarn):

架構中的主要構件(其中yarn部分不再介紹,具體可以參考部落格

rdd:這是spark中的乙個關鍵的概念,rdd我們可以理解為spark的每個階段的產物,正是乙個階段乙個階段的產物構成了spark的整個拓撲結構。所以每乙個rdd之間都會有直接或間接的關係,直接的關係,也就是說如果rdd1是由rdd2直接生成的,那麼這就是窄依賴,因為這樣資料不需要shuffle過程,極大的減少了時間的開銷,但是如果rdd1是由多個不同的rdd生成的,那麼這就是寬依賴,也就是需要乙個shuffle的過程,這也就是為什麼dagscheduler會按照寬依賴來劃分stages。有了依賴關係,這樣就保證了容錯性,當中間的某個資料丟失的時候,它就會根據其依賴關係重新生成,並不需要將整個任務重新執行。

dagscheduler:任務劃分器,將spark任務劃分成有向無環圖的結構,根據的是是否需要shuffle,也就是rdd的寬依賴,找到最佳的排程方法,這樣就可以合理的利用資源,提高任務的執行效率。

taskscheduler(圖中的yarnclusterscheduler):主要負責任務的排程,資源的申請,監控任務的執行。

excutor:任務執行的單元,執行taskset中的作業,並向driver傳輸心跳。

spark 的架構了解了,我們就來說一下這個shuffler,為什麼劃分任務要根據shuffler?

shuffler階段主要是對並行操作的資料結果進行sort、hash的乙個過程,由於要讀取多個rdd的結果,並對所有結果進行整體操作,所以會帶來比較大的io消耗,可能還要有磁碟的讀取等操作,這一步是很關鍵,並且很耗時的。當然了,這也是spark的瓶頸之一,最開始的spark的shuffler過程是基於hash實現的,他會將中間的資料檔案都開啟,然後磁碟讀取,讀取檔案,但是當小檔案數量巨大的時候它會很消耗記憶體,並且磁碟的讀取也是很耗時的,所以spark又實現了基於排序的shuffle,這個是將所有檔案讀在乙個檔案中丙進行排序操作,但是在分片的時候,它採用的策略是建立乙個index,reduce根據index來讀取資料,這要減少了記憶體的開銷,但是照成的結果是所有的資料都需要進行排序。各有利弊,我們可以根據實際的需求來進行策略的選擇。

以上均為個人看法,如有錯誤,還請各位大神指正,謝謝。

spark on yarn日誌切割

由於spark on yarn的日誌會在stderr裡面一直追加,而且streaming又是長應用,那麼stderr會一直增長。解決辦法就是把stderr按天切割,這樣我們就可以刪除之前的日誌了。1.首先,把集群中的hadoop的log4j檔案 etc hadoop conf log4j.prope...

Spark On Yarn徹底解密

spark on yarn 徹底解密 本期內容 1 hadoop yarn解密 2 spark on yarn 解密 一 hadoop yarn 解析 1 yarn是hadoop推出整個分布式 大資料 集群的資源管理器,負責資源的管理和分配,基於yarn我們可以在同乙個大資料集群上同時執行多個計算框...

Spark on yarn安裝部署

說明 1.spark的部署模式主要有 local模式 standalone模式 yarn模式 yarn client,yarn master mesos模式 coarse grained mode,fine grained mode。整理了幾篇說明性blog spark集群三種部署模式的區別 spa...