Hadoop 起源于万维网的早期。随着网络发展到数百万个甚至数十亿个网页,搜索和返回搜索结果的任务已成为最突出的挑战之一。Google、Yahoo 和 AltaVista 等初创公司开始构建框架来自动获取搜索结果。其中一个项目叫做 Nutch,由计算机科学家 Doug Cutting 和 Mike Cafarella 根据 Google 早期在 MapReduce(稍后会详细介绍)和 Google File System 方面的工作构建而成。Nutch 最终迁移到 Apache 开源软件基础,并拆分到 Nutch 和 Hadoop 之间。2006 年,Cutting 开始在 Yahoo 工作,而 Yahoo 在 2008 年开放了 Hadoop 的源代码。
虽然 Hadoop 有时被称作面向高可用性分布式对象的平台的首字母缩略词,但它最初是以 Cutting 儿子的玩具大象命名的。
Hadoop 是基于 Java 的开源框架,可为应用管理大量数据的存储和处理。Hadoop 使用分布式存储和并行处理来处理大数据和分析作业,将工作负载分解为可同时运行的较小工作负载。
Hadoop 框架主要由四个模块组成,这四个模块协同运行以形成 Hadoop 生态系统:
Hadoop 分布式文件系统 (HDFS):作为 Hadoop 生态系统的主要组成部分,HDFS 是一个分布式文件系统,在该系统中,各个 Hadoop 节点都对其本地存储空间中的数据执行操作。这样可以消除网络延迟,实现对应用数据的高吞吐量访问。此外,管理员无需预先定义架构。
Yet Another Resource Negotiator (YARN):YARN 是一个资源管理平台,负责管理集群中的计算资源并使用它们来调度用户的应用。它在整个 Hadoop 系统上执行调度和资源分配。
MapReduce:MapReduce 是一个用于大规模数据处理的编程模型。在 MapReduce 模型中,较大数据集的子集和处理子集的指令会被分派到多个不同的节点,其中每个子集都由一个节点与其他处理作业并行处理。处理结果后,各个子集会合并到一个更小、更易于管理的数据集中。
Hadoop Common:Hadoop Common 包括其他Hadoop 模块使用和共享的库和实用程序。
除了 HDFS、YARN 和 MapReduce 以外,整个 Hadoop 开源生态系统仍在不断发展,其中包括许多可帮助收集、存储、处理、分析和管理大数据的工具和应用。例如 Apache Pig、Apache Hive、Apache HBase、Apache Spark、Presto 和 Apache Zeppelin。
Hadoop 支持在商用硬件集群中分布数据集。同时在多个服务器上并行执行处理。
软件客户端将数据输入到 Hadoop 中。HDFS 用于处理元数据和分布式文件系统。然后,MapReduce 会处理和转换数据。最后,YARN 在整个计算集群中划分作业。
所有 Hadoop 模块的设计均基于以下基本假设:单个机器或多个机器的硬件故障很常见,应由框架在软件中自动处理。
可伸缩性
Hadoop 是快速存储和处理海量数据的主要工具之一, 它通过使用分布式计算模型来实现这一点,该模型支持快速处理可通过添加计算节点快速扩缩的数据。
费用低
作为一个可以在商品硬件上运行并且拥有庞大的工具生态系统的开源框架,Hadoop 是存储和管理大数据的低成本方案。
灵活性
Hadoop 可提供数据存储的灵活性,因为数据在存储之前不需要预处理,这意味着组织可以存储任意数量的数据,并在以后使用。
弹性
作为一种分布式计算模型,Hadoop 支持容错和系统弹性,这意味着,如果其中一个硬件节点发生故障,作业会重定向到其他节点。存储在一个 Hadoop 集群中的数据会在系统内的其他节点上复制,以防范硬件或软件故障。
作为一个文件密集型系统,MapReduce 可能难以用于复杂的作业(例如交互式分析任务)。MapReduce 函数也需要用 Java 编写,并且可能需要很长的学习时间。MapReduce 生态系统非常庞大,许多组件对应不同的功能,因此很难确定要使用哪些工具。
由于 Hadoop 需要处理如此庞大的数据集,因此可能会出现数据敏感和保护方面的问题。关于身份验证、加密、审核和预配工具的生态系统已经兴起,可帮助开发者保护 Hadoop 中的数据。
Hadoop 没有太多强大的数据管理和治理工具,也不适用于数据质量和标准化。
与许多编程领域一样,Hadoop 也存在众所周知的人才短缺。要找到同时具备 Java 必备技能以便对 MapReduce、操作系统和硬件进行编程的开发者绝非易事。此外,MapReduce 学习难度较大,这使得新程序员很难快速掌握其最佳实践和生态系统。
研究公司 IDC 估计,在物联网、社交媒体、边缘计算和云端创建的数据的推动下,2020 年创建或复制了 62.4 ZB 的数据。该公司预测,从 2020 年到 2025 年的数据预计每年将增长 23%。虽然并非所有数据都会得到保存(数据在使用后会被删除或被覆盖),但全世界的数据需求仍在增长。
Hadoop 拥有庞大的开源工具生态系统,可以增强和扩展核心模块的功能。用于 Hadoop 的一些主要软件工具包括:
Apache Hive:一种数据仓库,允许程序员使用名为 HiveQL 的查询语言(类似于 SQL)处理 HDFS 中的数据
Apache HBase:一种开源非关系型分布式数据库,通常与 Hadoop 搭配使用
Apache Pig:一种在 MapReduce 上用作抽象层的工具,用于分析大量数据,并启用过滤、排序、加载和加入等功能
Apache Impala:开源的大规模并行处理 SQL 查询引擎,通常与 Hadoop 搭配使用
Apache Sqoop:一种命令行界面应用,用于在关系型数据库和 Hadoop 之间高效传输批量数据
ApacheZooKeeper:一种开源服务器,能够在 Hadoop 中实现可靠的分布式协调;一项用于“维护配置信息、命名、提供分布式同步和提供群组服务”的服务
Apache Oozie:Hadoop 作业的工作流调度器
以下是 Apache Hadoop 的常见使用场景:
分析和大数据
许许多多的公司和组织将 Hadoop 用于研究、生产数据处理和分析,这些任务需要处理 TB 级或 PB 级的大数据、存储各种数据集以及进行数据并行处理。
数据存储和归档
由于 Hadoop 支持在商品硬件上进行大容量存储,因此它适合作为各类数据的低成本存储方案,例如事务、点击流或传感器和机器数据。
数据湖
由于 Hadoop 可以帮助存储数据而无需预处理,因此可用于对存储大量未优化数据的数据湖进行补充。
营销分析
营销部门通常使用 Hadoop 来存储和分析客户关系管理 (CRM) 数据。
风险管理
银行、保险公司和其他金融服务公司使用 Hadoop 构建风险分析和管理模型。
AI 和机器学习
Hadoop 生态系统有助于为机器学习应用处理数据和模型训练操作。