当前位置: 首页 > news >正文

Hadoop基础知识

Hadoop 是由 Apache 基金会开发的开源分布式计算框架,主要用于处理海量数据的存储和计算问题。其核心设计基于 Google 的 MapReduce 编程模型和 GFS(Google File System),旨在通过集群化的廉价硬件实现高可靠性、高扩展性的大数据处理。以下是 Hadoop 的核心要点介绍:


一、Hadoop 的核心架构

Hadoop 主要由以下模块组成:

  1. HDFS(Hadoop Distributed File System)

    • 分布式文件存储系统,支持海量数据的存储,默认将文件分割为 128MB 的块(Hadoop 2.x 及以上版本),并自动复制多份(默认 3 份)存储在不同节点,确保容错性。

    • 采用主从架构:

      • NameNode:管理文件系统元数据(如文件名、块位置),处理客户端请求。【元数据表示描述数据的数据,记录DataNode中数据的各种属性】

      • DataNode:存储实际数据块,定期向 NameNode 发送心跳信号。【存储数据本身的模块】

      • DataNode每过几秒会向NameNode发送心跳信号【心跳信号包含:自身状态的信号(是否存活)、资源使用情况、以及一些简单的指令】,使NameNode能够及时知道DataNode的状态。若 NameNode 超过 10 分钟未收到心跳,则认为该 DataNode 宕机,并触发以下操作:将该节点标记为“不可用”,不再分配新任务并启动数据副本恢复流程,将丢失的块从其他节点复制到健康节点。

      • DataNode每过几秒会向NameNode发送块报告【快报告包括所有数据块列表 的详细报告、以及副本状态等保证元数据与真实数据的一致性

  2. MapReduce

    • 分布式计算模型,分为 Map 和 Reduce 两个阶段:

      • Map:将输入数据分解为键值对并并行处理;

      • Reduce:汇总 Map 阶段的中间结果并生成最终输出。

    • 依赖 JobTracker(主节点)和 TaskTracker(从节点)协调任务执行,但存在单点故障风险。

  3. YARN(Yet Another Resource Negotiator)

    • 资源管理与任务调度框架,负责集群资源的动态分配,支持多种计算模型(如批处理、流处理)。

    • 包含 ResourceManager(全局资源管理)和 NodeManager(节点资源管理)。

  4. Hadoop Common

    • 提供其他模块依赖的通用工具库和接口。


二、Hadoop 的优势与特点

  1. 高可靠性

    • 数据自动多副本存储,任务失败时自动重新分配,无需人工干预。

  2. 高扩展性

    • 支持从单节点扩展至数千节点,适合 PB 级数据处理。

  3. 低成本

    • 基于商用硬件构建集群,成本远低于高端服务器。

  4. 高容错性

    • 通过数据副本和任务重试机制应对节点故障。

  5. 适用场景

    • 适合批处理大规模数据(如日志分析、ETL),不适用低延迟访问、频繁修改数据或小文件存储的场景。


三、Hadoop 的工作流程

  1. 数据存储

    • 文件被分割为块,分布存储在多个 DataNode 上,NameNode 记录元数据。

  2. 任务提交

    • 用户通过客户端提交作业(包含输入路径、代码和参数),JobTracker 分配任务至 TaskTracker。

  3. 数据处理

    • Map 阶段在数据所在节点并行执行,Reduce 阶段汇总结果并写入 HDFS。


四、Hadoop 生态系统

Hadoop 生态包含丰富的工具以扩展功能:

  • Hive:基于 SQL 的数据仓库工具,用于查询和分析。

  • HBase:分布式 NoSQL 数据库,支持实时读写。

  • Spark:内存计算框架,比 MapReduce 更快,支持流处理和机器学习。

  • Flume/Sqoop:分别用于日志收集和关系型数据库与 Hadoop 间数据传输。

  • Zookeeper:提供分布式协调服务。

五、工作流

1、用户发送指令到完成任务的一般工作流(以 MapReduce 任务为例)

(1)指令提交阶段

用户通过客户端工具(如 Hadoop 命令行)提交作业请求。这个请求包含了作业的配置信息(如输入数据路径、输出数据路径、Map 和 Reduce 函数的相关信息等),并发送到 YARN(Yet Another Resource Negotiator)的 ResourceManager。

