之前的文章聊了 Hadoop、HDFS、MapReduce、Hive、Spark、Storm、Flink、HBase以及各种数据集成工具。
其实在大数据技术中还有一个特别重要的技术,那就是Yarn。
作为 Hadoop2.0从 MapReduce 中分离出来的组件,Yarn 已经是一个通用的资源调度管理平台,MapReduce 也可以专注于计算任务的调度工作。
那资源调度是干什么的?
简单来说,大数据的存储和计算通常会由集群中的多个节点共同完成,这些节点就是资源。Yarn 知道集群中有哪些资源可用、哪些不可用,无论是 MapReduce、Spark 或 Flink 都可以通过 Yarn 统一安排资源,统一使用集群中的资源。这样,在一个大数据平台中,如果涉及到多个计算引擎,也不用部署多个资源管理集群。
在学习过程中可能会发现 MapReduce、Spark 和 Flink 也有自己的资源管理器,随之产生疑问:“各计算引擎知道自己的数据在哪,可以进行任务调度,Yarn 是怎么知道数据在哪?怎么进行任务调度?”
Yarn 确实不知道,但是你的程序会在 Yarn 中执行(ApplicationMaster),在申请资源时 Yarn 会返回一堆的资源交给计算引擎。任务调度最终还是各计算引擎自己去调度,各计算引擎需要做的就是实现 Yarn 提供的接口,例如 MapReduce 的 MRAppMaster。所以,只要实现了 Yarn 的接口规范,都可以被 Yarn 调度管理。
像 Yarn、K8s这样的资源调度平台,都是把资源的管理、分配以及计算任务调度、容错做到了自动化,可以提高资源的利用率,也可以减少开发运维人员的工作量。