已经有太多的文章说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也能大放光彩。