HDFS的常用命令
接下来我们来了解一下一些常用的文件系统操作,例如:读取文件,新建目录,移动文件,删除数据,列出目录,等等。你可以在命令行中输入hadoop fs -help
命令读取每个命令的详细帮助文件。
现在请跟着我一起,在Linux
环境下对Hadoop
进行文件系统操作,来体验一下Hadoop
的使用。
新建目录:
在本地和hadoop
中分别创建文件夹:
本地创建目录:
root@evassh-12039904:~# mkdir /develop
root@evassh-12039904:~# mkdir /develop/input
root@evassh-12039904:~# mkdir /develop/output
hadoop
创建目录:
root@evassh-12039904:~# start-dfs.sh
Starting namenodes on [localhost]
localhost: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
localhost: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-evassh-12039904.out
localhost: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-evassh-12039904.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: Warning: Permanently added '0.0.0.0' (ECDSA) to the list of known hosts.
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-evassh-12039904.out
root@evassh-12039904:~# hadoop fs -mkdir /usr
root@evassh-12039904:~# hadoop fs -mkdir /usr/input
root@evassh-12039904:~# hadoop fs -mkdir /usr/output
上传文件至dfs:
切换到本地input
目录下,创建文件并添加数据:hello hadoop
。
root@evassh-12039904:~# cd /develop/input/
root@evassh-12039904:/develop/input# touch helloworld.txt
root@evassh-12039904:/develop/input# vi helloworld.txt
将该文件上传至hadoop
:使用hadoop fs -put <要上传的文件> <
hdfs目录>
命令。
root@evassh-12039904:/develop/input# hadoop fs -put helloworld.txt /usr/output
查看上传到HDFS
的文件:
hadoop fs -cat /usr/output/helloworld.txt
移动与删除
列出HDFS
中的目录和文件:
root@evassh-12039904:/develop/input# hadoop fs -ls /usr/hadoop
ls: `/usr/hadoop': No such file or directory
root@evassh-12039904:/develop/input# hadoop fs -ls /user/hadoop
root@evassh-12039904:/develop/input# hadoop fs -ls /
Found 2 items
drwxr-xr-x - root supergroup 0 2017-10-17 07:21 /user
drwxr-xr-x - root supergroup 0 2022-07-26 07:00 /usr
root@evassh-12039904:/develop/input# hadoop fs -ls /usr
Found 2 items
drwxr-xr-x - root supergroup 0 2022-07-26 07:00 /usr/input
drwxr-xr-x - root supergroup 0 2022-07-26 07:04 /usr/output
root@evassh-12039904:/develop/input# hadoop fs -ls /usr/output
Found 1 items
-rw-r--r-- 1 root supergroup 15 2022-07-26 07:04 /usr/output/helloworld.txt
将helloworld.txt
移动到根目录;
root@evassh-12039904:/develop/input# hadoop fs -mv /usr/output/helloworld.txt /
root@evassh-12039904:/develop/input# hadoop fs -ls /
Found 3 items
-rw-r--r-- 1 root supergroup 15 2022-07-26 07:04 /helloworld.txt
drwxr-xr-x - root supergroup 0 2017-10-17 07:21 /user
drwxr-xr-x - root supergroup 0 2022-07-26 07:00 /usr
删除helloworld.txt
;
root@evassh-12039904:/develop/input# hadoop fs -rm /helloworld.txt
22/07/26 07:10:47 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /helloworld.txt
root@evassh-12039904:/develop/input# hadoop fs -ls /
Found 2 items
drwxr-xr-x - root supergroup 0 2017-10-17 07:21 /user
drwxr-xr-x - root supergroup 0 2022-07-26 07:00 /usr
hadoop fs -rm
命令只能删除文件或者空文件夹,如果要用这个命令去删除非空文件夹就会非常麻烦。
和Linux
中递归删除一致,我们在-rm
之后加入一个-r
即可,用-rmr
也可。
下表列出了Hadoop
常用的shell
命令,在之后使用的时候可以作为参考。
选项名称 | 使用格式 | 含义 |
---|---|---|
-ls | -ls <路径> | 查看指定路径的当前目录结构 |
|-lsr |-lsr <路径> | 递归查看指定路径的目录结构|
|-du |-du <路径> | 统计目录下个文件大小|
|-dus |-dus <路径> | 汇总统计目录下文件(夹)大小|
|-count| -count [-q] <路径> | 统计文件(夹)数量|
|-mv |-mv <源路径> <目的路径> | 移动|
|-cp |-cp <源路径> <目的路径> | 复制|
|-rm |-rm [-skipTrash] <路径> | 删除文件/空白文件夹|
|-rmr |-rmr [-skipTrash] <路径> | 递归删除|
|-put |-put <多个 linux 上的文件> <hdfs 路径> | 上传文件|
|-copyFromLocal| -copyFromLocal <多个 linux 上的文件><hdfs 路径> | 从本地复制|
|-moveFromLocal |-moveFromLocal <多个 linux 上的文件><hdfs 路径> | 从本地移动|
|-getmerge |-getmerge <源路径> <linux 路径> | 合并到本地|
|-cat |-cat <hdfs 路径> | 查看文件内容|
|-text |-text <hdfs 路径> | 查看文件内容|
|-copyToLocal |-copyToLocal [-ignoreCrc] [-crc] [hdfs 源路径] [linux 目的路径] | 从HDFS复制到本地|
|-moveToLocal |-moveToLocal [-crc] <hdfs 源路径> <linux目的路径> | 从HDFS移动到本地|
|-mkdir |-mkdir <hdfs 路径> | 创建空白文件夹|
|-setrep | -setrep [-R] [-w] <副本数> <路径> | 修改副本数量|
|-touchz | -touchz <文件路径> | 创建空白文件|
- 在
HDFS
中创建/usr/output/
文件夹; - 在本地创建
hello.txt
文件并添加内容:“HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。
”; - 将
hello.txt
上传至HDFS
的/usr/output/
目录下; - 删除
HDFS
的/user/hadoop
目录; - 将
Hadoop
上的文件hello.txt
从HDFS
复制到本地/usr/local
目录
root@evassh-12039904:/develop/input# touch hello.txt
root@evassh-12039904:/develop/input# vi hello.txt
root@evassh-12039904:/develop/input# hadoop fs -put hello.txt /usr/output
root@evassh-12039904:/develop/input# hadoop fs -ls /usr/output
Found 1 items
-rw-r--r-- 1 root supergroup 74 2022-07-26 07:22 /usr/output/hello.txt
root@evassh-12039904:/develop/input# hadoop fs -rm -r /user/hadoop
22/07/26 07:22:52 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /user/hadoop
root@evassh-12039904:/develop/input# hadoop fs -get /usr/output/hello.txt /usr/local
root@evassh-12039904:/develop/input# ls /usr/local
bin etc games hadoop hello.txt include lib man sbin share src
root@evassh-12039904:/develop/input#
完整代码
pwd
回车
cd /
回车
mkdir /develop
回车
mkdir /dev
回车
mkdir /develop/input
回车
mkdir /develop/output
回车
start-dfs.sh
回车
hadoop fs -mkdir /usr
回车
hadoop fs -mkdir /usr/input
回车
hadoop fs -mkdir /usr/output
回车
hadoop fs -ls /
回车
hadoop fs -ls /usr
回车
cd /dev
回车
cd /develop/input
回车
touch helloworld.txt
回车
vim helloworld.txt
回车
hello hadoop
退出 :wq
hadoop fs -put helloworld.txt /usr/output
回车
hadoop fs -cat /usr/output/helloworld.txt
回车
hadoop fs -ls /user/hadoop
回车
hadoop fs -ls /
回车
hadoop fs -ls /usr
回车
hadoop fs -ls /user
回车
hadoop fs -mv /usr/output/helloworld.txt /
回车
hadoop fs -ls /
回车
hadoop fs -rm /helloworld.txt
回车
hadoop fs -mkdir /usr/output
回车
touch hello.txt
回车
vim hello.txt
回车
HDFS 的块比磁盘的块大,其目的是为了最小化寻址开销。
退出 wq
hadoop fs -put hello.txt /usr/output
回车
hadoop fs -ls /usr/output
回车
hadoop fs -rm -r /user/hadoop
回车
hadoop fs -get /usr/output/hello.txt /usr/local
回车
ls /usr/local