date: 2021-01-02title: HDFS的shell操作 #标题
tags: hadoop #标签
categories: Hadoop # 分类

记录下HDFS的常用命令。hadoop fs 和 hdfs dfs 命令功能一样。dfs是fs的实现类。

命令大全

  1. $ hadoop fs # 查看其帮助信息
  2. Usage: hadoop fs [generic options]
  3. [-appendToFile <localsrc> ... <dst>]
  4. [-cat [-ignoreCrc] <src> ...]
  5. [-checksum <src> ...]
  6. [-chgrp [-R] GROUP PATH...]
  7. [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
  8. [-chown [-R] [OWNER][:[GROUP]] PATH...]
  9. [-copyFromLocal [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
  10. [-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
  11. [-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] <path> ...]
  12. [-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>]
  13. [-createSnapshot <snapshotDir> [<snapshotName>]]
  14. [-deleteSnapshot <snapshotDir> <snapshotName>]
  15. [-df [-h] [<path> ...]]
  16. [-du [-s] [-h] [-x] <path> ...]
  17. [-expunge]
  18. [-find <path> ... <expression> ...]
  19. [-get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
  20. [-getfacl [-R] <path>]
  21. [-getfattr [-R] {-n name | -d} [-e en] <path>]
  22. [-getmerge [-nl] [-skip-empty-file] <src> <localdst>]
  23. [-help [cmd ...]]
  24. [-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [<path> ...]]
  25. [-mkdir [-p] <path> ...]
  26. [-moveFromLocal <localsrc> ... <dst>]
  27. [-moveToLocal <src> <localdst>]
  28. [-mv <src> ... <dst>]
  29. [-put [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
  30. [-renameSnapshot <snapshotDir> <oldName> <newName>]
  31. [-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...]
  32. [-rmdir [--ignore-fail-on-non-empty] <dir> ...]
  33. [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
  34. [-setfattr {-n name [-v value] | -x name} <path>]
  35. [-setrep [-R] [-w] <rep> <path> ...]
  36. [-stat [format] <path> ...]
  37. [-tail [-f] <file>]
  38. [-test -[defsz] <path>]
  39. [-text [-ignoreCrc] <src> ...]
  40. [-touchz <path> ...]
  41. [-truncate [-w] <length> <path> ...]
  42. [-usage [cmd ...]]
  43. Generic options supported are:
  44. -conf <configuration file> specify an application configuration file
  45. -D <property=value> define a value for a given property
  46. -fs <file:///|hdfs://namenode:port> specify default filesystem URL to use, overrides 'fs.defaultFS' property from configurations.
  47. -jt <local|resourcemanager:port> specify a ResourceManager
  48. -files <file1,...> specify a comma-separated list of files to be copied to the map reduce cluster
  49. -libjars <jar1,...> specify a comma-separated list of jar files to be included in the classpath
  50. -archives <archive1,...> specify a comma-separated list of archives to be unarchived on the compute machines

不难发现,多数选项和linux系统命令一致。

-ls

  1. $ hadoop fs -ls -R / # 递归查看hdfs的根目录

-mkdir

  1. $ hadoop fs -mkdir -p /zhongguo/beijing # 创建目录,-p是递归创建
  2. $ hadoop fs -ls -R /zhongguo # 查看目录
  3. drwxr-xr-x - root supergroup 0 2020-11-15 19:17 /zhongguo/beijing

-moveFromLocal

将本地文件移动到hdfs。

  1. $ echo "fengtaikejiyuan" > a.txt
  2. $ hadoop fs -moveFromLocal a.txt /zhongguo/beijing/ # 上传到hdfs目录
  3. $ hadoop fs -cat /zhongguo/beijing/a.txt # 查看移动到hdfs上的文件
  4. fengtaikejiyuan
  5. $ cat a.txt # 本地文件已被剪切走
  6. cat: a.txt: 没有那个文件或目录

-appendToFile

追加本地文件内容到hdfs上的指定文件中。

  1. $ echo "zhuowangxinxi" > b.txt
  2. $ hadoop fs -appendToFile b.txt /zhongguo/beijing/a.txt # 将本地b.txt中的内容追加到hdfs上的a.txt。
  3. $ hadoop fs -cat /zhongguo/beijing/a.txt # 验证是否追加成功
  4. fengtaikejiyuan
  5. zhuowangxinxi

-chgrp、-chmod、-chown

和linux上用法一样,功能分别是修改组、修改权限、修改属主属组。

  1. $ hadoop fs -ls /zhongguo/beijing/a.txt # 查看文件当前权限
  2. -rw-r--r-- 3 root supergroup 30 2020-11-15 19:24 /zhongguo/beijing/a.txt
  3. $ hadoop fs -chgrp lvjianzhao /zhongguo/beijing/a.txt # 修改属组
  4. $ hadoop fs -chown lvjianzhao /zhongguo/beijing/a.txt # 修改属主
  5. $ hadoop fs -chmod 777 /zhongguo/beijing/a.txt # 修改权限
  6. $ hadoop fs -ls /zhongguo/beijing/a.txt # 确认修改成功
  7. -rwxrwxrwx 3 lvjianzhao lvjianzhao 30 2020-11-15 19:24 /zhongguo/beijing/a.txt

-copyFromLocal

将本地文件复制到hdfs上。

  1. $ hadoop fs -copyFromLocal b.txt /zhongguo/beijing/
  2. $ hadoop fs -ls /zhongguo/beijing/
  3. Found 2 items
  4. -rwxrwxrwx 3 lvjianzhao lvjianzhao 30 2020-11-15 19:24 /zhongguo/beijing/a.txt
  5. -rw-r--r-- 3 root supergroup 14 2020-11-15 19:30 /zhongguo/beijing/b.txt

-copyTolocal

将hdfs上的文件copy到本地。

  1. $ cat a.txt
  2. cat: a.txt: 没有那个文件或目录
  3. $ hadoop fs -copyToLocal /zhongguo/beijing/a.txt # copy到本地
  4. $ cat a.txt # 查看文件内容
  5. fengtaikejiyuan
  6. zhuowangxinxi

-cp

从HDFS的一个路径复制到另一个路径。

  1. $ hadoop fs -cp /zhongguo/beijing/a.txt /user/lvjianzhao/ # cp
  2. $ hadoop fs -ls /user/lvjianzhao/a.txt # 查看
  3. -rw-r--r-- 3 root supergroup 30 2020-11-15 19:44 /user/lvjianzhao/a.txt
  4. $ hadoop fs -ls /zhongguo/beijing/a.txt # 源文件还在
  5. -rwxrwxrwx 3 lvjianzhao lvjianzhao 30 2020-11-15 19:24 /zhongguo/beijing/a.txt

-mv

在HDFS目录中移动文件。

  1. $ hadoop fs -mv /zhongguo/beijing/a.txt /zhongguo/ # 移动a.txt到上层目录
  2. $ hadoop fs -ls -R /zhongguo/
  3. -rwxrwxrwx 3 lvjianzhao lvjianzhao 30 2020-11-15 19:24 /zhongguo/a.txt
  4. drwxr-xr-x - root supergroup 0 2020-11-15 19:47 /zhongguo/beijing
  5. -rw-r--r-- 3 root supergroup 14 2020-11-15 19:30 /zhongguo/beijing/b.txt

-get

等同于copyToLocal,就是从hdfs下载文件到本地。

-getmerge

  1. # 将hdfs上的a.txt和b.txt 合并未本地文件ab.txt
  2. $ hadoop fs -getmerge /zhongguo/a.txt /zhongguo/beijing/b.txt ./ab.txt
  3. # 亦可以在目录后使用通配符 “ * ”,表示合并目录下的所有文件。
  4. $ cat ab.txt # 查看合并后的文件
  5. fengtaikejiyuan
  6. zhuowangxinxi
  7. zhuowangxinxi

-put

等同于copyFromLocal,将本地文件copy到hdfs。

-tail

查看hdfs上的文件内容后面几行。

  1. $ hadoop fs -put anaconda-ks.cfg /zhongguo/beijing/ # 上传文件到hdfs
  2. $ hadoop fs -tail -f /zhongguo/beijing/anaconda-ks.cfg # 增加 “-f” 选项,相当于linux上的tailf。

-rm

删除文件或目录。

  1. $ hadoop fs -rm /zhongguo/beijing/anaconda-ks.cfg # 删除文件
  2. $ hadoop fs -rm -r -f /zhongguo # 删除一个目录

-rmdir

删除空目录。

  1. $ hadoop fs -mkdir /test # 创建空目录
  2. $ hadoop fs -rmdir /test # 删除空目录

-du

统计文件或目录大小。

  1. $ hadoop fs -du -s -h /user # -s -h 表示以人性化的容量单位输出
  2. 349.5 M /user
  3. $ hadoop fs -du /user # 不加 -s -h 输出如下
  4. 366447519 /user/lvjianzhao

-setrep

设置文件副本数。

先查看一个文件的副本数量:
HDFS的shell操作 - 图1

  1. $ hadoop fs -setrep 2 /user/lvjianzhao/test/a.txt
  2. Replication 2 set: /user/lvjianzhao/test/a.txt

再次查看副本数量:

HDFS的shell操作 - 图2

上传文件到指定的hdfs服务器

  1. $ hdfs dfs -put hadoop-root-datanode-lv.log hdfs://192.168.20.2:9000/ha/test/