HDFS的shell操作

基本语法:

  1. # 使用hadoop命令操作hdfs
  2. hadoop fs <具体命令>
  3. # 或者 使用hdfs命令操作hdfs
  4. hdfs dfs <具体命令> # 最后其实也是调用的:hadoop fs <具体命令>
  5. # 或者使用hadoop dfs操作hdfs
  6. hadoop dfs <具体命令> # 不推荐,已过时

三种命令的区别:

  • hadoop fs:可操作任意文件系统,不仅仅是hdfs文件系统,还能操作本地、谷歌GFS等,使用范围更广
  • hdfs dfs:只能操作hdfs文件系统(包括与local fs之间的操作)
  • hadoop dfs:(已过时),只能操作 hdfs 文件系统(包括与 local fs之间的操作)
    1. # hdfs支持多种文件系统,包括本地文件系统file://、分布式文件系统hdfs://、谷歌文件系统gfs://等。具体操作的是什么文件系统取决于命令中的文件路径URL前缀协议
    2. # 例如:
    3. hadoop fs -ls file:/// # 读取本地文件系统
    4. hadoop fs -ls hdfs://hadoop102:8020/ # 读取hdfs分布式文件系统
    5. hadoop fs -ls / # 没有指定协议时,将加载读取 fs.defaultFS 中配置的值
    查看帮助信息: ```java

    查看hadoop fs 下所有命令

    hadoop fs # 或者 hdfs dfs

查看某个命令的帮助信息

hadoop fs -help <不加短横线的具体命令> # 例如:hadoop fs -help rm

  1. 很多命令、参数和Linux命令很相似,例如:
  2. ```java
  3. # 列出hdfs上的文件/文件夹列表,类似linux的ls命令
  4. hadoop fs -ls /
  5. # 创建文件夹,类似Linux的mkdir命令
  6. hadoop fs -mkdir /wcinput
  7. # 删除hdfs上的文件夹,类似linux的 rm -rf命令
  8. hadoop fs -rm -f -r /wcoutput
  9. # 统计文件夹的大小信息
  10. # -s 列出总大小,不加该参数时会列出文件夹下每个文件大小
  11. # -h 以适当的单位展示
  12. # 输出结果第一项表示文件大小,第二项表示所有副本加一起的总大小(默认情况下,一个文件有3个副本,所以默认情况下第二项结果等于第一项的3倍)
  13. hadoop fs -du -s -h /jinguo
  14. # 其他的,还有 cat、ls、chgrp、chown、chmod、cp、mv、tail等

另外,还有些用于上传、下载操作的命令,例如:

  1. # 从本地剪切,粘贴到hdfs
  2. hadoop fs -moveFromLocal shuguo.txt /sanguo
  3. # 从本地复制,粘贴到hdfs
  4. hadoop fs -copyFromLocal weiguo.txt /sanguo
  5. # 上传,同 copyFromLocal 功能一样
  6. hadoop fs -put aa.txt /wcinput
  7. # 从服务器复制,粘贴到本地
  8. hadoop fs -copyToLocal /sanguo/shuguo.txt ./
  9. # 下载,等同于 copyToLocal
  10. hadoop fs -get /wcinput/aa.txt a.txt

追加一个文件到已经存在的文件末尾:

  1. # liubei.txt追加到shuguo.txt文件末尾
  2. hadoop fs -appendToFile liubei.txt /sanguo/shuguo.txt

设置HDFS中文件副本数量:

  1. hadoop fs -setrep 10 /jinguo/weiguo.txt

设置/jinguo/weiguo.txt的副本数量为10个副本。但是我们目前集群中只有3台服务器,所以最多只有3个副本,此时 hdfs 会先将/jinguo/weiguo.txt副本数量设置为10,等将来节点数量如果增加了,就会在新节点中也备份/jinguo/weiguo.txt副本。