技术博客 技术博客
  • 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 指令
      • 普通指令
      • 知识点
      • Fsimage介绍
      • MD5校验
    • 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 指令

前面已经教了如何安装伪分布式和分布式,那么接下来就要学习 hadoop 有哪些命令。

# 普通指令

创建一个 test 目录

[root@node113 hadoop-3.1.3]# hadoop fs -mkdir /test
1

查看根目录下有哪些文件

[root@node113 hadoop-3.1.3]# hadoop fs -ls /
Found 1 items
drwxr-xr-x   - root supergroup          0 2021-05-08 13:22 /test
1
2
3

将 linux 操作系统下的 /home/tmp/biguncle 文件 copy 到 hdfs 的 test 目录下

[root@node113 tmp]# hadoop fs -put /home/tmp/biguncle /test
1

查看文件被切割几块 (-blocks) 及每块的位置信息 (-locations)

[root@node113 home]# hadoop fsck /test/biguncle -files -blocks -locations
Connecting to namenode via http://node113:9870/fsck?ugi=root&files=1&blocks=1&locations=1&path=%2Ftest%2Fbiguncle
FSCK started by root (auth:SIMPLE) from /127.0.0.1 for path /test/biguncle at Sat May 08 13:50:40 CST 2021
# biguncle 大小为 0 bytes,副本数为 1,0个块
/test/biguncle 0 bytes, replicated: replication=1, 0 block(s):  OK


Status: HEALTHY
 Number of data-nodes:  1
 Number of racks:               1
 Total dirs:                    0
 Total symlinks:                0

Replicated Blocks:
 Total size:    0 B
 Total files:   1
 Total blocks (validated):      0
 Minimally replicated blocks:   0
 Over-replicated blocks:        0
 Under-replicated blocks:       0
 Mis-replicated blocks:         0
 Default replication factor:    1
 Average block replication:     0.0
 Missing blocks:                0
 Corrupt blocks:                0
 Missing replicas:              0

Erasure Coded Block Groups:
 Total size:    0 B
 Total files:   0
 Total block groups (validated):        0
 Minimally erasure-coded block groups:  0
 Over-erasure-coded block groups:       0
 Under-erasure-coded block groups:      0
 Unsatisfactory placement block groups: 0
 Average block group size:      0.0
 Missing block groups:          0
 Corrupt block groups:          0
 Missing internal blocks:       0
FSCK ended at Sat May 08 13:50:40 CST 2021 in 9 milliseconds


The filesystem under path '/test/biguncle' is HEALTHY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

将 hdfs 中的 biguncle 文件下载到 linux 的 home 目录下

[root@node113 home]# hadoop fs -get /test/biguncle /home
[root@node113 home]# ls
biguncle  tmp
1
2
3

删除 hdfs 的 test 目录中的指定文件

[root@node113 home]# hadoop fs -rm /test/biguncle
Deleted /test/biguncle
1
2

删除 test 目录,但前提是没其他文件

[root@node113 home]# hadoop fs -rmdir /test
1

删除 test 目录,即使目录里有其他文件

[root@node113 home]# hadoop fs -rmr /test
rmr: DEPRECATED: Please use '-rm -r' instead.
Deleted /test
1
2
3

查看 test 目录下 biguncle 文件

[root@node113 home]# hadoop fs -cat /test/biguncle
我再做一个测试
1
2

查看 test 目录下 biguncle 文件末尾的数据,默认 10 行

[root@node113 home]# hadoop fs -tail /test/biguncle
我再做一个测试
1
2

hadoop 文件移动,或重新名命

[root@node113 home]# hadoop fs -mv /test/biguncle /test1/bu
1

hadoop 执行一个 jar 文件

hadoop har xxx.jar
1

hadoop 创建一个空文件,必须再目录下创建

[root@node113 home]# hadoop fs -touchz /test/bbb.txt
1

将目录下的所有文件合并成一个文件,并下载到 linux

[root@node113 home]# hadoop fs -ls /test
Found 3 items
-rw-r--r--   1 root supergroup          0 2021-05-08 14:19 /test/bbb.txt
-rw-r--r--   1 root supergroup          0 2021-05-08 14:22 /test/ccc.txt
-rw-r--r--   1 root supergroup          0 2021-05-08 14:23 /test/ddd.txt
[root@node113 home]# hadoop fs -getmerge /test /home/tmp/fff.txt
[root@node113 tmp]# ls
fff.txt
1
2
3
4
5
6
7
8

将目录下的文件 copy 到其他目录

[root@node113 tmp]# hadoop fs -cp /test/bbb.txt /test1
1

查看某个文件的大小,也可以查看指定目录

[root@node113 tmp]# hadoop fs -du /test
0  0  /test/bbb.txt
0  0  /test/ccc.txt
0  0  /test/ddd.txt
1
2
3
4

递归查看目录下所有文件

[root@node113 tmp]# hadoop fs -lsr /
drwxr-xr-x   - root supergroup          0 2021-05-08 14:23 /test
-rw-r--r--   1 root supergroup          0 2021-05-08 14:19 /test/bbb.txt
-rw-r--r--   1 root supergroup          0 2021-05-08 14:22 /test/ccc.txt
-rw-r--r--   1 root supergroup          0 2021-05-08 14:23 /test/ddd.txt
drwxr-xr-x   - root supergroup          0 2021-05-08 14:26 /test1
-rw-r--r--   1 root supergroup          0 2021-05-08 14:26 /test1/bbb.txt
-rw-r--r--   1 root supergroup         22 2021-05-08 14:13 /test1/bu
1
2
3
4
5
6
7
8

