hadoop

介绍

  • 用java语言编写
  • 对跨机器集群的数据进行分布式计算
  • Hadoop 由三大核心模块组成:HDFS 负责存储,YARN 负责资源调度,MapReduce 负责分布式计算。

核心组件:

  1. Hadoop HDFS(分布式文件存储系统Hadoop Distributed File System):解决海量数据存储
  2. Hadoop YARN(集群资源管理,任务调度框架Yet Another Resource Negotiator):解决资源任务调度
  3. Hadoop MapReduce(分布式计算框架):对海量数据进行计算。第一代分布式计算引擎,一般不直接使用

HDFS

Hadoop分布式文件存储系统(Hadoop Distributed File System)

  • namespace:命名空间(目录树)。(NameNode的name就是namespace)

HDFS 为什么适合存大文件,不适合存小文件?

分块存储(默认 128MB/256MB Block),每个block维持3个副本

不适合小文件,因为:

  1. 每个小文件至少会占用一个block(即使他的空间比block小),造成资源浪费。
  2. NameNode存储了元数据,并且每个block都要对应一条元数据,小文件的情况下就会造成元数据压力大

HDFS 的读写流程是什么?

读文件的流程

  1. Client 请求 NameNode 获取文件 Block 的 DataNode 列表
  2. 根据就近原则选择一个 DataNode
  3. 与 DataNode 建立流式读取

流式读取(streaming read):DataNode 通过网络持续、分段地向客户端发送 Block 数据,而不是一次性读完整个block再返回。

写文件的流程

  1. Client 向 NameNode 请求写文件
  2. NameNode 返回 DataNode 列表(副本位置)
  3. Client 以 Pipeline 方式向第一个 DataNode 写数据
  4. 第一个写给第二个,第二个写给第三个(复制链)
  5. 所有 DataNode 写完返回 ACK,NameNode 更新元数据、写入完成

Pipeline写文件时,Client 写 Block 的第 1 个副本,然后由这个副本节点用链式方式继续把同一个 Block 复制到其他副本节点的过程。

NameNode 宕机怎么办?它如何保证高可用?(HDFS HA)

HA:High Availability(高可用)

HDFS HA 是通过双 NameNode( Active/Standby )来实现的。他们通过共享 EditLog(写操作日志)来保证数据一致,并且DataNode会同时向两个NameNode汇报最新信息,来及时更新block情况,当Active挂了后,Standby会变成新的Active来保证高可用

YARN

可以把Hadoop YARN理解为相当于一个分布式的操作系统平台,而MapReduce等计算程序则相当于运行于操作系统之上的应用程序,YARN为这些程序提供运算所需的资源(内存、CPU等)。

请描述YARN的基本架构和核心组件的工作流程。

  • ResourceManager - 全局资源管理器
  • NodeManager - 单节点资源管理器:定期向ResourceManager汇报本节点的资源使用状况
  • ApplicationMaster - 单个应用的管理者

工作流程:

  1. 客户端 将应用程序(如MapReduce Job)提交给 ResourceManager
  2. RM选择一台NM创建一个Container,并且在这里面启动AM(AM是在第一个NM里的)
  3. AM启动之后,会将程序拆分成Task,并且RM申请容器,将Task发送到NM的容器中运行
  4. 容器中运行的任务会向 ApplicationMaster 发送心跳,汇报自身情况。当程序运行完成后, ApplicationMaster 再向 ResourceManager 注销并释放容器资源。

container指的是资源的抽象比如说内存和CPU

YARN的调度器(Scheduler)有哪些?它们之间有什么区别和优缺点?

调度器 核心策略 银行比喻 (例子) 主要优点 (好处) 主要缺点 (挑战) 适用场景
FIFO 先进先出 (排队顺序) 单一排队,先来先服务。 配置最简单 不公平,大作业会阻塞所有小作业。 已淘汰,仅用于极小规模测试。
Capacity (容量) 容量保证 + 弹性借用 专属窗口,保证核心业务服务,闲时可借用。 隔离性好 :确保核心业务的资源(硬性保证)。 ✅ 利用率高:空闲资源允许借用。 配置复杂:需要事先划分队列容量。 工业界主流:多部门、多租户、对 SLA 有要求。
Fair (公平) 公平共享 + 权重分配 轮流服务,确保所有人都能在短时间内被处理。 响应快 :所有作业都能及时启动运行。 ✅ 动态灵活:资源分配可根据权重动态调整。 隔离性弱:资源保证不如 Capacity 严格。 共享池场景:资源需要平等分配给所有用户,强调响应时间。

Capacity:当一个队列的资源空闲时,他可以给其他借用,但是如果当前队列有任务的话,立刻收回资源

Fair:保证所有任务的资源都是平均的,不管大小任务

