【大数据处理与分析】Hadoop再探讨:01 Hadoop的优化

【作者主页】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 从单一批处理框架逐步发展为功能完备、实时高效的大数据生态平台。

欢迎 点赞👍 | 收藏⭐ | 评论✍ | 关注🤗