手动执行 fsimage 文件和 edit 文件合并元数据

hadoop dfsadmin -rollEdits
1

# 知识点

  1. 当执行格式化指令时,会在指定的目录下,生成 /dfs/name 目录。此目录时 namenode 服务存储元数据的目录。
  2. 当格式化后,启动 HDFS 前,会生成一个 fsimage_000000000000000000000 文件
  3. 启动后生成 dfs/data 目录,这是 datanode 节点存储数据块的目录。
  4. 启动后生成 dfs/name/in_use.lock 这个文件的作用是防止在同一台服务器上启动多个 namenode
  5. 启动后生成 dfs/name/current/edits_000000000000000000001-000000000000000000002 等文件,该文件记录了事务的生成。可以用以下命令格式化输出到别的文件查看。
hdfs oev -i edits_000000000000000000001-000000000000000000002 -o a.xml
1
  1. 没生成一个新得 Edits 文件,文件中都会以 START LOG 开头,当一个 Edits 文件写完后,会议 END LOG 结尾。即在 START LOG 到
    END LOG 存储的是这个 Edits 文件所有的事务记录。
  2. 每当 HDFS 接收一个事务操作(mkdir put mv),都会分配事务 ID,然后挟到 Edits 文件中。
  3. 启动后生成 dfs/name/current/edits_inprogress_000000000000000000003,只包含了 START LOG,他的作用是记录当前正在执行的事务文件 。后面的编号是以上一次 Txid+1 来名命。
  4. 初次使用 HDFS 时,有一个默认的 Edits(edits_inprogress_000000000000000000001)和 Fsimage,他们合并后得到 edits_000000000000000000001-000000000000000000002,合并周期为(1 分钟),以后在使用 HDFS 的过程中,edits_inprogress 合并的条件:1. 达到合并周期 (3600s),2. 执行手动合并指令,3. 停止 HDFS 在启动 HDFS
  5. 上传文件底层会拆分如下事务过程:
  • OP_ADD 将文件加入到指定的 HDFS 文件目录下,并以 ._Copyging_结尾,表示此文件还未写完
  • ALLOCATE_BLOCK_ID 为文件分配块 ID
  • SET_GENSTAMP_V2 生成时间戳版本号,全局唯一,每一块不同
  • ADD_BLOCK 写块数据
  • OP_CLOSE 表示块数据写完
  • OP_RENAME_OLD 将文件重命名以表示写完
  1. 当停止 HDFS 在启动 HDFS,执行一个新事物后,会触发 END LOG 事务,生成新得 Edits 文件。
  2. seen_txid 记录最新 edits_inprogress 的事务 ID
  3. Fsimage_N 文件存储的 N 号事务前的所有元数据信息
  4. Fsimage_N.md5 存储的是 Fsimage 的校验和

# Fsimage 介绍

把文件和目录的元数据信息持久地存储到 fsimage 文件中,每次启动时从中将元数据加载到内存中构建目录结构树,之后的操作记录在 edits log 中,定期将 edits log 与 fsimage 合并刷到 fsimage 中。

loadFSimage (File curFile) 用于从 fsimage 中读入 namenode 持久化的信息。fsimage 中保存的元数据信息格式如下,hdfs 加载和写入时都按照该格式进行。

  • imageVersion:Fsimage 文件的版本号,每生成一个新得 Fsimage 文件,就会有一个版本号
  • NameSpaceID:namenode 的名命空间 id,用于表示 namenode,每当执行一次格式化命令时,就会生成新的。
  • NumFiles:整个 HDFS 存储的文件数
  • genStamp:目录创建的时间戳,块生成的时间戳
  • path:文件路径
  • BlockNums:文件的块的数量
  • mtime:上传时间
  • atime:访问时间
  • BlockID:块编号
  • BlockSize:切块大小 (128M)
  • BlockNumBytes:块实际大小
  • StorgeInfo:块存储的 datanode 节点信息
  • nsquota:目录的名命空间大小配额,默认是 - 1 表示目录可以无限制存储
  • dsquota:目录的磁盘空间存储配额,默认是 - 1
  • username:目录的创建者
  • groupname:目录的所属组
  • permission:目录的权限

fsimage 是一个二进制文件,当中记录了 HDFS 中所有文件和目录的元数据信息。

HDFS 启动时,会将这些信息读入内存之后,构建一个文件目录结构树,将表示文件或目录的节点填入到结构中。

# MD5 校验

MD5 校验和(checksum)通过对接收的传输数据执行散列运算来检查数据的正确性。

一个 MD5 校验和 通过对接收的传输数据执行散列运算来检查数据的正确性。计算出的散列值拿来和随数据传输的散列值比较。如果两个值相同,说明传输的数据完整无误、没有被篡改过(前提是散列值没有被篡改),从而可以放心使用。

上次更新: 6/11/2025, 4:10:30 PM
Hadoop 伪分布式及集群
Hadoop 读写流程详解

← Hadoop 伪分布式及集群 Hadoop 读写流程详解→

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