HDFS 产出背景及定义
产生背景
随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系
统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这
就是分布式文件管理系统。HDFS 只是分布式文件管理系统中的一种。
定义
HDFS组成架构
1.NameNode
就是Master,它 是一个主管、管理者。
作用:
(1)管理HDFS的名称空间;
(2)配置副本策略;
(3)管理数据块(Block)映射信息;
(4)处理客户端读写请求。
2.DataNode
就是Slave。NameNode 下达命令,DataNode执行实际的操作。
(1)存储实际的数据块;
(2)执行数据块的读/写操作。
3.Client
就是客户端。
(1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行上传;
(2)与NameNode交互,获取文件的位置信息;
(3)与DataNode交互,读取或者写入数据;
(4)Client提供一些命令来管理HDFS,比如NameNode格式化;
(5)Client可以通过一些命令来访问HDFS,比如对HDFS增删查改操作;
4.Secondary NameNode
并非NameNode的热备。当NameNode挂掉的时候,它并不 能马上替换NameNode并提供服务。
(1)辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode ; (2)在紧急情况下,可辅助恢复NameNode。
HDFS 文件块大小
HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数 ( dfs.blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M,1.x版本中是64M。
如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开 始位置所需的时间。导致程序在处理这块数据时,会非常慢。
HDFS 的 Shell 操作
基本语法
hdfs dfs 具体命令 或者 hadoop fs 具体命令
两者效果完全相同
准备工作
1、首先将hadoop集群启动
start-dfs.sh
start-yarn.sh
2、查看命令详细解释
hdfs dfs -help rm
翻译:
-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ... :
删除与指定文件模式匹配的所有文件。相当于Unix
命令 “rm<src>”
-f 如果该文件不存在,则不显示诊断消息或
修改退出状态以反映错误。
-[rR] 递归删除目录。
-跳过废纸篓选项会绕过废纸篓(如果启用),并立即删除<src>。
- 安全选项需要安全确认,如果启用,需要
删除超过的大目录前的确认
<hadoop.shell.delete.limit.num.files> 文件。预计在以下情况下会出现延迟
递归地遍历大目录以计算
确认前要删除的文件。
3、创建文件夹
在hdfs中创建一个名为HelloHadoop的文件夹
hadoop fs -mkdir /HelloHadoop
创建完毕我们可以在web界面中看到该文件夹
上传命令
1、-moveFromLocal:从本地剪切粘贴到 HDFS
先在hadoop中新建一个hdfs1.txt的文件并在里面写入helloHdfs
vim hdfs1.txt
执行命令将该文件剪切到HDFS的HelloHadoop文件夹中
hdfs dfs -moveFromLocal ./hdfs1.txt /HelloHadoop
在web界面中查看该文件
2、-copyFromLocal:从本地文件系统中拷贝文件到 HDFS 路径去
在hadoop中创建hdfs2.txt文件并在里面输入helloHDFS
vim hdfs2.txt
执行命令将该文件复制到HDFS的HelloHadoop文件夹中
hdfs dfs -copyFromLocal ./hdfs2.txt /HelloHadoop
在web界面中查看该文件
3、-put:等同于 copyFromLocal,生产环境更习惯用 put
在hadoop中创建hdfs3.txt文件并在里面输入helloDFS
vim hdfs3.txt
执行命令将该文件复制到HDFS的HelloHadoop文件夹中
hdfs dfs -put ./hdfs3.txt /HelloHadoop
在web界面中查看该文件
4、 -appendToFile:追加一个文件到已经存在的文件末尾
在hadoop中创建hdfs4.txt文件并在里面输入abc
vim hdfs4.txt
执行命令将该文件中的内容追加到HDFS的HelloHadoop文件夹中的hdfs1.txt中
hdfs dfs -appendToFile ./hdfs4.txt /HelloHadoop/hdfs1.txt
使用查看命令查看追加到hdfs1.txt中的内容
hdfs dfs -cat /HelloHadoop/hdfs1.txt
我们可以看到hdfs4.txt中的内容abc已经追加到了hdfs1.txt中
下载命令
1、-copyToLocal:从 HDFS 拷贝到本地
执行命令将HelloHadoop文件夹下的hdfs1.txt文件复制到本地的home文件夹中
hdfs dfs -copyToLocal /HelloHadoop/hdfs1.txt /home
进到home目录中查看文件拷贝成功
2.-get:等同于 copyToLocal,生产环境更习惯用 get
执行命令将HelloHadoop文件夹下的hdfs2.txt文件复制到本地的home文件夹中
hdfs dfs -get /HelloHadoop/hdfs2.txt /home
进到home目录中查看文件拷贝成功
系统操作命令
1、-ls: 显示目录信息
执行命令查看目录信息
hdfs dfs -ls /HelloHadoop
2、-cat:显示文件内容
执行命令查看HelloHadoop文件夹中hdfs1.txt文件中的内容
hdfs dfs -cat /HelloHadoop/hdfs1.txt
3、-chgrp、-chmod、-chown:Linux 文件系统中的用法一样,修改文件所属权限
hdfs dfs -chmod 666 /HelloHadoop/hdfs1.txt
4、-mkdir:创建路径
在HDFS中创建一个名为hhh的目录
hdfs dfs -mkdir /hhh
5、-cp:从 HDFS 的一个路径拷贝到 HDFS 的另一个路径
执行命令将HelloHadoop目录中的hdfs1.txt文件拷贝到hhh目录中
hdfs dfs -cp /HelloHadoop/hdfs1.txt /hhh
查看hhh目录 拷贝成功
6、-mv:在 HDFS 目录中移动文件
执行命令将HelloHadoop目录中的hdfs2.txt文件移动到hhh目录中
hdfs dfs -mv /HelloHadoop/hdfs2.txt /hhh
7、-tail:显示一个文件的末尾 1kb 的数据
执行命令查看HelloHadoop目录中的hdfs1.txt文件末尾1kb大小的内容
hdfs dfs -tail /HelloHadoop/hdfs1.txt
8、-rm:删除文件或文件夹、
执行命令删除HelloHadoop目录中的hdfs2.txt文件
hdfs dfs -rm /HelloHadoop/hdfs2.txt
9、-rm -r:递归删除目录及目录里面内容
执行命令遍历删除HelloHadoop目录中的所有文件
hdfs dfs -rm -r /HelloHadoop
10、-du: 统计文件夹的大小信息
11、-setrep:设置 HDFS 中文件的副本数量
执行命令更改HelloHadoop目录中的hdfs1.txt文件的副本数量