hadoop的三大结构及各自的作用
1. HDFS(Hadoop Distributed File System)
结构:
-
NameNode:是HDFS的主节点,负责管理文件系统的元数据(如文件和目录的结构、文件块的存储位置等)。它维护着文件系统树以及文件树中所有文件和文件夹的元数据。
-
DataNode:是HDFS的从节点,负责存储实际的数据块。数据会被分割成固定大小的块(默认是128MB),然后分散存储在不同的DataNode上。
-
Secondary NameNode:辅助NameNode,帮助NameNode进行元数据的检查点操作,定期合并fsimage(文件系统镜像)和editlog(编辑日志),减轻NameNode的压力。
作用:
-
高容错性:通过在多个DataNode上存储数据的多个副本(默认是3副本),HDFS能够自动保存多个副本,当某个节点出现故障时,可以从其他副本中恢复数据。
-
高吞吐量:适合大规模数据集的处理,能够以较高的吞吐量来访问数据。它通过分布式存储,将数据分散到多个节点上,从而提高数据的读写效率。
-
适合大数据存储:能够存储海量的数据,支持大规模数据的存储和处理。
-
高可靠性:通过NameNode对元数据的管理和DataNode对数据块的存储,保证了数据的完整性和可靠性。
2. MapReduce
结构:
-
JobTracker:在早期版本的Hadoop中,负责调度和管理MapReduce作业。它会将作业分解为多个任务,并分配给TaskTracker去执行。
-
TaskTracker:负责执行具体的Map和Reduce任务,并将任务的执行情况汇报给JobTracker。
-
在Hadoop 2.x及以后版本中,MapReduce的资源管理职责被转移到了YARN框架中,由YARN的ResourceManager和NodeManager来管理资源分配和任务调度。
作用:
-
分布式计算:MapReduce是一种分布式计算模型,能够将大规模数据的处理任务分解为多个小任务,并在多个节点上并行执行,从而提高计算效率。
-
易于编程:提供了简单的编程模型,用户只需要编写Map函数和Reduce函数,就可以实现大规模数据的处理。Map函数负责处理输入的键值对,生成中间结果;Reduce函数负责对中间结果进行归并,生成最终结果。
-
高效处理大规模数据:适合处理海量数据,能够高效地对大规模数据进行批处理。通过分布式计算,将数据分散到多个节点上进行处理,大大提高了数据处理的速度。
-
容错性:具有良好的容错机制,当某个节点出现故障时,会自动重新分配任务到其他正常节点上执行,保证作业的正常完成。
3. YARN(Yet Another Resource Negotiator)
结构:
-
ResourceManager:是YARN的主节点,负责整个集群的资源管理和调度。它会接收应用程序的资源请求,并根据资源分配策略将资源分配给各个应用程序。
-
NodeManager:是YARN的从节点,运行在每个节点上,负责管理单个节点上的资源(如CPU、内存等),并接收ResourceManager的指令来启动或停止应用程序的容器(Container)。
-
ApplicationMaster:是每个应用程序的管理组件,负责协调应用程序的运行,向ResourceManager申请资源,并与NodeManager通信以启动和管理应用程序的容器。
作用:
-
资源管理:负责管理集群中的资源(如CPU、内存等),并根据应用程序的需求合理分配资源。通过ResourceManager和NodeManager的协同工作,能够有效地管理集群资源,提高资源利用率。
-
任务调度:根据资源分配策略和应用程序的优先级,合理地调度任务。它能够动态地分配资源,使得多个应用程序可以同时运行,提高集群的利用率和吞吐量。
-
多框架支持:除了支持MapReduce框架外,还支持其他计算框架(如Spark、Flink等)。不同的计算框架可以通过YARN来申请资源,从而实现多种计算框架在同一集群上的运行,提高了集群的通用性和灵活性。
-
高可用性:通过ResourceManager的高可用性配置,可以避免单点故障,保证集群的稳定运行。当主ResourceManager出现故障时,备用ResourceManager可以接管集群的管理,保证集群的正常运行。