hdfs命令行基本操作指南

2022-01-19 09:20:51 浏览数 (1)

Hadoop包括各种shell类命令,它们直接与HDFS和Hadoop支持的其他文件系统交互。 bin/hdfs dfs -help列出了Hadoop shell支持的命令。 此外,命令bin/hdfs dfs -help command-name可以显示命令的更详细的帮助。 这些命令支持大多数普通的文件系统操作,如复制文件、更改文件权限等。 它还支持一些HDFS的特定操作,如更改文件的副本数。

appendToFile

作用:将本地文件或stdin追加到某个文件的末尾

用法:

代码语言:javascript复制
hdfs dfs -appendToFile localfile /user/hadoop/hadoopfile
hdfs dfs -appendToFile localfile1 localfile2 /user/hadoop/hadoopfile
hdfs dfs -appendToFile localfile hdfs://nn.example.com/hadoop/hadoopfile
hdfs dfs -appendToFile - hdfs://nn.example.com/hadoop/hadoopfile
Copy

cat

作用:将源文件输出到stdout

用法:

代码语言:javascript复制
hdfs dfs -cat hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
hdfs dfs -cat file:///file3 /user/hadoop/file4Copy

checksum

作用:返回文件的checksum信息

用法:

代码语言:javascript复制
hdfs dfs -checksum hdfs://nn1.example.com/file1
hdfs dfs -checksum file:///etc/hostsCopy

chgrp

作用:更改文件的组关联。用户必须是文件的所有者,否则就是超级用户。

用法:

代码语言:javascript复制
 hadoop fs -chgrp [-R] GROUP URI [URI ...]Copy

chmod

作用:修改文件/文件夹权限。用户必须是文件的所有者,否则就是超级用户。

用法:

代码语言:javascript复制
hdfs dfs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI ...]Copy

chown

作用:修改文件/文件夹所属用户。用户必须是文件的所有者,否则就是超级用户。

用法:

代码语言:javascript复制
hdfs dfs -chown [-R] [OWNER][:[GROUP]] URI [URI ]Copy

copyFromLocal

作用:将本地文件拷贝到hdfs上

可选参数:

  • -p 保留访问和修改时间、所有权和权限。 (假设权限可以跨文件系统传播)
  • -f 假如目标文件存在的话则覆盖
  • -l 允许DataNode将文件延迟持久化到磁盘,强制复制因子为1。 这个参数将导致耐用性降低。 小心使用。
  • -d 跳过创建后缀为. _copying_的临时文件。

用法:

代码语言:javascript复制
hdfs dfs -copyFromLocal <localsrc> URICopy

copyToLocal

作用:与copyFromLocal相反

用法:

代码语言:javascript复制
hdfs dfs -copyToLocal [-ignorecrc] [-crc] URI <localdst>Copy

count

作用:计算路径下匹配指定文件模式的目录、文件和字节数。 获取配额和使用量。 带有-count的输出列是:DIR_COUNT、FILE_COUNT、CONTENT_SIZE、PATHNAME

-u和-q选项控制输出包含哪些列。 -q表示显示配额,-u限制输出仅显示配额和使用情况。

带-count -q的输出列为:QUOTA、REMAINING_QUOTA、SPACE_QUOTA、REMAINING_SPACE_QUOTA、DIR_COUNT、FILE_COUNT、CONTENT_SIZE、PATHNAME

带-count -u的输出列为:QUOTA、REMAINING_QUOTA、SPACE_QUOTA、REMAINING_SPACE_QUOTA、PATHNAME

-t选项显示每种存储类型的配额和使用情况。 如果没有给出-u或-q选项,则忽略-t选项。 -t选项中可以使用的参数列表(除了参数""不区分大小写):""," all ", " ram_disk ", " ssd ", " disk "或" archive "。

-h选项以可读的格式显示大小。

-v选项显示标题行。

选项-x将从结果计算中排除快照。 如果没有-x选项(默认),结果总是从所有INode计算,包括给定路径下的所有快照。 如果给出了-u或-q选项,则忽略-x选项。

e选项显示每个文件的擦除编码策略。

