
【作者主页】Francek Chen
【专栏介绍】⌈ ⌈ ⌈大数据技术原理与应用 ⌋ ⌋ ⌋专栏系统介绍大数据的相关知识,分为大数据基础篇、大数据存储与管理篇、大数据处理与分析篇、大数据应用篇。内容包含大数据概述、大数据处理架构Hadoop、分布式文件系统HDFS、分布式数据库HBase、NoSQL数据库、云数据库、MapReduce、Hadoop再探讨、数据仓库Hive、Spark、流计算、Flink、图计算、数据可视化,以及大数据在互联网领域、生物医学领域的应用和大数据的其他应用。
【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/BigData_principle_application。
文章目录
-
- [一、Hadoop 的局限与不足](#一、Hadoop 的局限与不足)
- [二、针对 Hadoop 的改进与提升](#二、针对 Hadoop 的改进与提升)
- 小结
本文首先指出 Hadoop 的局限与不足之处,然后介绍针对 Hadoop 的相关改进和提升。
一、Hadoop 的局限与不足
Hadoop 1.0 的核心组件(仅指 MapReduce 和 HDFS,不包括 Hadoop 生态系统内的 Pig、Hive、HBase 等其他组件)主要存在以下不足。
(1)抽象层次低。功能实现需要手工编写代码来完成,有时只是为了实现一个简单的功能,也需要编写大量的代码。
(2)表达能力有限。MapReduce 把复杂分布式编程工作高度抽象为两个函数,即 Map 和 Reduce,在降低开发人员程序开发复杂度的同时,却也带来了表达能力有限的问题,实际生产环境中的一些应用是无法用简单的 Map 和 Reduce 来完成的。
(3)开发者自己管理作业之间的依赖关系。一个作业(Job)只包含 Map 和 Reduce 两个阶段,通常的实际应用问题需要大量的作业进行协作才能顺利解决,这些作业之间往往存在复杂的依赖关系,但是 MapReduce 框架本身并没有提供相关的机制对这些依赖关系进行有效管理,只能由开发者自己管理。
(4)难以看到程序整体逻辑。用户的处理逻辑都隐藏在代码细节中,没有更高层次的抽象机制对程序整体逻辑进行设计,这就给代码理解和后期维护带来了障碍。
(5)执行迭代操作效率低。对于一些大型的机器学习、数据挖掘任务,往往需要多轮迭代才能得到结果。采用 MapReduce 实现这些算法时,每次迭代都是一次执行 Map、Reduce 任务的过程,这个过程的数据来自分布式文件系统 HDFS,本次迭代的处理结果也被存放到 HDFS 中,继续用于下一次迭代过程。反复读写 HDFS 中的数据,大大降低了迭代操作的效率。
(6)资源浪费。在 MapReduce 框架设计中,Reduce 任务需要等待所有 Map 任务都完成后才可以开始,造成了不必要的资源浪费。
(7)实时性差。只适用于离线批数据处理,无法支持交互式数据处理、实时数据处理。
二、针对 Hadoop 的改进与提升
针对 Hadoop 1.0 存在的局限和不足,在后续发展过程中,Hadoop 对 MapReduce 和 HDFS 的许多方面做了有针对性的改进提升(见表1),同时在 Hadoop 生态系统中也融入了更多的新成员,使得 Hadoop 功能更加完善,比较有代表性的产品包括 Pig、Oozie、Tez、Kafka 等(见表2)。
表1 Hadoop框架自身的改进:从1.0到2.0
| 组件 | Hadoop 1.0 的问题 | Hadoop 2.0 的改进 |
|---|---|---|
| HDFS | 单一名称节点,存在单点失效问题 | 设计了 HDFS HA,提供名称节点热备份机制 |
| HDFS | 单一命名空间,无法实现资源隔离 | 设计了 HDFS 联邦,管理多个命名空间 |
| MapReduce | 资源管理效率低 | 设计了新的资源管理框架 YARN |
表2 不断完善的Hadoop生态系统
| 组件 | 功能 | 解决 Hadoop 中存在的问题 |
|---|---|---|
| Pig | 处理大规模数据的脚本语言,用户只需要编写几条简单的语句,系统会自动转换为 MapReduce 作业 | 抽象层次低,需要手工编写大量代码 |
| Oozie | 工作流和协作服务引擎,协调 Hadoop 上运行的不同任务 | 没有提供作业依赖关系管理机制,需要用户自己处理作业之间的依赖关系 |
| Tez | 支持 DAG 作业的计算框架,对作业的操作进行重新分解和组合,形成一个大的 DAG 作业,减少不必要操作 | 不同的 MapReduce 任务之间存在重复操作,降低了效率 |
| Kafka | 分布式发布订阅消息系统,一般作为企业大数据分析平台的数据交换枢纽,不同类型的分布式系统可以统一接入 Kafka,实现和 Hadoop 各个组件之间的不同类型数据的实时高效交换 | Hadoop 生态系统中各个组件和其他产品之间缺乏统一的、高效的数据交换中介 |
在后面的内容中,将首先介绍 HDFS 的新特性(包括 HDFS HA 和 HDFS 联邦);然后介绍 Hadoop 中新的资源管理框架 YARN,YARN 是在 MapReduce 1.0 框架基础之上发展起来的;最后介绍 Hadoop 生态系统中具有代表性的几个组件及其解决的问题。
小结
本文系统梳理了 Hadoop 1.0 的核心局限及其后续改进。首先指出 MapReduce 和 HDFS 存在的七大不足:抽象层次低、表达能力有限、无作业依赖管理、缺乏整体逻辑视图、迭代计算效率低、Reduce 等待 Map 造成资源浪费,以及仅适用于离线批处理、实时性差。针对这些问题,Hadoop 2.0 在框架层面做了重要改进:HDFS 引入 HA 机制解决单点故障,采用联邦架构实现多命名空间和资源隔离,MapReduce 则演进为 YARN 资源管理框架,显著提升了资源管理效率。与此同时,Hadoop 生态系统不断丰富,Pig 以脚本语言简化编码、Oozie 管理工作流依赖、Tez 通过 DAG 优化减少重复操作、Kafka 作为统一数据交换枢纽,分别针对性地弥补了 Hadoop 1.0 的短板。整体而言,Hadoop 从单一批处理框架逐步发展为功能完备、实时高效的大数据生态平台。
欢迎 点赞👍 | 收藏⭐ | 评论✍ | 关注🤗
