hadoop的三大结构及其各自的作用
Hadoop 主要有三大核心组件,分别是 HDFS(Hadoop Distributed File System)、MapReduce 和 YARN,以下是它们各自的作用:
HDFS(Hadoop Distributed File System)
存储数据:HDFS 是一个分布式文件系统,用于存储海量的数据。它采用主从(Master - Slave)架构,由一个 NameNode 和多个 DataNode 组成。NameNode 管理文件系统的命名空间,维护着整个文件系统的目录树结构、文件和目录的元数据(例如文件的权限、修改时间、块位置信息等),就像图书馆的目录索引一样。
数据冗余备份:HDFS 提供了数据冗余备份机制,以防止数据丢失。默认情况下,每个数据块会在多个不同的 DataNode 上进行备份(通常备份系数为 3)。这样,当某个 DataNode 出现故障时,数据不会丢失,可以从其他备份的数据块中恢复。这种冗余策略确保了数据的高可用性和容错性,适合处理大规模数据存储场景,如数据仓库、日志存储等。
MapReduce
数据处理:MapReduce 是一种编程模型,用于大规模数据集(大于 1TB)的并行处理。它主要包含两个阶段:Map 阶段和 Reduce 阶段。在 Map 阶段,数据被分割成多个小的数据集,这些小数据集可以在集群中的不同节点上并行处理。例如,对于一个存储了网站访问日志的数据集,Map 阶段可以对每条日志记录进行处理,提取出诸如访问时间、访问 IP、访问页面等信息。每个 Map 任务处理一个数据分片,并且产生一系列的键值对(Key - Value)作为中间结果。这些中间结果会被传输到 Reduce 阶段进行汇总和处理。Reduce 阶段则根据相同的键(Key)对中间结果进行合并和进一步处理。例如,在统计网站每个页面的访问次数时,Reduce 阶段可以将相同页面的访问次数相加,得到最终的统计结果。
资源分配与任务调度:MapReduce 框架负责合理分配计算资源,使得多个 Map 任务和 Reduce 任务能够在集群的各个节点上高效地运行。它根据任务的优先级、数据本地性等因素来调度任务。数据本地性是指尽量将计算任务分配到存储数据的节点上,这样可以减少数据传输的开销,提高处理效率。通过这种方式,MapReduce 能够充分利用集群的计算资源,实现对大规模数据的高效处理,适用于数据挖掘、机器学习、日志分析等各种数据密集型应用场景。
YARN(Yet Another Resource Negotiator)
资源管理与调度:YARN 是 Hadoop 的资源管理系统,它负责集群中各种资源(如 CPU、内存等)的分配和管理。YARN 将资源管理从具体的数据处理框架(如 MapReduce)中分离出来,使得多个不同类型的计算框架可以共享集群资源。它主要由 ResourceManager、NodeManager 和 ApplicationMaster 组成。ResourceManager 是整个集群资源的管理者,负责接收和处理客户端的资源请求,为应用程序分配资源。NodeManager 运行在集群中的每个节点上,负责管理本节点的资源,如监控资源使用情况、启动和停止容器(Container)等。容器是 YARN 中资源分配的基本单位,它封装了一定量的 CPU、内存等资源,用于运行应用程序的任务。
应用程序管理:YARN 为应用程序提供了运行环境和资源保障。当一个应用程序提交到 YARN 集群时,YARN 会为该应用程序分配一个 ApplicationMaster。ApplicationMaster 负责与 ResourceManager 协商资源,根据应用程序的需求向 NodeManager 申请容器来运行任务。它还负责监控任务的运行状态,当任务失败时可以重新申请资源和重启任务。这种架构使得不同的应用程序可以在同一个集群中互不干扰地运行,提高了集群资源的利用率和灵活性,支持多种类型的大数据应用,如批处理、交互式查询、流处理等。