Hadoop体系里面,有个非常让其拥趸津津乐道的概念,混合部署。其基本含义就是将多个应用和组件部署在一个集群,共享一套资源,以获取资源的高效利用。物理机环境没有弹性的能力,这个混合部署概念弥补了部分弹性的需求。
先来看下产生的历史,Hadoop 1.0时代只有MapReduce/hdfs/zookeeper三大件,1.0时代只有MapReduce一种服务,没有共享的必要。Hadoop 2.0 YARN横空出世,主要概念来源于伯克利的mesos的思路,期望用同一个资源管理器管理所有资源共享给所有服务。YARN最主要作用就是将物理机环境的所有资源全部管理起来;各种该服务的资源由YARN统一分配和管理。随着资源管理器的发展的同时,2.0时代应用繁荣起来MapReduce/Hive/Spark/Hue/HBase,中间为了解决长期运行资源服务管理问题,还有一个专门的slider组件。Mesos出来也更早,相当长一段时间mesos和yarn还竞争了一把;最后mesos拗不过社区的力量改道搞应用部署,又去和K8S PK上了。
总的来说,在物理机环境中,这个思路还是非常先进的,但是今天演进到云环境是否还适用值得商榷一下,为什么这么说:
- 云时代,资源都是云平台统一管理。首先分配的粒度本身就很细,可以支持到0.5个cpu。需要多少,向云平台申请,用多少付费多少,非常弹性;可以如果还是老思路,提前固定申请一批,再分配给各个应用。完全没有享受云弹性的能力。
- 其次可以根据不同的应用需求,还可以灵活申请不同的规格,更好的匹配应用特点和充分利用资源。比如有些应用需要cpu多,有些应用需要IO强;YARN只能统一管理同规格服务器,很难照顾到每个应用的不同需求,非常容易申请过多,造成资源浪费。