Hadoop 介绍
Hadoop 是由 Apache 开发的开源框架,用于处理分布式环境中的海量数据。Hadoop 使用 Java 编写,通过简单的编程模型允许在集群中进行大规模数据集的存储和计算。它具备高可靠性、容错性和扩展性。
- 分布式存储:Hadoop 支持跨集群的分布式存储。
- 分布式计算:Hadoop 使用简单的 MapReduce 编程模型进行计算。
- 扩展性:Hadoop 可以从单一节点扩展到数千台机器,并且扩展过程中无需停机。
Hadoop 的关键组件
Hadoop 的架构由三个核心部分组成:
HDFS(Hadoop Distributed File System):分布式文件系统,是数据存储层。
MapReduce:分布式计算框架,用于并行处理数据。
YARN(Yet Another Resource Negotiator):资源管理和任务调度系统。
Hadoop 的架构
Hadoop 的架构基于主从模型,分为:
- Master 节点:负责管理、维护和监控集群,存储元数据。
- Slave 节点:负责存储数据并执行计算任务,可以扩展到数千个节点。
- 任务分发:客户端通过 Master 节点分发任务,Master 将任务调度到 Slave 节点上执行。
Hadoop 组件
-
HDFS(分布式文件系统)
HDFS 是 Hadoop 的数据存储层,负责将海量数据以分布式的方式存储在多个节点上。架构:
NameNode(主节点):存储元数据并管理 DataNode。
DataNode(从节点):存储实际的数据块并执行操作。
特点:
数据文件会分割成多个块(默认块大小为 128MB)。
数据块按照复制因子(默认 3 个副本)分布在不同节点,以保证容错性和可靠性。
示例:
假设有一个 640MB 的文件,将会被分成 5 个 128MB 的数据块,并存储在多个节点上。 -
MapReduce
MapReduce 是 Hadoop 的分布式计算框架,用于处理海量数据。它将计算任务分割成多个小任务并分发到不同的节点进行并行处理。
工作流程:
(1)将输入数据分割成块并分发到各个节点。
(2)Map 阶段:将任务划分为键值对形式的中间结果。
(3)Shuffle 阶段:对 Map 的输出进行排序和分区。
(4)Reduce 阶段:对分区后的数据进行汇总和计算。
特点:
将计算任务移动到离数据最近的节点执行,减少数据传输开销。
支持大规模数据的并行处理。 -
YARN(资源管理)
YARN 是 Hadoop 的资源管理系统,用于管理集群的计算资源(CPU、内存、磁盘等)并调度任务。
架构:
ResourceManager(主节点):负责全局资源的管理和分配。
NodeManager(从节点):负责节点资源的本地管理,运行容器(Container)。
ApplicationMaster:为每个任务分配资源并跟踪任务执行状态。
特点:
提供高效的资源管理。
支持多种框架运行在同一集群上。
Hadoop 守护进程
Hadoop 的关键守护进程分为以下几类:
(1)HDFS:
NameNode:运行在 Master 节点上,存储元数据。
DataNode:运行在 Slave 节点上,存储数据块。
(2)YARN:
ResourceManager:运行在 Master 节点上,管理全局资源。
NodeManager:运行在 Slave 节点上,管理本地资源。
(3)其他进程:
Secondary NameNode:辅助 NameNode 进行元数据的备份。
JobHistoryServer:负责存储任务的历史记录。
Hadoop 的工作原理
数据存储:
输入数据被切分成若干个块(默认 128MB),并存储到不同的节点(DataNode)上。
任务分配:
用户通过 Master 节点提交任务。
Master 将任务分发到离数据最近的节点上执行。
数据处理:
每个节点独立处理数据,并将中间结果写回 HDFS。
结果输出:
所有节点处理完成后,输出最终结果。
Hadoop 生态系统中的组件
除了核心组件(HDFS、YARN 和 MapReduce),Hadoop 生态系统还包含许多其他工具,扩展了 Hadoop 的功能:
组件 | 功能描述 |
---|---|
HBase | 基于 HDFS 的列式存储数据库,适合存储海量稀疏数据集。 |
Hive | 数据仓库工具,支持使用类似 SQL 的语言查询大数据。 |
Pig | 高级脚本语言,用于编写复杂的数据处理流程,无需开发 Java 代码。 |
Flume | 用于高效实时收集和传输日志数据。 |
Sqoop | 用于在 Hadoop 和关系型数据库之间传输数据。 |
Oozie | 用于调度和管理 Hadoop 作业的执行时间和频率。 |
Zookeeper | 提供分布式配置管理、命名空间和同步服务。 |
Mahout | 可扩展的机器学习算法库。 |