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