目前,存算分离的方案相对已经比较成熟,容器化方案还处于探索和小规模应用阶段,以 Spark 为例,方案大体上分为 2 种:

一种是 Spark Standalone,该方案仅对大数据系统做容器化部署改造,得益于容器轻量化、更细粒度的算力管理、任务隔离等特点,可以将主机划分成更多小颗粒的任务单元,使主机资源利用率更高,同时兼顾用户原有的使用习惯。

但此方案需要提前分配固定的容器数量,并保持容器的持续运行,无法对容器进行动态管理,资源的利用率虽然有所提升,但仍存在浪费。

另一种是 Spark On Kubernetes 集群方案,该方案使用 Kubernetes 替代 Yarn 来进行统一的资源编排和调度,技术上更贴近主流容器解决方案,免去了二层调度,可以进一步提升资源管理效率,相比 Standalone 方案,实现了对容器资源的动态管理,优化了资源分配。

然而,Kubernetes 不属于 Hadoop 生态组件,与传统 Spark on YARN 方案相比存在一些劣势,如:缺少任务队列、external shuffle service 等特性,且性能较差。因此在应用到生产系统时,还要做大量的功能增强、调度和性能优化,才能保持与传统大数据平台一致。