Apache Hadoop 软件是一个开源框架,支持使用简单的编程模型跨计算机集群对大型数据集进行分布式存储和处理。Hadoop 支持从一台计算机扩容至包含数千台计算机的集群,其中每台机器均提供本地计算和存储功能。通过这种方式,Hadoop 可以高效存储和处理从 GB 级到 PB 级的大型数据集。
了解如何使用 Managed Service for Apache Spark 在 Google Cloud 上以更简单、更经济实惠的集成方式运行 Apache Hadoop 集群。
Hadoop 起源于万维网的早期时代。随着网络发展到数百万甚至数十亿个网页,搜索和返回搜索结果的任务成为最突出的挑战之一。Google、Yahoo 和 AltaVista 等初创公司开始构建框架来自动获取搜索结果。计算机科学家 Doug Cutting 和 Mike Cafarella 基于 Google 早期在 MapReduce(稍后会详细介绍)和 Google File System 方面的工作,构建了一个名为 Nutch 的项目。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:一种数据仓库,可让程序员使用一种类似于 SQL 的查询语言 HiveQL 处理 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 生态系统有助于为机器学习应用处理数据和模型训练操作。