当遇到一个YARN作业运行非常慢或者失败时,你的排查思路是什么?

  • 在RM UI上看应用的总体状态:是ACCEPTED, RUNNING, 还是FAILED?
  • 如果是失败的话,就要详细的查看下Spark日志了
  • 然后可以看看队列的资源情况,如果没有资源了
  • 一般我们的做法就是让用户换一个不可抢占队列就可以了
  • 查看AM UI,检查是否有少数MapTask或ReduceTask运行时间远超其他任务。这是导致速度慢的常见原因。但是这种情况我没有处理过

架构图

MapReduce

请详细描述一下 MapReduce 的完整工作流程。

MapReduce 的工作流程主要分为 5 个阶段:输入、Map、Shuffle & Sort、Reduce、输出。

  1. 输入分片 (Input Splitting) & RecordReader:
    • HDFS 上的文件会被切分成逻辑上的输入分片 (Input Split)
    • RecordReader 负责读取每个 Split 的数据,将其解析成一个个 <Key, Value> 对,传递给 Map 函数。
  2. Map 阶段 (Mapping):
    • 用户自定义的 Mapper 函数接收 <Key, Value> 对。
    • Mapper 对数据进行处理,并输出一组新的中间 <Key, Value> 对。
  3. Shuffle & Sort 阶段 (核心):
    • 分区 (Partitioner): 根据 Key 的哈希值确定该数据应该发送给哪个 Reducer
  4. Reduce 阶段 (Reducing):
    • 用户自定义的 Reducer 函数接收 <Key, List<Value>>
    • Reducer 对值列表进行聚合、计算或汇总,并输出最终结果。
  5. 输出 (Output):
    • OutputFormat 将最终的 <Key, Value> 对写入 HDFS 或其他存储系统

MapReduce 中的 Shuffle 阶段具体做了什么?为什么说它是性能优化的关键?

Shuffle是连接Map和Reduce的关键

先将Mapper端的机器进行Partition(分区,规则: Hash(城市名) % Reducer数量

在将Mapper端的机器进行merge,Mapper 自己算出:<北京, 1000万元>(将 100万条数据浓缩成 1 条)

再就是Reduce端了,Reduce会去Mapper端根据标签拉数据

之后将每一个Mapper端拉取的数据进行归并排序

最后这里不属于shuffle,是reduce只要顺序执行就可以了

请说明 Partitioner 和 Combiner 的作用和区别。

特性 Partitioner (分区器) Combiner (合并器)
作用 决定 Map 输出的 Key-Value 对应该发送给哪个 Reducer 在 Map 端对数据进行本地预聚合
执行位置 Map 端(Shuffle 开始之前)。 Map 端(溢写到磁盘之前)。
职能 负责数据的分配和路由(逻辑)。 负责数据的局部计算(优化)。
可选性 必需 (默认为 HashPartitioner)。 可选(仅用于优化,不是所有算法都适用)。
关键区别 Partitioner 决定数据去哪里 ;Combiner 决定数据变多小
优化意义 确保数据在 Reducer 之间均匀分配,避免数据倾斜。 减少溢写到磁盘和网络传输的数据量,大幅提升性能

Combiner的流程是在merge中,主要目的是减少内存写入磁盘的IO以及之后reduce拉取数据的网络传输

补充

👉 早期 Hadoop 自带的 MapReduce 既负责调度又负责计算,后来为了让其他计算框架(不仅仅是 MR)也能用 Hadoop 集群的资源,就把调度 拆出来形成 YARN (Yet Another Resource Negotiator)。

据的网络传输

补充

👉 早期 Hadoop 自带的 MapReduce 既负责调度又负责计算,后来为了让其他计算框架(不仅仅是 MR)也能用 Hadoop 集群的资源,就把调度 拆出来形成 YARN(Yet Another Resource Negotiator)。

相关推荐
2501_9481142434 分钟前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
黎阳之光1 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
专注API从业者2 小时前
淘宝商品详情 API 与爬虫技术的边界:合法接入与反爬策略的技术博弈
大数据·数据结构·数据库·爬虫
V搜xhliang02462 小时前
AI大模型在临床决策与手术机器人领域的应用
大数据·人工智能·机器人
A__tao2 小时前
Elasticsearch Mapping 一键生成 Proto 文件(支持嵌套 + 注释过滤)
大数据·elasticsearch·jenkins
Gofarlic_OMS3 小时前
装备制造企业Fluent许可证成本分点典型案例
java·大数据·开发语言·人工智能·自动化·制造
程序员雷欧3 小时前
大模型应用开发学习第八天
大数据·人工智能·学习
liukuang1103 小时前
伊利、蒙牛、飞鹤与光明乳业:存量时代的攻守之道与价值分化
大数据·人工智能·物联网
supericeice4 小时前
创邻科技 AI智算一体机:支持 DeepSeek 671B 与 Qwen3 单机部署,覆盖纯CPU到多GPU多机扩展
大数据·人工智能·科技