前言

本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系

正文

在这里插入图片描述

YARN

Hadoop 和 Hadoop 之间的最大不同是 YARN 。
YARN 是“ Yet Another Resource Negotiator ”的缩写。
Hadoop 仅仅是 HDFS 和 MapReduce 计算框架的组合。
正如我们所看到的,在 Hadoop 中, YARN 位于 HDFS 层(依赖于服务器本地存储)和计算框架(如 MapReduce 、 Spark )之间。
YARN 的主要功能是进行资源管理和调度。
在 Hadoop 中, MapReduce 是你实际可使用的唯一的计算框架,它直接与 HDFS 进行交互。
在 Hadoop 中, MapReduce 以与 Hadoop 中类似的方式执行数据处理。
那么哪个 Hadoop 组件在 Hadoop 中执行了集群资源管理和任务调度呢?
MapReduce 执行数据处理和集群资源管理的双重任务。

架构区别

Hadoop 1 使用 MRvl 而 Hadoop 使用 MRv2 (也称为 YARN )。
在 Hadoop 2 中,有一个全局 ResourceManager 进程来管理集群中的资源,且它运行在主节点上。
工作节点上将有单独的 NodeManager 进程来执行数据处理任务。

在 Hadoop 1 中,有一个单独的进程 JobTracker 来管理作业。
每个工作节点运行个工作于特定节点的 TaskTracker 进程来实际执行作业。
Hadoop 1 中的 JobTracker 负责执行调度和任务管理功能。
在 Hadoop 2 中, JobTracker 被分为调度和资源管理两个功能:

  • ResourceManager 处理调度任务;
  • ApplicationMaster 负责特定应用的资源管理。

Hadoop 2 中的 ResourceManager 管理着以前由 Hadoop 中的 JobTracker 执行的几个关键功能。
更准确地说, ResourceManager 执行 JobTracker 的一些任务,新的特定应用的 ApplicationMaster 负责 JobTracker 其余的工作。
在 Hadoop 1 中, JobTracker 在繁忙的集群中超负荷运转,因为它同时负责资源管理和任务调度双重任务。
JobTracker 资源管理和作业调度/监控两个关键功能的分离减轻了专用守护程序的工作压力。

Hadoop 2 中的 NodeManager 执行 Hadoop 中运行在每个节点上的 TaskTracker 负责的所有任务。
NodeManager 进程在集群中的工作节点上运行,并作为代理监视当前节点上任务的执行 ResourceManager 在 Hadoop 中作为纯调度器使用,它与 MapReduce 之间没有特殊连接。
而在 Hadoop 1 中, JobTracker 与 MapReduce 是高度耦合的。

高可用性

Hadoop 2 具有超高的可用性,可让你运行 Standby NameNode 和 Standby ResourceManager 服务,这两者都对集群运行至关重要。

在 Hadoop 1 中, NameNode 只有一个,存在单点故障风险。 如果 NameNode 服务器不可用,则对 HDFS 的所有访问都将被中断,导致整个集群不可用。

多计算引擎

在 Hadoop 1 中,无论使用 MapReduce 、 Hive 、 Pig 还是 Python 、 Ruby 的流模型,你只能使用 MapReduce 作为处理引擎。 根本没有可用的替代引擎。
Hadoop 2 提供了多种处理引擎,如 MapReduce 、 Apache Spark 、 Apache Tez 等。

Hadoop 2 不仅支持批处理,而且支持多种应用类型,如:

  • 批处理 MapReduce 、 Hive / Pig 和 Apache Tez
  • 交互式 SQL 引擎- Apache Tez
  • 在线数据库一 HBase
  • 流式处理 Apache Storm 、 Apache Spark 和 Apache Flink
  • 内存模式(迭代应用)ー- Apache Spark
  • 图计算-- Giraph 、 Spark Graphx
  • HPC MPI - OpenMPI
  • 可扩展搜索. Apache Solr
  • Hbase on YARN HOYA

虽然 MapReduce 可以胜任多种类型的工作,但是它并不适合所有的大数据用例。

Hadoop 1 一个经常为人诟病的地方是高延迟。
在 Hadoop 2 中,可以根据特定的用例类型,选择合适的计算引擎。

Hadoop 1 用批处理的方式处理海量数据,在这种情况下,时间延迟并不是问题。
虽然 Hadoop 1 非常善于处理甚至包含 PB 级信息的大型非结构化数据集,但在实时数据集的实时分析中并不十分有效。
Hadoop 2 打破了 Hadoop 1 以批处理为中心的这种定位。

分离处理和调度

Hadoop 2 中的 YARN (下一代 MapReduce ,被称为 YARN 或 MRv2 )标志着 Hadoop 在执行基本工作时有了根本性的不同。

YARN 被设计为一个通用的分布式应用程序管理框架,而不是像 MapReduce 在 Hadoop 1 中作为一体化资源管理器和性能引擎。

实际上,在更多情况下, YARN 被称为“ Hadoop 操作系统”,因为它执行如下功能:

  • 维护了一个可以使批处理、交互式和实时处理等计算引擎同时访问相同 HDFS 数据的多租户环境。
  • 监控和管理应用的负载。

Hadoop 2 中的 MapReduce (也称为 MRv2 )保留了它的处理能力,并成为了一个纯粹的分布式计算框架。

资源分配

最初, Hadoop 1 没有在同时运行的各种作业之间采用复杂的方式进行资源分配,而是采用了先进先出的资源分配模型,

这也意味着,长时间运行的作业会长期占用资源,这会有潜在的风险,会导致小而重要的作业因为长而不重要的作业占用资源而无法启动。

在 Hadoop 的后续版本中,引入了名为“公平调度器”和“容量调度器”的复杂作业调度程序。

在 Hadoop 1 中,使用插槽( slots )的方式来管理资源,而在 Hadoop 2 中,则使用容器( container )来管理资源。

最后, Hadoop 1 和 Hadoop 2 在扩展能力上的最大差别在于, Hadoop 1 集群只可以扩展到大约 5000 个节点,而 Hadoop 2 集群可以扩展到 10000 个节点。

上一篇 下一篇