带有-count -e的输出列是:DIR_COUNT, FILE_COUNT, CONTENT_SIZE, ERASURECODING_POLICY, PATHNAME

ERASURECODING_POLICY是文件的策略名称。 如果在该文件上设置了擦除编码策略,它将返回该策略的名称。 如果没有设置擦除编码策略,则返回“Replicated”,即使用复制存储策略。

用法:

代码语言:javascript复制
hdfs dfs -count hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
hdfs dfs -count -q hdfs://nn1.example.com/file1
hdfs dfs -count -q -h hdfs://nn1.example.com/file1
hdfs dfs -count -q -h -v hdfs://nn1.example.com/file1
hdfs dfs -count -u hdfs://nn1.example.com/file1
hdfs dfs -count -u -h hdfs://nn1.example.com/file1
hdfs dfs -count -u -h -v hdfs://nn1.example.com/file1
hdfs dfs -count -e hdfs://nn1.example.com/file1Copy

cp

作用:将文件从源复制到目标。 该命令还允许有多个源,在这种情况下,目标必须是一个目录。

可选参数:

  • 如果目标已经存在,-f选项将覆盖它。
  • -p选项将保留文件属性topx。 如果-p没有指定参数,则保留时间戳、所有权和权限。 如果指定了-pa,则保留权限,因为ACL是权限的超集。 确定是否保留原始名称空间扩展属性与-p标志无关。

用法:

代码语言:javascript复制
hdfs dfs -cp /user/hadoop/file1 /user/hadoop/file2
hdfs dfs -cp /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dirCopy

createSnapshot

参考:https://hadoop.apache.org/docs/r3.2.0/hadoop-project-dist/hadoop-hdfs/HdfsSnapshots.html

deleteSnapshot

参考:https://hadoop.apache.org/docs/r3.2.0/hadoop-project-dist/hadoop-hdfs/HdfsSnapshots.html

df

作用:显示可用空间

可选参数:

  • -h选项将以“可读”的方式格式化文件大小(例如用64.0m代替67108864)

用法:

代码语言:javascript复制
hdfs dfs -df /user/hadoop/dir1Copy

du

作用:显示给定目录中包含的文件和目录的大小或文件的长度(如果只是一个文件)。

可选参数:

  • -s选项将显示文件长度的汇总摘要,而不是单个文件。 如果没有-s选项,计算将从给定路径深入1层。
  • -h选项将以“可读”的方式格式化文件大小(例如用64.0m代替67108864)
  • -v选项将列的名称显示为标题行。
  • -x选项将从结果计算中排除快照。 如果没有-x选项(默认),结果总是从所有inode计算,包括给定路径下的所有快照。

用法:

代码语言:javascript复制
hdfs dfs -du /user/hadoop/dir1 /user/hadoop/file1 hdfs://nn.example.com/user/hadoop/dir1Copy

dus

该命令已经废弃,可用hdfs dfs -du -s替代。

作用:显示文件长度的摘要。

用法:

代码语言:javascript复制
hdfs dfs -dus <args>Copy

expunge

作用:从垃圾目录中永久删除旧于保留阈值的检查点中的文件,并创建新的检查点。

当创建检查点时,最近删除的垃圾文件被移动到检查点下。 在检查点中比fs.trash.interval更老的文件将在下一次调用-expunge命令时被永久删除。

如果文件系统支持该特性,用户可以配置为通过存储为fs.trash.checkpoint.interval(在core-site.xml中)的参数周期性地创建和删除检查点。 该值应该小于或等于fs.trash.interval。

用法:

代码语言:javascript复制
hdfs dfs -expungeCopy

find

作用:查找与指定表达式匹配的所有文件,并将选择的操作应用于它们。 如果没有指定路径,则默认为当前工作目录。 如果没有指定表达式,则默认为-print。

下面的主要表达式是可以识别的:

  • name 模式
  • iname 模式

如果文件的基名与使用标准文件系统通配符的模式匹配,则计算为true。 如果使用-iname,则匹配不区分大小写。

-print

-print0

