技术博客 技术博客
  • JAVA
  • 仓颉
  • 设计模式
  • 人工智能
  • Spring
  • Mybatis
  • Maven
  • Git
  • Kafka
  • RabbitMQ
  • RocketMQ
  • Redis
  • Zookeeper
  • Nginx
  • 数据库套件
  • MySQL
  • Elasticsearch
  • MongoDB
  • Hadoop
  • ClickHouse
  • Hbase
  • Hive
  • Flink
  • Flume
  • SQLite
  • linux
  • Docker
  • Jenkins
  • Kubernetes
  • 工具
  • 前端
  • AI
GitHub (opens new window)
  • JAVA
  • 仓颉
  • 设计模式
  • 人工智能
  • Spring
  • Mybatis
  • Maven
  • Git
  • Kafka
  • RabbitMQ
  • RocketMQ
  • Redis
  • Zookeeper
  • Nginx
  • 数据库套件
  • MySQL
  • Elasticsearch
  • MongoDB
  • Hadoop
  • ClickHouse
  • Hbase
  • Hive
  • Flink
  • Flume
  • SQLite
  • linux
  • Docker
  • Jenkins
  • Kubernetes
  • 工具
  • 前端
  • AI
GitHub (opens new window)
  • mysql

    • MySQL 问题汇总
    • MySQL 索引介绍
    • MySQL 锁介绍
    • MySQL 索引优化工具 explain
    • MySQL 主从复制(GTID)
    • MySQL 8安装
    • MySQL 8.x新特性总结
    • MySQL UDF以及新类型JSON
    • MySQL 高可用MGR(一) 理论
    • MySQL 高可用MGR(二) 搭建
    • MySQL 高可用MGR(三) 测试
  • Elasticsearch

    • ES 7.8.0(一) 入门介绍
    • ES 7.8.0(二) 读、写和写索引流程以及文档分析过程
    • ES 7.8.0(三) 文档冲突
  • mongodb

    • mongodb
  • hadoop

    • Hadoop 伪分布式及集群
    • Hadoop 指令
    • Hadoop 读写流程详解
      • 读文件流程
      • 上传文件流程
      • 删除文件流程
    • Hadoop SpringBoot集成
    • Hadoop MapReduce机制
    • Hadoop YARN
    • Hadoop MapReduce配置和编写job及数据倾斜的解决
    • Hadoop MapReduce自定义格式输入输出
  • clickhouse

    • ClickHouse 介绍及安装
    • ClickHouse 数据类型
    • ClickHouse 表引擎
    • ClickHouse SQL操作
    • ClickHouse 副本配置
    • ClickHouse 分片与集群部署
    • ClickHouse Explain及建表优化
    • ClickHouse 语法优化规则
    • ClickHouse 查询优化
    • ClickHouse 数据一致性
    • ClickHouse 物化视图
    • ClickHouse MaterializeMySQL引擎
    • ClickHouse 监控及备份
  • hbase

    • Hbase 介绍及安装
    • Hbase 优化
    • Hbase phoenix安装及使用
    • Hbase LSM-TREE
  • hive

    • Hive 介绍及安装
    • Hive 内外部表、分区表、分桶表概念及hiveSQL命令
    • Hive 数据类型
    • Hive 函数 MySQL联合
    • Hive 数据倾斜和优化
    • Hive Sqoop安装及指令
  • flink

    • Flink 介绍及安装
    • Flink 配置介绍及Demo
    • Flink API讲解
    • Flink 运行架构
    • Flink 时间语义及Watermark
    • Flink 状态管理
    • Flink 容错,检查点,保存点
    • Flink 状态一致性
    • Flink Table API 和 Flink SQL
    • Flink CEP编程
    • Flink Joining编程
    • Flink CDC
  • flume

    • Flume 日志收集系统介绍及安装
    • Flume Source支持的类型
    • Flume Sink支持的类型
    • Flume Channel支持的类型
    • Flume Selector
    • Flume Interceptor拦截器类型
    • Flume Process
  • sqlite

    • SQLite介绍
目录

Hadoop 读写流程详解

# 读文件流程

  1. 客户端向 namenode 发起 Open File 请求,目的是获取要下载文件的输入流。namenode 收到请求会后会检查路径的合法性,以及客户端的权限。
  2. 客户端发起 Open File 的同时,还会掉用 GetBlockLocation。当第一次的检验通过之后,namenode 会将文件的块信息 (元数据) 封装到输入流,交给客户端。
    3.4. 客户端用输入流,根据元数据信息去找指定的 datanode 读取文件块 (按 blockid 顺序读取)
  3. 文件下载完成后关闭。

# 上传文件流程

  1. 客户端发起 create file,目的是获取 HDFS 文件的输出流。namenode 收到请求后会检测路径的合法性,以及权限。原生 hadoop 管理是很不完善的,工作中中用的是 CDH (商业版 hadoop)。如果检测通过,namenode 会为这个文件生成块的元数据,比如:
  • 为文件切块
  • 分配块 id
  • 分配每个块存在哪个 datanode 上
    然后将元数据封装到输出流中,返回给客户端。
    2.3. client 拿到输出流之后,采用 PipeLine(数据流管道)机制做数据的上传(发送),这样设计的目的在于利用每台服务器的带宽,最小化推送数据的延迟,减少 client 带宽的发送。线性模式下,每台机器所有的出口带宽用于以最快的速度传输数据,而不是在多个接收者之间分配带宽。packet,是客户端把文件块打散成一个个的数据包发送。用的是全双通信,边收边发。
    4.5. 每台 datanode 收到 packet 后,会向上游 datanode 做 ack 确认,如果接收失败,会进行重发(重发机制)
  1. 当一个文件上传完之后,关闭流。

# 删除文件流程

  1. 当客户端发起一个删除指令,这个指令会传给 namenode
  2. namenode 收到指令,做路径和权限校验,如果检验通过,会将对应的文件信息从内存里删除。此时,文件数据并不是马上就从集群被删除。
  3. datanode 向 namenode 发送心跳时 (默认时 3s 周期),会领取删除指令没然后从磁盘上将文件删除。
上次更新: 6/11/2025, 4:10:30 PM
Hadoop 指令
Hadoop SpringBoot集成

← Hadoop 指令 Hadoop SpringBoot集成→

Theme by Vdoing | Copyright © 2023-2025
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式