spark十分優秀,但并非銀彈
已經有太多的文章說spark有多么的優秀了,我是非常認可的。比如:統一分析引擎,RDD抽象,dataset、df等編程接口,交互式編程的支持,穩定高效的機器學習算法庫,高效的spark sql實現,基本能跟其它所有的產品集成。每次內部宣傳spark的時候,都有人說這說那,我這次就全說了吧,那spark是不是可以解決所有的數據分析問題呢?答案是,spark也并非是銀彈。
在一個多租戶的共享集群中,如果每個用戶都去申請hold一部分資源,這會導致很多用戶的資源申請不滿,最后job不能及時完成。特別的,當hold一部分資源時,利用率一般也不會很高,這樣會導致整體的利用率不高。相反,tez每進程的每任務的模式能把利用率做到90%上下。在多租戶下,能否做到jvm可以按照執行計劃按需復用或者退出是一個比較大的考驗。
每個產品領域,可以說都不是最優的,例如:mllib沒有mpi來得快,沒有parameter支持的緯度高,graphx沒有GraphLab來得快,spark streaming沒有storm來得延遲低,spark sql需要hold一部分資源,在共享環境很難大規模使用。不過就如其官方說的是,我們是一個整體,我們兄弟多,單個力量不大,但是合起來威力無窮。可以搞流式機器學習,流式圖計算,一站式解決業務幾乎所有的問題。
在core層面,reduce沒有預起,只能stage完成后再執行下一個,如果有長尾,則利用率非常低,特別是對于迭代,長尾到底。沒有network的shuffle功能,本來就是預啟動,對于standalone是可以加速的。不過這不是設計層面的事情,很容易做的。
設計層面,flink是塊基于流的,但spark是流基于塊的,為此flink說我是4G(塊基于流),spark是3G(內存計算),tez是2g(dag),mr是1g(開拓者),我理解應該是前面是后面的疊加。理論上,在一些場景下,塊基于流的體系是隨著數據量的增多能做到時間線性增長的。在一些圖及機器學習的場景下,性能能做到更好。不過目前在社區,flink只有spark投入的十分一不到。已經有很多企業在spark投入了,阿里也有一些團隊在flink上投入了,spark底層是否可以改造呢?
不過,至少在未來2年內,spark肯定會是一個上升空間的。也祝愿spark越做越好,flink也能大放光彩。
來自: http://fengshenwu.com/blog/2016/01/24/spark十分優秀,但并非銀彈/