总是为真。 导致将当前路径名写入标准输出。 如果使用-print0表达式,则会附加一个ASCII NULL字符。

下列为支持的表达式

  • expression -a expression expression -and expression expression expression

用于连接两个表达式的逻辑与运算符。 如果两个子表达式都返回true则返回true。 由两个表达式并置而隐含的,因此不需要明确指定。 如果第一个表达式失败,则不会应用第二个表达式。

用法:

代码语言:javascript复制
hdfs dfs -find / -name test -print
Copy

get

作用:将文件复制到本地文件系统。 通过-ignorecrc选项可以复制CRC检查失败的文件。 可以使用-crc选项复制文件和crc。

可选参数:

  • -p:保留访问和修改时间、所有权和权限。 (假设权限可以跨文件系统传播)
  • -f:如果目标已经存在,则覆盖目标。
  • -ignorecrc:跳过对下载的文件的CRC检查。
  • -crc:为下载的文件写入CRC校验和。

用法:

代码语言:javascript复制
hdfs dfs -get /user/hadoop/file localfile
hdfs fs -get hdfs://nn.example.com/user/hadoop/file localfileCopy

getfacl

作用:显示文件和目录的访问控制列表。 如果目录有默认ACL,那么getfacl也会显示默认ACL。

可选参数:

  • -R:递归列出所有文件和目录的acl。
  • path:要列出的文件或目录。

用法:

代码语言:javascript复制
hdfs fs -getfacl /file

hdfs fs -getfacl -R /dirCopy

getfattr

作用:显示文件或目录的扩展属性名称和值(如果有的话)。

