hadoop shell命令行基础

时间:2024-03-14 08:33:53

1. 查看hdfs根目录下的文件:hadoop fs -ls  hdfs://master:9000/

hadoop shell命令行基础

可以简写为以下的形式:hadoop fs -ls /

hadoop shell命令行基础

或者这么写:hdfs dfs -ls /

hadoop shell命令行基础

2. 创建文件夹:hadoop fs -mkdir /test

hadoop shell命令行基础

3. 在指定文件夹中创建空文件:hadoop fs -touchz /test/zs.txt

hadoop shell命令行基础

文件为空时 再创建一个同名的文件不会报错 

4. 上传本地文件到HDFS(将Linux系统下当前目录下的a.php文件上传到根目录下):hadoop fs -put ./a.php /test

hadoop shell命令行基础

文件存在时 如果再上传相同的文件 就会报错

hadoop shell命令行基础

选项-f:如果文件存在 则再上传相同的文件直接覆盖之前的文件

hadoop shell命令行基础

5. 显示文件内容:hadoop fs -cat /test/a.php

hadoop shell命令行基础

6. 从hdfs下载文件到本地:hadoop fs -get /test/a.php

hadoop shell命令行基础

没有覆盖本地文件的选项 如果本地存在相同文件 则会报错

hadoop shell命令行基础

7. 将本地文件移动到hdfs中(与put功能类似 不同之处在于 moveFromLocal会删除本地的文件 而put则不会)

hadoop fs -moveFromLocal ./b.php /test

hadoop shell命令行基础

8. 将hdfs中的文件移动到本地(moveToLocal与get功能类似 不同之处在于 moveToLocal会删除hdfs中的文件 而get则不会)

9. 将本地文件拷贝到hdfs中(copyFromLocal与put功能相同):hadoop fs -copyFromLocal ./c.php /test

hadoop shell命令行基础

10. 将hdfs中的文件拷贝到到本地(copyToLocal与get功能相同)

11. 将本地的文件追加到hdfs中已经存在的文件末尾:hdfs fs -appendToFile ./test.php /test/a.php

hadoop shell命令行基础

12. 查看文件末尾:hadoop fs -tail /test/a.php

hadoop shell命令行基础

13. 以字符形式显示文件内容:hadoop fs -text /test/a.php(功能类似于cat 区别在于如果不是字符文件 则会显示乱码)

hadoop shell命令行基础

14. 修改文件权限:hadoop fs -chmod 777 /test/a.php

hadoop shell命令行基础

15. 修改文件用户和组:hadoop fs -chown 777 /test/a.php(hadoop没有用户的概念 它是一种弱的权限控制 并不会检验用户是否存在 即使该用户和组不存在也可以设置成功 你指定它的用户和组是谁就是谁)

hadoop shell命令行基础

16. 将文件从hdfs的一个路径拷贝到另外一个路径:hadoop fs -cp /test/a.php /

hadoop shell命令行基础

拷贝相同的文件到同一个目录中会报错

hadoop shell命令行基础

-f参数会直接忽视错误 不管文件是否存在 强行将文件拷贝过去

hadoop shell命令行基础

17. 将文件从hdfs的一个路径拷贝到另外一个路径:hadoop fs -mv /test/c.php /

hadoop shell命令行基础

18. 将多个文件从hdfs上合并下载到本地:hadoop fs -getmerge /test/*.php ./merge.php

hadoop shell命令行基础

这是hadoop的bug 参数中有*时 它会在本地查找 而不是在hdfs中查找 要想避免这种问题 就要把地址写全

hadoop shell命令行基础

19. 删除文件:hadoop fs -rm  /test/a.php

-r参数表示递归删除某个目录下的所有文件和子目录:hadoop fs -rm -r  /test

20. 删除空目录:hadoop fs -rmdir  /test/a.php(这个命令无法删除非空目录)

21. 统计文件系统的可用空间信息:hadoop fs -df

hadoop shell命令行基础

hadoop fs -df -h /

hadoop shell命令行基础

22. 统计文件及目录的大小信息:hadoop -fs du /

hadoop shell命令行基础

-s 参数表示显示大小信息 -h参数表示带单位:hadoop -fs du -s  -h /

hadoop shell命令行基础

23. 统计一个指定目录下的文件节点数目:hadoop fs  -count /

hadoop shell命令行基础

24. 设置hdfs中文件副本数目:hadoop fs -setrep 2 /a.php(文件夹只是一种描述文件的特殊文件 是文件系统的元数据 它本身并不存储数据 因此在hdfs中副本数为0)

a.php文件 在设置之前的副本数为3

hadoop shell命令行基础

a.php文件 在设置之后的副本数为2

hadoop shell命令行基础

hadoop shell命令行基础

需要注意的是:这里设置的副本数只是在NameNode的元数据中记录下来了 如果设置的副本数小于当前服务器的节点数 则集群中该文件的副本数就是设置的这个副本数 因为它会迅速复制出副本 而如果设置的副本数大于当前服务器的节点数 集群中该文件的副本数就等于节点数 因为当前集群没有能力保证文件副本数达到设置的副本数 只有当集群中增加新的机器时 才会复制剩余的副本