Spark集群管理器
在之前的大数据架构背景介绍中介绍过, 我们这里的的Spark应用都是跑在Yarn上的. 所有选择Spark on YARN方式部署是顺其自然的一件事, 不需要引入其他多余的依赖, Spark提供了多种集群管理的实现, 对比起来各有千秋, 当每种方案都能满足核心需求的时候, 选择现成的是一件比较省心的事情.
Spark支持的集群管理有Standalone Mode、Spark on Mesos、 Spark on YARN、Spark on Kubernetes、 单机调试的local模式。
网上很多它们几个的对比文章 下面说说我理解的各个集群管理器的差异
- Standalone Mode, 是Spark自带的资源管理器.优点是无需其他外部依赖(高可用需要用zk来保证), 缺点是升级Spark版本的同时需要升级集群.客户端和服务端大版本要一致.
- Spark on Mesos, Mesos最当初就是为了Spark设计的, 提供了粗粒度(Coarse-Grained)和细粒度(Fine-Grained)的资源管理方式, 但是考虑到Spark已经支持动态资源分配(Dynamic Allocation)了, Spark2.0.0之后已经移除了Spark on Mesos细粒度的特性了 Remove Mesos fine-grained mode subject to discussions
- Spark on Yarn, Yarn是集成在Hadoop里面的, 在Hadoop2.0之后, Hadoop就将计算框架和资源管理分离了, 使得很多应用可以直接基于Yarn上跑, 所以 Spark的不同版本在yarn上跑的时候也不用像Standalone的时候需要考虑版本对的上, 这个好处在现在Spark更新迭代这么频繁的时候特别好用. Yarn一直被人诟病的一个点是只支持粗粒的资源管理, 细粒度的正在讨论中Support changing resources of an allocated container, 但是对于现在支持动态资源配置的Spark来说,这个特性显得反而是鸡肋了.
- Spark on Kubernetes, Kubernetes是Docker资源管理器, 这一实现主要利用Docker弹性部署的特性, 同时资源和环境隔离程度更高, 这一方案是2.3的新特性,是一个实验性的方案, 不支持client的部署方式, 在最近发布的2.4.0中已经支持了.个人感觉这个将是未来发展的方向, 这种方式借助docker的特征, 隔离性高, 也容易搞弹性部署, Spark也在往这方面靠.
从以上的对比来看, 个人感觉on yarn的方式在现阶段来说是比较成熟可靠的, 大数据的很多组件都有on yarn的实现, 公司选择的话, 还得考虑人员对各类组件的熟悉程度以及机器成本的开销.