可选参数:

  • -R:递归地列出所有文件和目录的属性。
  • -n name:转储命名扩展属性值。
  • -d:转储所有与路径名相关的扩展属性值。
  • -e encoding:检索后对值进行编码。 有效的编码是" text ", " hex "和" base64 "。 编码为文本字符串的值用双引号(")括起来,编码为十六进制和base64的值分别以0x和0作为前缀。
  • path:文件或目录。

用法:

代码语言:javascript复制
hdfs dfs -getfattr -d /file
hdfs dfs -getfattr -R -n user.myAttr /dirCopy

getmerge

作用:将源目录和目标文件作为输入,并将src中的文件连接到目标本地文件。 可以选择-nl来支持在每个文件的末尾添加换行符(LF)。 -skip-empty-file可以用来避免在空文件中出现不必要的换行符。

用法:

代码语言:javascript复制
hdfs dfs -getmerge -nl /src /opt/output.txt
hdfs dfs -getmerge -nl /src/file1.txt /src/file2.txt /output.txtCopy

head

作用:将文件的第一个kb显示到标准输出。

用法:

代码语言:javascript复制
hdfs dfs -head pathname
Copy

help

作用:返回该命令使用方法

用法:

代码语言:javascript复制
hdfs dfs -helpCopy

ls

作用:

可选参数:

  • -C:只显示文件和目录的路径。
  • -d:目录以普通文件的形式列出。
  • -h:以可读的方式格式化文件大小(例如64.0m而不是67108864)。
  • -q:打印? 而不是不可打印字符。
  • -R 递归列出遇到的子目录。
  • -t:按修改时间(最近的第一个)对输出进行排序。
  • -S:按文件大小对输出进行排序。
  • -r:颠倒排序顺序。
  • -u:使用访问时间而不是修改时间来显示和排序。
  • -e:只显示文件和目录的擦除编码策略。

用法:

代码语言:javascript复制
hdfs dfs -ls /user/hadoop/file1
hdfs dfs -ls -e /ecdirCopy

lsr

该命令已经弃用,可使用hdfs dfs -ls -R替代

mkdir

作用:创建文件夹

可选参数:

  • -p 与unix类似用法

用法:

代码语言:javascript复制
hdfs dfs -mkdir /user/hadoop/dir1 /user/hadoop/dir2
hdfs dfs -mkdir hdfs://nn1.example.com/user/hadoop/dir hdfs://nn2.example.com/user/hadoop/dirCopy

moveFromLocal

作用:类似于put命令,除了源localsrc在复制后被删除。

用法:

代码语言:javascript复制
hdfs dfs -moveFromLocal <localsrc> <dst>Copy

moveToLocal

作用:显示“尚未实现”消息。

用法:

代码语言:javascript复制
hdfs dfs -moveToLocal [-crc] <src> <dst>Copy

mv

作用:将文件从源移动到目标。 该命令还允许多个源,在这种情况下,目标需要是一个目录。 不允许在文件系统之间移动文件。

用法:

代码语言:javascript复制
hdfs dfs -mv /user/hadoop/file1 /user/hadoop/file2
hdfs dfs -mv hdfs://nn.example.com/file1 hdfs://nn.example.com/file2 hdfs://nn.example.com/file3 hdfs://nn.example.com/dir1Copy

put

作用:从本地文件系统复制单个src或多个src到目标文件系统。 如果源文件系统设置为" – ",还可以从stdin读取输入并写入目标文件系统。

如果文件已经存在,复制将失败,除非指定-f标志。

  • -p:保留访问和修改时间、所有权和权限。 (假设权限可以跨文件系统传播)
  • -f:如果目标已经存在,则覆盖目标。
  • -l: 允许Datanode惰性加载文件到磁盘,强制副本数为1。 这个参数将导致耐久性降低。 小心使用。
  • -d:跳过创建后缀为。_copying_的临时文件。
代码语言:javascript复制
hdfs dfs -put localfile /user/hadoop/hadoopfile
hdfs dfs -put -f localfile1 localfile2 /user/hadoop/hadoopdir
hdfs dfs -put -d localfile hdfs://nn.example.com/hadoop/hadoopfile
hdfs dfs -put - hdfs://nn.example.com/hadoop/hadoopfile Reads the input from stdin.Copy

renameSnapshot

参考:https://hadoop.apache.org/docs/r3.2.0/hadoop-project-dist/hadoop-hdfs/HdfsSnapshots.html

rm

作用:删除指定的文件。

如果启用了trash,文件系统会将删除的文件移动到一个trash目录(由FileSystem#getTrashRoot给出)。

目前,垃圾功能在默认情况下是禁用的。 用户可以通过为参数fs.trash.interval设置一个大于零的值(在core-site.xml中)来启用垃圾。

请参阅删除垃圾文件。

可选参数:

  • -f: 如果文件不存在,-f选项将不会显示诊断消息或修改退出状态以反映错误。
  • -R: 选项递归地删除目录及其下的所有内容。
  • -r: 选项等价于-R。
  • -skipTrash选项将绕过垃圾,如果启用,并立即删除指定的文件。 当需要从配额超标的目录中删除文件时,这一点非常有用。
  • -safely选项在删除文件总数大于hadoop.shell.delete.limit.num.files(在core-site.xml中,默认值:100)的目录之前需要进行安全确认。 它可以与-skipTrash一起使用,以防止大目录的意外删除。 当递归遍历大目录以计算确认之前要删除的文件数量时,预计会有延迟。

用法:

代码语言:javascript复制
hdfs dfs -rm hdfs://nn.example.com/file /user/hadoop/emptydirCopy

rmdir

作用:删除目录

用法:

代码语言:javascript复制
hdfs dfs -rmdir /user/hadoop/emptydirCopy

rmr

该命令已经过时了,可用hdfs dfs -rm -r代替

setfacl

作用:设置文件和目录的访问控制列表。

可选参数:

  • -b:删除除base ACL外的所有ACL项。 为了与权限位兼容,保留用户、组和其他的条目。
  • -k:删除缺省ACL。
  • -R:递归地对所有文件和目录应用操作。
  • -m:修改ACL。 新的表项被添加到ACL中,现有的表项被保留。
  • -x:删除指定的ACL表项。 其他ACL表项保留。
  • –set:完全替换ACL,丢弃所有已有的表项。 acl_spec必须包含用户、组和其他条目,以便与权限位兼容。
  • acl_spec:逗号分隔的ACL表项。
  • path:要修改的文件或目录。

用法:

代码语言:javascript复制
hdfs dfs -setfacl -m user:hadoop:rw- /file
hdfs dfs -setfacl -x user:hadoop /file
hdfs dfs -setfacl -b /file
hdfs dfs -setfacl -k /dir
hdfs dfs -setfacl --set user::rw-,user:hadoop:rw-,group::r--,other::r-- /file
hdfs dfs -setfacl -R -m user:hadoop:r-x /dir
hdfs dfs -setfacl -m default:user:hadoop:r-x /dirCopy

setrep

作用:修改文件的副本数。 如果path是一个目录,那么该命令递归地更改以path为根的目录树下所有文件的副本数。 执行此命令时将忽略EC文件。

可选参数:

  • -w 标志请求命令等待复制完成。 这可能需要很长时间。
  • -R 为了向后兼容,可以接受-R标志。 它没有效果。

用法:

代码语言:javascript复制
hdfs dfs -setrep -w 3 /user/hadoop/dir1Copy

stat

作用:以指定的格式打印关于<path>的文件/目录的统计信息。 格式接受八进制(%a)和符号(%a)权限,文件大小以字节为单位(%b),类型(%F),所有者的组名(%g),名称(%n),块大小(%o),复制(%r),所有者的用户名(%u),访问日期(%x, %x),修改日期(%y, %y)。 %x和%y显示UTC日期为" yyyy-MM-dd HH:mm:ss ", %x和%y显示UTC日期1970年1月1日以来的毫秒数。 如果未指定格式,则默认使用%y。

用法:

代码语言:javascript复制
hdfs dfs -stat "type:%F perm:%a %u:%g size:%b mtime:%y atime:%x name:%n" /fileCopy

tail

作用:显示文件最后千字节到标准输出。

可选参数:

  • -f选项将随着文件的增长输出附加的数据,就像在Unix中一样。

用法:

代码语言:javascript复制
hdfs dfs -tail pathnameCopy

test

可选参数以及作用

  • -f选项将随着文件的增长输出附加的数据,就像在Unix中一样。
  • -d: f路径为目录,返回0。
  • -e:如果路径存在,返回0。
  • -f:如果路径是文件,则返回0。
  • -s:如果路径非空,返回0。
  • -r:如果路径存在且具有读权限,则返回0。
  • -w:如果路径存在且具有写权限,则返回0。
  • -z:如果文件长度为0,则返回0。

用法:

代码语言:javascript复制
hdfs dfs -test -e filenameCopy

text

作用:获取源文件并以文本格式输出该文件。 允许的格式是zip和TextRecordInputStream。

用法:

代码语言:javascript复制
hadoop fs -text <src>Copy

touch

作用:将URI指定的文件的访问和修改时间更新为当前时间。 如果该文件不存在,则在URI上创建一个长度为零的文件,并将当前时间作为该URI的时间戳。

可选参数:

  • 使用-a选项只更改访问时间
  • 使用-m选项只更改修改时间
  • 使用-t选项指定时间戳(格式为yyyyMMddHHmmss)而不是当前时间
  • 如果文件不存在,使用-c选项不创建文件

用法:

代码语言:javascript复制
hdfs dfs -touch pathname
hdfs dfs -touch -m -t 20180809230000 pathname
hdfs dfs -touch -t 20180809230000 pathname
hdfs dfs -touch -a pathnameCopy

touchz

作用:创建一个零长度的文件。 如果文件的长度不为零,则返回错误。

用法:

代码语言:javascript复制
hdfs dfs -touchz pathnameCopy

truncate

作用:将匹配指定文件模式的所有文件截断为指定的长度。

可选参数:

  • -w 如果有必要,-w标志请求命令等待块恢复完成。 如果没有-w标志,在进行恢复时,文件可能会保持未关闭一段时间。 在此期间,文件不能重新打开以便追加。

用法:

代码语言:javascript复制
hdfs dfs -truncate 55 /user/hadoop/file1 /user/hadoop/file2
hdfs dfs -truncate -w 127 hdfs://nn1.example.com/user/hadoop/file1Copy

本文为从大数据到人工智能博主「xiaozhch5」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://cloud.tencent.com/developer/article/1936560

0 人点赞