HDFS文件系统用户基本操作¶
用户与权限¶
HDFS 身份来自操作系统,管理员通过 supergroup 与扩展属性精细控制访问。
超级用户与用户身份¶
- 谁启动 NameNode,谁就是 HDFS 的 超级用户(super-user)。
- 客户端进程在 HDFS 上的身份由主机操作系统决定;类 Unix 系统上即
whoami的结果。
参考:https://hadoop.apache.org/docs/r3.1.3/hadoop-project-dist/hadoop-hdfs/HdfsPermissionsGuide.html
HDFS 用户命令¶
HDFS 命令分用户命令、管理员命令、调试命令三类。用户命令面向日常文件操作,是最高频的一组。
参考:https://hadoop.apache.org/docs/r3.1.3/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html
通过WebUI管理文件¶
hdfs-site.xml
增加配置项后,重启HDFS
通过命令管理文件¶
基础命令¶
hdfs dfs [options] 在 Hadoop 支持的文件系统上执行命令,等价于早期的 hadoop fs。
| 作用 | 命令 |
|---|---|
| 本地 →HDFS | -put [-f] [-p] [-l] <localsrc> ... <dst> |
| 本地 →HDFS | -copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst> |
| 本地 →HDFS(搬移) | -moveFromLocal <localsrc> ... <dst> |
| HDFS→ 本地 | -get [-p] [-ignoreCrc] [-crc] <src> ... <localdst> |
| HDFS→ 本地 | -copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst> |
| 追加 | -appendToFile <localsrc> ... <dst> |
| 合并下载 | -getmerge [-nl] <src> <localdst> |
文件管理¶
| 作用 | 命令 |
|---|---|
| 建目录 | -mkdir [-p] <path> ... |
| 列举 | -ls [-d] [-h] [-R] [<path> ...] |
| 建空文件 | -touchz <path> ... |
| 查看内容 | -cat [-ignoreCrc] <src> ... |
| 尾部跟踪 | -tail [-f] <file> |
| 复制 | -cp [-f] [-p] <src> ... <dst> |
| 移动/重命名 | -mv <src> ... <dst> |
| 删除 | -rm [-f] [-r\|-R] [-skipTrash] <src> ... |
| 删空目录 | -rmdir [--ignore-fail-on-non-empty] <dir> ... |
| 统计计数 | -count [-q] [-h] <path> ... |
实操示例¶
准备数据¶
启动HDFS¶
使用用户zhangsan启动HDFS(张三用户已配置免密登录);
使用用户root执行后续操作。
配置全局环境变量¶
[root@node0 ~]# vim /etc/profile
export HADOOP_HOME=/opt/bigdata/hadoop/default
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin/:$PATH
Linux本地创建三个文件¶
[root@node1 ~]# echo "hello hadoop" > file_hadoop
[root@node1 ~]# echo "hello hbase" > file_to_append
[root@node1 ~]# echo "hello spark" > file_to_move
创建目录¶
在HDFS上创建目录/input¶
[root@node0 zhangsan]# hdfs dfs -mkdir /input
mkdir: Permission denied: user=root, access=WRITE, inode="/":zhangsan:supergroup:drwxr-xr-x
把root用户加入supergroup¶
如果创建失败,(把root用户加入supergroup)
[root@node0 ~]# groupadd supergroup
You have new mail in /var/spool/mail/root
[root@node0 ~]# gpasswd -a root supergroup
Adding user root to group supergroup
# 同步系统的权限信息到HDFS
[root@node0 ~]# hdfs dfsadmin -refreshUserToGroupsMappings
Refresh user to groups mapping successful
创建目录¶
创建文件夹 hdfs:///input/
创建文件夹hdfs:///user/root/
Linux与HDFS交互¶
上传文件¶
上传文件 file_hadoop到hdfs:///input/
创建空白文件¶
创建空白文件hdfs:///input/file_hbase
内容追加¶
将本地文件 file_to_append 的内容追加到 hdfs:///input/file_hbase
内容查看¶
查看HDFS中 hdfs:///input/file_hbase 文件内容
本地移动到HDFS¶
将本地文件 file_to_move 移动到 hdfs:///input/
可以看到本地Linux文件系统中文件已经消失
HDFS文件管理¶
文件重命名¶
将 hdfs:///input/file_to_move 重命名为 hdfs:///input/file_spark
将文件夹 hdfs:///input/ 重命名为 hdfs:///data/
目录复制¶
将目录hdfs:///data/ 复制到 hdfs:///user/root/下
文件列表¶
查看hdfs:///user/root/data下的文件的详细信息(创建修改时间,所有者,权限)
[root@node1 ~]# hdfs dfs -ls /user/root/data
Found 3 items
-rw-r--r-- 3 root supergroup 13 2022-10-01 20:48 /user/root/data/file_hadoop
-rw-r--r-- 3 root supergroup 12 2022-10-01 20:48 /user/root/data/file_hbase
-rw-r--r-- 3 root supergroup 12 2022-10-01 20:48 /user/root/data/file_spark
合并下载¶
将hdfsfile_hadoop, file_hbase, file_spark下载到本地file_merge.txt。
[root@node1 ~]# hdfs dfs -getmerge /user/root/data/* ~/file_merge.txt
You have new mail in /var/spool/mail/root
[root@node1 ~]# cat file_merge.txt
hello hadoop
hello hbase
hello spark
将hdfsfile_hadoop, file_hbase, file_spark下载到本地file_merge.txt,以换行符分割。
[root@node1 ~]# hdfs dfs -getmerge -nl /user/root/data/* ~/file_merge.txt
You have new mail in /var/spool/mail/root
[root@node1 ~]# cat file_merge.txt
hello hadoop
hello hbase
hello spark
统计¶
统计hdfs:///user/root/data内文件数量和总大小
[root@node1 ~]# hdfs dfs -count /user/root/data/
2 3 37 /user/root/data
目录数(包括当前目录.) 文件数 文件总大小 统计的目录名
删除¶
删除hdfs:///data/下的所有文件