Apache Hadoop Yarn 与 Kubernetes
Apache Hadoop Yarn vs. Kubernetes
- 自版本 2.6 (Apache Hadoop) Yarn 处理 docker 个容器。基本上它在 Hadoop 集群上分配请求数量的容器,重启失败的容器等等。
- Kubernetes 似乎在做 相同的。
主要区别在哪里?
虽然 this question and answer 不 完全 您要问的,但它确实触及了许多相同的要点。
最后我看到,Yarn只是一种资源共享机制,而Kubernetes是一个完整的平台,包括ConfigMaps、声明式环境管理、Secret管理、Volume Mounts,超级好设计 API 用于与所有这些东西交互,基于角色的访问控制和 Kubernetes 得到广泛使用,这意味着人们可以很容易地找到要雇用的候选人和要购买的工具。
A blog post I found cited a master's thesis 描述了不同调度程序的世界观之间的一些有趣的权衡。这是很多词,所以如果你正在寻找 tl;dr 答案,link 可能不是,但如果你正在寻找关于该主题的实际研究,它似乎是合理的。
Kubernetes 几乎是从一个全新的平台开发的,用于扩展 Docker 容器内核成为一个平台。 Kubernetes 开发采用自下而上的方法。它在指定每个 container/pod 资源需求方面有很好的优化,但它缺乏一个有效的全局调度程序,可以将资源划分为逻辑分组。 Kubernetes 设计允许多个调度程序在集群中 运行。每个调度程序在其自己的 pods 内管理资源。但是,当应用程序需要的资源超过物理系统可以处理的资源时,Kubernetes 集群可能会不稳定。它在超出应用程序需求的基础设施容量方面表现最佳。 Kubernetes 调度程序将尝试用传入的应用程序请求填充空闲节点
并终止低优先级和饥饿容器以提高资源利用率。 Kubernetes 容器可以与 S3 等外部存储系统集成,为数据提供弹性。 Kubernetes 框架使用 etcd 来存储集群数据。 Etcd 集群节点和 Hadoop Namenode 都是 Kubernetes 或 Hadoop 平台中的单点故障。 Etcd 可以比 Namenode 有更多的副本,因此,从可靠性的角度来看,理论上似乎有利于 Kubernetes。但是,Kubernetes 安全性默认是开放的,除非 RBAC 定义了细粒度的角色绑定。 pods 的安全上下文设置正确。如果省略,pod 的主要组将默认为 root,这对于试图保护基础设施的系统管理员来说可能会有问题。
Apache Hadoop YARN 被开发为 运行 独立的 java 进程来处理大数据工作负载,然后改进以支持 Docker 容器。 YARN 提供全局级别的资源管理,例如用于将物理资源划分为逻辑单元的容量队列。每个业务单元可以分配集群资源的百分比。容量资源共享系统的设计有利于保证资源
企业优先级的可用性,而不是挤压所有可用的物理资源。 YARN 确实在安全性方面得分更高。还有更多
Kerberos 中的安全功能、privileged/non-privileged 容器的访问控制、受信任的 docker 图像和放置策略约束。大多数 docker
相关安全性默认关闭,系统管理员需要手动打开标志以授予容器更多权力。大型企业更倾向于运行 Hadoop
与 Kubernetes 相比,因为保护系统的成本更低。在 YARN 之上构建了更多分布式 SQL 引擎,包括 Hive、Impala、SparkSQL 和 IBM BigSQL。
数据库选项使 YARN 成为一个有吸引力的选项,因为它能够 运行 在容器中进行在线事务处理,以及使用批处理工作负载进行在线分析处理。 Hadoop Developer 工具链可能会让人不知所措。 Mapreduce、Hive、Pig、Spark等,各有各的开发风格。用户体验不一致,需要一段时间才能全部了解。相比之下,Kubernetes 感觉障碍较小,因为它只部署 docker 个容器。随着向 运行 引入 YARN 服务
Docker 容器工作负载,YARN 可以感觉没有 Kubernetes 罗嗦。
如果您的计划是将 IT 运营外包给 public 云,请选择 Kubernetes。如果您的计划是构建 private/hybrid/multi-clouds,请选择 Apache YARN。
- 自版本 2.6 (Apache Hadoop) Yarn 处理 docker 个容器。基本上它在 Hadoop 集群上分配请求数量的容器,重启失败的容器等等。
- Kubernetes 似乎在做 相同的。
主要区别在哪里?
虽然 this question and answer 不 完全 您要问的,但它确实触及了许多相同的要点。
最后我看到,Yarn只是一种资源共享机制,而Kubernetes是一个完整的平台,包括ConfigMaps、声明式环境管理、Secret管理、Volume Mounts,超级好设计 API 用于与所有这些东西交互,基于角色的访问控制和 Kubernetes 得到广泛使用,这意味着人们可以很容易地找到要雇用的候选人和要购买的工具。
A blog post I found cited a master's thesis 描述了不同调度程序的世界观之间的一些有趣的权衡。这是很多词,所以如果你正在寻找 tl;dr 答案,link 可能不是,但如果你正在寻找关于该主题的实际研究,它似乎是合理的。
Kubernetes 几乎是从一个全新的平台开发的,用于扩展 Docker 容器内核成为一个平台。 Kubernetes 开发采用自下而上的方法。它在指定每个 container/pod 资源需求方面有很好的优化,但它缺乏一个有效的全局调度程序,可以将资源划分为逻辑分组。 Kubernetes 设计允许多个调度程序在集群中 运行。每个调度程序在其自己的 pods 内管理资源。但是,当应用程序需要的资源超过物理系统可以处理的资源时,Kubernetes 集群可能会不稳定。它在超出应用程序需求的基础设施容量方面表现最佳。 Kubernetes 调度程序将尝试用传入的应用程序请求填充空闲节点 并终止低优先级和饥饿容器以提高资源利用率。 Kubernetes 容器可以与 S3 等外部存储系统集成,为数据提供弹性。 Kubernetes 框架使用 etcd 来存储集群数据。 Etcd 集群节点和 Hadoop Namenode 都是 Kubernetes 或 Hadoop 平台中的单点故障。 Etcd 可以比 Namenode 有更多的副本,因此,从可靠性的角度来看,理论上似乎有利于 Kubernetes。但是,Kubernetes 安全性默认是开放的,除非 RBAC 定义了细粒度的角色绑定。 pods 的安全上下文设置正确。如果省略,pod 的主要组将默认为 root,这对于试图保护基础设施的系统管理员来说可能会有问题。
Apache Hadoop YARN 被开发为 运行 独立的 java 进程来处理大数据工作负载,然后改进以支持 Docker 容器。 YARN 提供全局级别的资源管理,例如用于将物理资源划分为逻辑单元的容量队列。每个业务单元可以分配集群资源的百分比。容量资源共享系统的设计有利于保证资源 企业优先级的可用性,而不是挤压所有可用的物理资源。 YARN 确实在安全性方面得分更高。还有更多 Kerberos 中的安全功能、privileged/non-privileged 容器的访问控制、受信任的 docker 图像和放置策略约束。大多数 docker 相关安全性默认关闭,系统管理员需要手动打开标志以授予容器更多权力。大型企业更倾向于运行 Hadoop 与 Kubernetes 相比,因为保护系统的成本更低。在 YARN 之上构建了更多分布式 SQL 引擎,包括 Hive、Impala、SparkSQL 和 IBM BigSQL。 数据库选项使 YARN 成为一个有吸引力的选项,因为它能够 运行 在容器中进行在线事务处理,以及使用批处理工作负载进行在线分析处理。 Hadoop Developer 工具链可能会让人不知所措。 Mapreduce、Hive、Pig、Spark等,各有各的开发风格。用户体验不一致,需要一段时间才能全部了解。相比之下,Kubernetes 感觉障碍较小,因为它只部署 docker 个容器。随着向 运行 引入 YARN 服务 Docker 容器工作负载,YARN 可以感觉没有 Kubernetes 罗嗦。
如果您的计划是将 IT 运营外包给 public 云,请选择 Kubernetes。如果您的计划是构建 private/hybrid/multi-clouds,请选择 Apache YARN。