1.2.0 was released on 12/18, 2014 在2014年5月30日發(fā)布了Spark 1.0 和9月11日發(fā)布了Spark1.1.后,Spark 1.2 終于在12月18日發(fā)布。作為1.X時代的第三個release,它有什么重要更新呢? 1.Spark Core:性能和易用性的改進 對于超大規(guī)模的Shuffle,Spark Core
1.2.0 was released on 12/18, 2014
在2014年5月30日發(fā)布了Spark 1.0 和9月11日發(fā)布了Spark1.1.后,Spark 1.2 終于在12月18日發(fā)布。作為1.X時代的第三個release,它有什么重要更新呢?
1. Spark Core:性能和易用性的改進
對于超大規(guī)模的Shuffle,Spark Core在性能和穩(wěn)定性方面做了兩個重要的更新:
一) Communication Manager使用Netty實現(xiàn)
在1.1 之前,對于Shuffle的結(jié)果回傳,有兩種方式,對于較小的結(jié)果,直接使用akka的消息傳遞機制;對于較大的結(jié)果,則采用BlockManager。采用BlockManager是不錯的設(shè)計,可以避免Driver占用過多的內(nèi)存而OOM并且減少了GC的風險。但是,BlockManger的處理是低效的:它先從Disk中將結(jié)果讀取到kernel的buffer,然后到用戶空間的buffer,然后又到了kernel的send buffer,這期間有多次的內(nèi)存拷貝和kernel space到user space的切換代價。著不單單是占用了JVM的不必要的內(nèi)存,而且還增加了GC的頻率。不過,使用FileChannel.transferTo,可以做到zero copy。具體可見http://www.ibm.com/developerworks/library/j-zerocopy/
其中一種實現(xiàn)就是Netty,1.2中,使用Netty 重寫了Communication Manager。實際上,在org.apache.spark.network.netty中已經(jīng)實現(xiàn)了netty得網(wǎng)絡(luò)模塊,但是由于不完善而這個選項默認是沒有打開的。
而且,使用Netty已經(jīng)是默認的了。spark.shuffle.blockTransferService 已經(jīng)從1.1的nio變成1.2 中新增的netty了。關(guān)于這個PR的詳情可見 https://issues.apache.org/jira/browse/SPARK-2468
二) Shuffle的默認機制從hashbased 轉(zhuǎn)化為sort based
MapReduce被人詬病之一就是不管sort是否必要,都需要排序。Spark在1.1之前,都是hash based Shuffle。但是hash based會占用大量的內(nèi)存,當然了在內(nèi)存不夠用時,也會spill到disk,然后最后再做一次merge。對于比較大的數(shù)據(jù)集,因為有disk IO,因此性能也會有所下降。Shuffle的性能的好壞可以說直接影響整個job的性能也不為過。在1.1的時候,引入了sort based shuffle。在1.2的時候,這個已經(jīng)能夠成熟并且成為默認的選項:
spark.shuffle.manager 從hash 變?yōu)閟ort。
并且從作者Reynold Xin的測試來看,sort 在速度和內(nèi)存使用方面優(yōu)于hash:“sort-based shuffle has lower memory usage and seems to outperformhash-based in almost all of our testing.”
2. MLlib: 擴充了Python API
3. Spark Streaming:實現(xiàn)了基于WriteAhead Log(WAL)的HA,避免因為Driver異常退出導致的數(shù)據(jù)丟失
4. GraphX: 性能和API的改進(alpha)
Spark 1.2 是來自60多家企業(yè),學校等研究機構(gòu)的172位貢獻者的一次重要發(fā)布。從Contributor的數(shù)量看,Spark社區(qū)依然是最活躍的開源社區(qū)之一。
從Spark的歷次更新都可以看出,快速迭代是互聯(lián)網(wǎng)的王道。Spark發(fā)展到現(xiàn)在,雖然依然有這樣的那樣的問題,但是依靠不斷的迭代,各大廠商的支持和各位contributor的不斷付出,相信社區(qū)會持續(xù)快速發(fā)展。雖然商業(yè)軟件可能幾年前就已經(jīng)解決了這些問題,商業(yè)軟件可能在某個應(yīng)用場景已經(jīng)有了最佳的實現(xiàn)。但是互聯(lián)網(wǎng)的稟賦就在于不求最優(yōu),只求合適。而且對于各個中小型的互聯(lián)網(wǎng)公司來說,場景不斷在變,需要一個自己可以掌控的架構(gòu),隨著自身的發(fā)展不斷的在這個架構(gòu)上做快速的迭代。而Spark,或許就是這個適合大家的架構(gòu)。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com