1.引言
随着云原生概念的兴起,越来越多的企业投身于云原生转型的浪潮,以解决传统应用面临的弹性能力不足、资源利用率较低、迭代周期较长等问题。通过云原生技术(如容器,不可变基础设施和声明式API等),使得企业在公有云、私有云和混合云等云环境构建和运行应用变得更加容易,更能充分利用云环境的优势,加速了企业应用迭代、降低资源成本、提高系统容错性和资源弹性。
基于Hadoop生态的传统大数据系统,同样面临着弹性能力不足、资源利用率低,管理困难等问题,云原生技术天然适合解决这些问题。然而,将基于Hadoop生态的传统大数据系统改造成云原生架构,涉及到改造成本高、迁移风险大等诸多挑战。那有没有方案,既可以基于云原生技术解决大数据系统弹性能力不足,资源利用率低,管理困难等问题,又能保证改造成本、迁移风险比较低呢?腾讯云大数据团队和容器团队,基于大数据系统的现状,结合大数据技术和容器技术的特点,推出了渐进式的云原生演进方案。使用该方案,可以在较小改造成本和迁移风险的前提下,实现大数据系统的云原生化,充分利用云原生的优势。
本文依次分析了大数据系统当前面临的主要问题、云原生如何解决这些问题、大数据系统云原生改造面临的挑战,基于这些问题和调整,重点介绍了基于Hadoop Yarn on Kubernetes Pod(下文会详细介绍)的渐进式的云原生演进方案及其最佳实践。
2.大数据系统主要问题
传统的大数据系统围绕着Hadoop生态快速的发展,百花齐放,各个企业也逐步建立了自己的大数据平台,甚至是数据中台。然而,在激烈的市场竞争和不断增加的消费期望的双重驱动下,一方面业务需要快速迭代以满足迅速的增长,另一方面需要在资源需求不断增长的同时控制高昂的成本以保持企业的竞争力。这就要求大数据系统能够及时、快速的扩容以满足生产需求,又能尽可能的提高资源的使用效率,降低资源的使用成本。具体的问题体现在以下几点:
- 弹性扩缩容能力无法满足快速增长的业务需求:随着业务的发展,流量和数据量突增,尤其对于实时计算,需要资源能够及时的扩容,以满足业务需求。尽管一些大数据管控平台尝试实现自动的扩缩容(如通过集群负载情况,进行扩容),然而,在传统大数据平台架构下,通常需要资源申请、依赖软件安装、服务部署等一系列步骤,该过程通常比较慢,对于集群负载的缓解,不够及时。
- 在离线分离部署及粗粒度调度无法提高资源的利用率:在传统Hadoop架构下,离线作业和在线作业往往分属不同的集群,然而在线业务、流式作业具有明显的波峰波谷特性,在波谷时段,会有大量的资源处于闲置状态,造成资源的浪费和成本的提升。在离线混部集群,通过动态调度削峰填谷,当在线集群的使用率处于波谷时段,将离线任务调度到在线集群,可以显著的提高资源的利用率。然而,Hadoop Yarn目前只能通过NodeManager上报的静态资源情况进行分配,无法基于动态资源调度,无法很好的支持在线、离线业务混部的场景。
- 操作系统镜像及部署复杂性拖慢应用发布:虚拟机或裸金属设备所依赖的镜像,包含了诸多软件包,如HDFS、Spark、Flink、Hadoop等,系统的镜像远远大于10GB,通常存在镜像过大、制作繁琐、镜像跨地域分发周期长等问题。基于这些问题,有些大数据开发团队不得不将需求划分为镜像类和非镜像类需求,当需要修改镜像的需求积累到一定程度,才统一进行发布,迭代速度受限,当遇到用户紧急且需要修改镜像的需求时,势必面临很大的业务压力。同时,购买资源后,应用的部署涉及到依赖部署、服务部署等环节,进一步拖慢应用的发布。
图1 大数据系统主要问题
以上提到的弹性扩缩容、应用发布效率和资源利用率,是当前大数据系统普遍存在的问题,如何解决和应对这些问题,越来越成为企业较为关心的话题。接下来,我们将从云原生的角度来分析如何解决这些问题。
3. 云原生技术如何解决大数据系统问题
云原生技术如何解决弹性扩容问题: 在云原生架构中,应用程序及其依赖环境已经提前构建在镜像中,应用程序运行在基于该镜像启动的容器中。在业务高峰期,随着业务量的上升,向云原生环境申请容器资源,只需等待镜像下载完成即可启动容器(一般镜像下载时间也是秒级的),当容器启动后,业务应用将立即运行并提供算力,不存在虚拟机的创建、依赖软件安装和服务部署等耗时的环节。而在业务低峰期,删除闲置的容器,即可下线相应的应用程序,以节省资源使用的成本。借助云原生环境和容器技术,可以快速的获取容器资源,并基于应用镜像秒级启动应用程序,实现业务的快速启停,实