一、HDFS基本概念
1、块(Block)
HDFS默认一个块128MB,一个文件被分成多个块,以块作为存储单位。块的大小远远大于普通文件系统,可以最小化寻址开销。
2、名称节点和数据节点
1)名称节点
在HDFS中,名称节点(NameNode)是文件系统的管理节点,负责管理分布式文件系统命名空间(NameSpace),保存了两个核心的数据结构:文件系统映像文件(fsimage)和操作日志文件(edits)。 名称节点起来之后,HDFS中的更新操作会重新写到edits文件中,因为fsimage文件一般都很大(GB级别的很常见),如果所有的更新操作都往fsimage文件中添加,这样会导致系统运行得十分缓慢,但是,如果往edits文件里面写就不会这样,因为edits要小很多。每次执行写操作之后,且在向客户端发送成功代码之前,edits文件都需要同步更新。
(2)数据节点
数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者是名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表,每个数据节点中的数据会被保存在各自节点的本地Linux文件系统中。
二、HDFS体系结构
HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点(NameNode)和若干个数据节点(DataNode)。名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问。集群中的数据节点一般是一个节点运行一个数据节点进程,负责处理文件系统客户端的读/写请求,在名称节点的统一调度下进行数据块的创建、删除和复制等操作。每个数据节点的数据实际上是保存在本地Linux文件系统中的。
三、HDFS读写删文件流程
1、读文件
2、写入文件
3、删除文件流程
(1)client执行 hadoop fs -rm
(2)会执行DistributedFileSystem类的delete方法,逻辑删除
(3)通过namenode给datanode发出指令,进行物理删除
四、HDFS启动与关闭
1、启动HDFS
执行: start-dfs.sh
利用jps查看集群启动情况
2、关闭HDFS
执行:stop-dfs.sh
五、HDFS常用命令
(一)三种shell命令方式
1、hadoop fs
适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统
2、hadoop dfs
只能适用于HDFS文件系统
3、hdfs dfs
hdfs dfs跟hadoop dfs的命令作用一样,也只能适用于HDFS文件系统
(二)FileSystem Shell文档
(三)常用命令
1、hadoop fs -ls
2、hadoop fs -ls -R
3、hadoop fs -cat
4、hadoop fs chgrp [-R] group
5、hadoop fs -chown [-R] [owner][:[group]]
6、hadoop fs -chmod [-R]
7、hadoop fs -tail [-f]
8、hadoop fs -stat [format]
9、hadoop fs -touchz
10、hadoop fs -mkdir [-p] 创建指定的一个或多个目录,-p选项用于递归创建子目录。
11、hadoop fs -copyFromLocal 将本地源文件复制到路径指定的文件或目录中。
12、hadoo fs -copyToLocal [-ignorcrc] [-crc] 将目标文件复制到本地文件或目录中,可用-ignorecrc选项复制CRC校验失败的文件,使用-crc选项复制文件以及CRC信息。
13、hadoop fs -cp 将文件从源路径复制到目标路径。
14、hadoop fs -du
15、hadoop fs -expunge 清空回收站。
16、hadoop fs -get [-ignorcrc] [-crc] 复制指定的文件到本地文件系统指定的文件或目录内,可用-ignorecrc选项复制CRC校验失败的文件,使用-crc选项复制文件以及CRC信息。
17、hadoop fs -getmerge [-nl] 对指定目录内所有文件进行合并,写入指定的本地文件。-nl是可选的,用于指定在每个文件结尾添加一个换行符。
18、hadoop fs -put 从本地文件系统中复制指定的单个或多个源文件到指定的目标文件系统中。
19、hadoop fs moveFromLocal 与put命令功能相同,但是文件上传结束后会从本地文件系统中删除指定的文件。
20、hadoop fs -mv 将文件或目录从源路径移到目标路径。
21、hadoop fs -rm
22、hadoop fs -rm -r
23、hadoop fs -setrep [-R]
24、hadoop fs -test [-ezd]
-e (exist)检查文件是否存在,如果存在则返回0,否则返回1
-z (zero)检查文件是否是零字节,如果是则返回0,否则返回1
-d(directory)检查路径是否是目录,如果是则返回0,否则返回1。
25、hadoop fs -text
六、HDFS常用命令操作实战
1、创建单层目录
hadoop fs -mkdir /park
叠加创建文件夹
hadoop fs -mkdir - p /park01/park02
2、查看目录
3、利用Web界面访问HDFS
注意:虚拟机hadoop129的IP地址是192.168.10.129,端口号是50070。
(1)利用IP地址来访问
(2)也可以利用主机名来访问
4、上传本地文件到hdfs
1)创建qing.txt文件
2)上传qing.txt文件到hdfs的/park目录:
查看是否上传成功
web界面查看:
5.下载hdfs文件到本地
(1)先删除本地的qing.txt 文件
(2)下载qing.txt文件到本地目录
hadoop fs -get /park/qing.txt
可以将HDFS上的文件下载到本地指定位置:
hadoop fs -get /park/test1.txt /home/
6、删除hdfs文件
hadoop fs -rm /park/qing.txt
7、删除hdfs目录
hadoop fs -rmdir /park
web查看是否已经删除
如果出现:
rmdir: '/park' : Directory is not empty
说明:-rmdir,删除不了非空目录。
要递归删除才能删除非空目录:
hadoop fs -rm -r /park01
8、移动目录或者文件
将text.txt文件 更名为ling_er.txt
将qing.txt 移动到user目录里:
将/user/qing.txt更名为/user/qing02.txt:
9、文件合并下载
现在本地创建qing03.txt qing04.txt上传
合并 /user目录的文件下载到本地目录的text.txt:
查看本地的test.txt文件是否是合并后的文件:
合并下载成功!!!
10、检查文件信息
hadoop fsck /user/qing02.txt -files -blocks -locations -racks
1 blk_1073741826_1002 文件块
2 len=13 文件长度
3 Live_repl=1 副本数量
4 [/default-rack/192.168.225.100:50010] 机架
12、复制文件或目录
(1)将park中的qing02.txt文件复制到park01/message.txt
(3)将/park01目录复制到/park02目录
13、递归查看目录
hadoop fs -ls -R /
14、查看文件大小
hadoop fs -du /park01/message.txt
15、查看某个文件的个数
hadoop fs -count /qing02.txt
16、检查hadoop本地库
hadoop checknative -a
17、进入退出安全模式
(1)进入安全模式
hdfs dfsadmin -safemode enter
注意:安全模式只能读不能写
此时创建目录就会报错:
退出安全模式
hdfs dfsadmin -safemode leave
此时创建就没有任何问题
七、使用HDFS Explorer可视化操作hdfs
1、下载hdfs Explorer
链接:点击下载
提取码:z0ad
2、安装
HDFS可视化软件使用详情