博主 "开着拖拉机回家"带您 Go to New World.✨
个人主页——开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 ✨
希望本文能够给您带来一定的帮助文章粗浅,敬请批评指正!
感谢点赞和关注 ,每天进步一点点!加油!
目录
一、HDFS产出背景及定义
1.1.HDFS产生背景
1.2.HDFS简介
1.3.HDFS的优缺点
1、优点
2、缺点
二、HDFS的特点
三、HDFS组成架构
1、Client:客户端
2、NameNode
3、 DataNode
4、 Secondary NameNode
四、HDFS读写过程
4.1.写入流程
4.2.读取流程
五、HDFS客户端常用命令
5.1.HDFS客户端访问命令使用
5.2.HDFS客户端管理命令使用
1、报告文件系统的基本信息和统计信息
2、fs_image 文件导出解析到本地
3、安全模式
4、文件健康检查和租约释放
5、har 归档
5.3. HDFS 命令总体划分
随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。
HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
HDFS的使用场景:适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变。
a.大量 小文件会占用 NameNode 大量内存来存储文件索引信息
b.小文件增加访问和写入寻址时间,大量小文件的存在无论是读取或者写入数
据 都会都集群造成很大的压力
a.一个文件只能一个写,不允许多个线程同时写。
b.仅仅支持数据append(追加),不支持文件的随机修改
高容错性:一个HDFS集群会包含非常多节点,HDFS将文件分块(Block)存储,并且会自动保存多个副本到不同的机器节点上以保证数据的安全,而且HDFS可以检测故障并且从故障中快速恢复。
高吞吐率:与一般文件系统的访问低延迟不同,HDFS的重点是存储和处理大量的数据,支持数据处理规模是GB、TB、甚至是PB的级别。因此,相比较用户交互式程序,HDFS更加适用批处理的应用程序。
一次写入多次读取模型:一个文件只支持单线程的文件写入,HDFS假定一个文件一旦被创建,写入完成之后除了追加和截断就不需要更改。这种设置简化了数据一致性的问题,从而也提高了数据访问的吞吐率,同时也不支持文件的随机修改。
大数据集:HDFS 中的典型文件大小为 GB 到 TB,对于大批量小文件HDFS无法做到高效存储,存储和检索会消耗NameNode内存。
可移植性:HDFS是由Java语言构建,任何支持Java的机器,都可以运行HDFS,因此HDFS可以轻松地从一个平台移植到另一个平台。
通过Client来访问文件系统,然后由Client与NameNode和DataNode进行通信。Client对外作为文件系统的接口
管理者。 用于存储和管理文件元数据、维护文件系统的目录树形结构,记录写入的每个数据块(Block)与其归属文件的对应关系。
DataNode会通过心跳和NameNode保持通信,处理实际的操作。
Secondary NameNode的作用是消费EditsLog,定期地合并FsImage和EditsLog,生成新的FsImage文件,并推送给NameNode,降低了NameNode的压力。 在紧急情况下,可辅助恢复NameNode。
SecondaryNameNode机制:
SecondaryNameNode工作过程:
对于客户端shell命令的具体使用可以查看 help 帮助, 熟悉Linux 常用命令的人可能一看这些命令就会有种很熟悉对的感觉。
[winner_spark@hdp105 root]$ hdfs dfs -help
如下为常用的命令:
# 创建文件夹
hdfs dfs -mkdir -p /tmp/kangll
# 上传文件 test.sh 到HDFS
hdfs dfs -put test.sh /tmp/kangll
# 查看文件
hdfs dfs -ls /tmp/kangll
# 下载到本地 /tmp 文件夹
hdfs dfs -get test.sh /tmp/kangll /tmp
# 查看test.sh 文件内容 -less 或者 -more也可以
hdfs dfs -cat /tmp/kangll/test.sh
# 查看 文件或者文件夹 大小
hdfs dfs -du -h /tmp/kangll
#判断当前路径是否存在
hadoop fs -test -d /tmp/kangll
# 文件权限修改
hdfs dfs -chmod 775 /tmp/kangll/test.sh
hdfs dfs -chown winner_spark:hadoop /tmp/kangll/test.sh
# 删除test.sh 删除后的文件会先进入 垃圾桶
hdfs dfs -rm -r /tmp/kangll/test.sh
# -cp:从HDFS的一个路径拷贝到HDFS的另一个路径
hdfs dfs -cp /tmp/kangll/test.sh /tmp/
# 移动
hdfs dfs -mv /tmp/kangll/test.sh /tmp/
如下介绍几个常用的管理命令:
hdfs dfsadmin -report
执行部分结果如下:
[hdfs@hdp105 root]$ hdfs dfsadmin -report
Configured Capacity: 2253195592704 (2.05 TB)
Present Capacity: 2103420218371 (1.91 TB)
DFS Remaining: 1194928602115 (1.09 TB)
DFS Used: 908491616256 (846.10 GB)
DFS Used%: 43.19%
Replicated Blocks:
Under replicated blocks: 172
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Low redundancy blocks with highest priority to recover: 0
Pending deletion blocks: 0
Erasure Coded Block Groups:
Low redundancy block groups: 0
Block groups with corrupt internal blocks: 0
Missing block groups: 0
Low redundancy blocks with highest priority to recover: 0
Pending deletion blocks: 0
-------------------------------------------------
Live datanodes (3): # 测试环境 3个datanode
Name: 192.168.2.152:1019 (hdp103)
Hostname: hdp103
Decommission Status : Normal # 节点状态
Configured Capacity: 751065197568 (699.48 GB)
DFS Used: 302833778688 (282.04 GB)
Non DFS Used: 88004692992 (81.96 GB)
DFS Remaining: 359240115201 (334.57 GB)
DFS Used%: 40.32%
DFS Remaining%: 47.83%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 20
Last contact: Thu Aug 24 14:13:48 CST 2023
Last Block Report: Thu Aug 24 12:32:27 CST 2023
Num of Blocks: 38238
获取Namenode元数据fsImage镜像文件,并且 解析为CSV文件。
# 获取 fsimage, 获取到的数据到二进制文件
hdfs dfsadmin -fetchImage $BASEDIR/data
# 解析,数据解析为 csv 文件 , -o 为输出路径, -p输出文件格式
hdfs oiv -i $BASEDIR/data/fsimage_* -o $BASEDIR/fs_distribution/fs_deli -p Delimited -delimiter ","
#可以 查看命令参数解释 hdfs oiv -i -help
解析结果
包含的信息有:路径,副本数,日期,权限 ,所属用户和组等信息。
HDFS中,安全模式是一种保护机制,它可以在NameNode节点出现故障或异常情况时,防止数据丢失或损坏。在安全模式下,HDFS集群只允许读取数据,禁止写入数据,同时也禁止执行元数据修改操作。这意味着,当NameNode节点处于安全模式下时,HDFS集群的数据将处于只读状态,直到NameNode节点恢复正常并退出安全模式为止。
hdfs dfsadmin [-safemode enter | leave | get | wait | forceExit]
hdfs dfsadmin 的其他命令:
命令选项 |
描述 |
-report |
报告文件系统的基本信息和统计信息。 |
-safemode enter | leave | get | wait |
安全模式维护命令。安全模式是Namenode的一个状态,这种状态下,Namenode |
-refreshNodes |
重新读取hosts和exclude文件,更新允许连到Namenode的或那些需要退出或入编的Datanode的集合。 |
-finalizeUpgrade |
终结HDFS的升级操作。Datanode删除前一个版本的工作目录,之后Namenode也这样做。这个操作完结整个升级过程。 |
-upgradeProgress status | details | force |
请求当前系统的升级状态,状态的细节,或者强制升级操作进行。 |
-metasave filename |
保存Namenode的主要数据结构到hadoop.log.dir属性指定的目录下的 |
-setQuota |
为每个目录 |
-clrQuota |
为每一个目录 |
-help [cmd] |
显示给定命令的帮助信息,如果没有给定命令,则显示所有命令的帮助信息。 |
hdfs文件操作异常没有正确关闭连接,造成租约没有释放,而程序可以读取这个文件时获取不到租约就会报错。所以需要释放租约, -retries 3 表示重试三次。
# 健康检查
hdfs fsck /tmp/kangll/test.sh
# hdfs文件操作异常没有正确关闭连接,造成租约没有方式 需要释放租约, -retries 3 重试三次
hdfs debug recoverLease -path $LINE -retries 3
执行结果
hdfs fsck 的其他命令:
命令选项 |
描述 |
-move |
把损坏的文件移动到/lost+found |
-delete |
直接删除损坏的文件 |
-files |
打印被检测的文件 |
-openforwrite |
打印正在被写入的文件,可能是文件写入关闭异常 |
-includeSnapshots |
检测的文件包括系统snapShot快照目录下的 |
list-corruptfileblocks |
打印出丢失的块和它们所属的文件列表 |
-blocks |
打印block 信息 |
-locations |
打印 block 的位置,即在哪个节点 |
-racks |
打印block 所在的 rack |
-storagepolicies |
打印 block 存储的策略信息 |
-blockId |
打印 block所属块的位置信息 |
Hadoop存档是特殊格式的存档。Hadoop存档映射到文件系统目录。Hadoop归档文件总是带有* .har扩展名
hadoop archive -archiveName $fileName -p $src $subSrc $dest
归档启动MR任务执行完成后:
har 归档虽然对 文件进行了归档 减少了 block 数量,但是har 归档并没有压缩数据。
Admin Commands:
命令 |
描述 |
cacheadmin |
配置 HDFS 缓存 |
crypto |
配置HDFS加密区 |
debug |
执行Debug Admin命令执行HDFS的Debug命令 |
dfsadmin |
运行DFS管理客户端 |
dfsrouteradmin |
管理基于路由的联邦 |
ec |
运行HDFS ErasureCoding 客户端 |
fsck |
运行DFS文件系统检查工具 |
haadmin |
运行DFS HA 管理客户端 |
jmxget |
从NameNode或DataNode获取JMX导出的值 |
oev |
an edits file 应用于 离线 edits viewer |
oiv |
an fsimage 应用于离线 fsimage viewer |
oiv_legacy |
apply the offline fsimage viewer to a legacy fsimage |
storagepolicies |
list/get/set block storage policies |
Client Commands:
命令 |
描述 |
classpath |
打印获取hadoop jar和所需库所需的类路径 |
dfs |
在文件系统上运行filesystem命令 |
envvars |
显示计算的Hadoop环境变量 |
fetchdt |
从NameNode获取一个委托令牌 |
getconf |
从配置中获取配置值 |
groups |
获取用户所属的组 |
lsSnapshottableDir |
列出当前用户拥有的所有可快照目录 |
Daemon Commands:
命令 |
描述 |
balancer |
运行集群平衡实用程序 |
datanode |
运行DFS datanode |
dfsrouter |
运行DFS路由器 |
diskbalancer |
将数据均匀地分布在给定节点的硬盘上 |
httpfs |
运行HttpFS server, HDFS的HTTP网关 |
journalnode |
运行DFS journalnode |
mover |
运行实用程序以跨存储类型移动块副本 |
namenode |
运行DFS namenode |
nfs3 |
运行NFS v3网关 |
portmap |
运行portmap服务 |
对于命令的具体可以可以使用 help 帮助 查看具体使用,我们平时使用做多的就是 hdfs dfs :
[winner_spark@hdp105 root]$ hdfs dfs -help
Usage: hadoop fs [generic options]
[-appendToFile ... ]
[-cat [-ignoreCrc] ...]
[-checksum ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] [-l] [-d] [-t ] ... ]
[-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] ... ]
[-count [-q] [-h] [-v] [-t []] [-u] [-x] [-e] ...]
[-cp [-f] [-p | -p[topax]] [-d] ... ]
[-createSnapshot []]
[-deleteSnapshot ]
[-df [-h] [ ...]]
[-du [-s] [-h] [-v] [-x] ...]
[-expunge]
[-find ... ...]
[-get [-f] [-p] [-ignoreCrc] [-crc] ... ]
[-getfacl [-R] ]
[-getfattr [-R] {-n name | -d} [-e en] ]
[-getmerge [-nl] [-skip-empty-file] ]
[-head ]
[-help [cmd ...]]
[-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] [ ...]]
[-mkdir [-p] ...]
[-moveFromLocal ... ]
[-moveToLocal ]
[-mv ... ]
[-put [-f] [-p] [-l] [-d] ... ]
[-renameSnapshot ]
[-rm [-f] [-r|-R] [-skipTrash] [-safely] ...]
[-rmdir [--ignore-fail-on-non-empty] ...]
[-setfacl [-R] [{-b|-k} {-m|-x } ]|[--set ]]
[-setfattr {-n name [-v value] | -x name} ]
[-setrep [-R] [-w] ...]
[-stat [format] ...]
[-tail [-f] ]
[-test -[defsz] ]
[-text [-ignoreCrc] ...]
[-touch [-a] [-m] [-t TIMESTAMP ] [-c] ...]
[-touchz ...]
[-truncate [-w] ...]
[-usage [cmd ...]]
————————————————
参考链接:Hadoop --- HDFS介绍_hadoop hdfs_三水写代码的博客-CSDN博客
参考链接:Hadoop之HDFS简介_hadoop的hdfs_数新网络的博客-CSDN博客