Spark的常見困惑(1)

前言

已經很少寫Spark的文章了,但是因爲以前寫的挺多的,所以還是有很多人會和我交流Spark相關的內容。這篇文章我會把我經常被問到的幾個問題整理下,也可以避免以後反覆講,因爲可以直接把這篇文章丟過去就行了。

我對Spark總體的看法

Spark是目前最全面的一款計算引擎,也就是屬於綜合實力最好的。其他引擎在其主打的一面可能會比Spark好不少,比如速度,或者在某個功能點上勝出,但是Spark無論在API設計,擴展性,多租戶等等各個方面都已經做的很全面,加上後面開源的Delta讓其在存儲上也得到了極大的提升。另外經過這麼多年的發展,Spark團隊對於穩定性的要求也非常高,同時它也是當前對機器學習支持的最好的一個計算引擎。

Spark發行包只是一個提交程序

很多人使用了CDH,HDP等Hadoop發行包,然後裏面預裝了Spark, 然後就以爲只能用上面的Spark。其實這是錯誤的。Spark發行包只是一個client/submitter,什麼意思呢? 也就是說Spark發行包只是Yarn,K8s,Mesos等分佈式系統裏的一個提交程序。所以你完全可以自己下載一個Spark發行包,然後把自己寫Spark程序用這個新下載的提交程序提交到分佈式系統裏。你在同一個yarn上使用不同版本的Spark發行包提交也是互不影響的,因爲他們都是獨立的Yarn程序。

所以,你可以在你的Hadoop集羣上運行多個不同版本的Spark程序,是沒有問題的。

使用這些CDH/HDP等唯一可能遇到的問題是,他會在Yarn上的應用程序偷偷加上了一些Jar包,導致可能和社區版的Spark的包衝突了。

Spark 會把數據都載入到內存麼

我們知道Spark可以對接很多數據源,比如對接MySQL,用戶就會想,是不是Spark會把MySQL的數據都加載過去計算。實際情況是,在某些場景下,確實是需要把數據都加載過去的,但是加載過去不意味着這些數據都要放內存或者放磁盤,Spark是一批一批的去拿,拿到後會根據算子做即時的處理。之後可能根據shuffle等需求寫入到磁盤,在寫磁盤的過程中儘可能先寫到內存,再寫磁盤,所以對內存要求比較高。另外對於transform/action以及這個問題更詳細的闡述大家可以搜索[Spark sc.textFile(...).map(...).count() 執行完整流程] 和 [Spark會把數據都載入到內存麼?] 這兩篇文章。

今天就寫到這,待續....

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