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之间的操作)
    # hdfs支持多种文件系统,包括本地文件系统file://、分布式文件系统hdfs://、谷歌文件系统gfs://等。具体操作的是什么文件系统取决于命令中的文件路径URL前缀协议
    # 例如:
    hadoop fs -ls file:///  # 读取本地文件系统
    hadoop fs -ls hdfs://hadoop102:8020/  # 读取hdfs分布式文件系统
    hadoop fs -ls /  # 没有指定协议时,将加载读取 fs.defaultFS 中配置的值
    

查看帮助信息:

# 查看hadoop fs 下所有命令
hadoop fs  # 或者 hdfs dfs

# 查看某个命令的帮助信息
hadoop fs -help <不加短横线的具体命令> # 例如:hadoop fs -help rm

很多命令、参数和Linux命令很相似,例如:

# 列出hdfs上的文件/文件夹列表,类似linux的ls命令
hadoop fs -ls /

# 创建文件夹,类似Linux的mkdir命令
hadoop fs -mkdir /wcinput

# 删除hdfs上的文件夹,类似linux的 rm -rf命令
hadoop fs -rm -f -r /wcoutput

# 统计文件夹的大小信息
# -s 列出总大小,不加该参数时会列出文件夹下每个文件大小
# -h 以适当的单位展示
# 输出结果第一项表示文件大小,第二项表示所有副本加一起的总大小(默认情况下,一个文件有3个副本,所以默认情况下第二项结果等于第一项的3倍)
hadoop fs -du -s -h /jinguo

# 其他的,还有 cat、ls、chgrp、chown、chmod、cp、mv、tail等

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

# 从本地剪切,粘贴到hdfs
hadoop fs -moveFromLocal shuguo.txt /sanguo
# 从本地复制,粘贴到hdfs
hadoop fs -copyFromLocal weiguo.txt /sanguo
# 上传,同 copyFromLocal 功能一样
hadoop fs -put aa.txt /wcinput


# 从服务器复制,粘贴到本地
hadoop fs -copyToLocal /sanguo/shuguo.txt ./
# 下载,等同于 copyToLocal
hadoop fs -get /wcinput/aa.txt a.txt

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

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

设置HDFS中文件副本数量:

hadoop fs -setrep 10 /jinguo/weiguo.txt

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