(2)资源分配阶段

ResourceManager(RM)作用:ResourceManager 收到请求后,会根据集群的整体资源状况(包括各个节点的 CPU、内存等资源的可用性)进行资源分配规划。它维护着集群资源的全局视图,例如,知道每个节点上还有多少空闲的计算资源可以用于执行新的任务。

与 NodeManager(NM)协作:ResourceManager 会和集群中的 NodeManager 进行沟通。NodeManager 运行在集群中的每个节点上,负责管理该节点的资源。ResourceManager 会指示 NodeManager 启动任务容器(Container),这些容器是执行具体任务(如 Map 任务和 Reduce 任务)的基本单位。

(3)任务执行阶段

Map 任务执行:根据任务的分配,在合适的容器中启动 Map 任务。这些 Map 任务会从 HDFS(Hadoop Distributed File System)读取输入数据。HDFS 将数据以数据块(Block)的形式存储在集群中的多个节点上,Map 任务通常会根据数据本地化原则,优先处理存储在本地节点或者临近节点的数据块,以减少数据传输开销。每个 Map 任务对其处理的数据块进行处理,将数据转换为键 - 值对形式的中间结果。

Shuffle 阶段:Map 任务完成后,进入 Shuffle 阶段。在这个阶段,中间结果会被按照键进行排序和分组,并且通过网络传输将相同键的数据发送到执行 Reduce 任务的节点。这是一个复杂的过程,涉及到数据的传输、缓存等操作,以确保 Reduce 任务能够高效地获取到其需要的数据。

Reduce 任务执行:Reduce 任务接收到来自 Shuffle 阶段的数据后,对相同键的值进行聚合等操作,生成最终的输出结果。这些输出结果会被写回到 HDFS 指定的输出路径中。

2、非 MapReduce 任务(如数据存储相关指令)

如果用户指令是将数据存储到 HDFS 中,工作流主要涉及 HDFS 部分。用户通过 HDFS 客户端提交存储请求,HDFS 的 NameNode(主节点,管理文件系统的命名空间和文件块的映射关系)会协调 DataNode(从节点,存储实际的数据块)进行数据存储操作。例如,NameNode 会决定将数据块存储在哪些 DataNode 上,考虑因素包括 DataNode 的可用存储空间、数据的副本策略(为了数据冗余和可靠性,通常会在多个节点存储数据副本)等。这个过程和 MapReduce 任务的资源分配以及任务执行流程有很大不同

 

相关文章:

  • 用 PyQt5 和 asyncio 打造接口并发测试 GUI 工具
  • 数据结构-查找
  • 在vue项目中实现svn日志打印
  • LeetCode hot 100—最长有效括号
  • HTML应用指南:利用GET请求获取微博签到位置信息
  • 中介者模式:解耦对象间复杂交互的设计模式
  • 虚拟机详解
  • 音视频之H.265/HEVC环路后处理
  • 修改了Element UI中组件的样式,打包后样式丢失
  • 2194出差-节点开销Bellman-ford/图论
  • Spring AI 核心概念
  • Atlas 800I A2 离线部署 DeepSeek-R1-Distill-Llama-70B
  • 使用钉钉机器人推送系统内部的ERP停机维护公告
  • Mysql的深度分页查询优化
  • 鲲鹏麒麟搭建Docker仓库
  • DeepSeek 部署中的常见问题及解决方案全解析
  • DrissionPage 请求一次换一个代理(不重启chrome)
  • 快速上手GO的net/http包,个人学习笔记
  • CentOS 7 磁盘阵列搭建与管理全攻略
  • 【计算机视觉】CV实战项目- 深度解析FaceAI:一款全能的人脸检测与图像处理工具库
  • 目前中美未进行任何经贸谈判,外交部、商务部再次表明中方立场
  • 沂水县委书记陈士贤,跨市履新泰安市委常委、组织部部长
  • 北京顺义:做好潮白河大桥事故善后处置,举一反三排查风险
  • 观察|动力电池步入“多核时代”,宁德时代新技术密集开箱有何启示
  • 上海银行换帅:顾建忠出任党委书记,金煜辞任董事长
  • 河南省濮阳市委常委、组织部部长刘建茂接受审查和调查