hadoop fs shell

概述

本文列举了常用的hadoop fs shell,以及涉及到的几个基本概念。
目的在于熟悉hadoop fs 命令,借鉴linux对应的命令,以及理解hadoop的几个基本概念。

基本的命令格式

bin/hadoop fs <args>

args就是具体的命令,比如ls,cat等。

文件系统schema

命令中支持三种schema:

  • file:/// 操作主机的文件系统
  • hdfs:/// 操作hdfs的文件系统
  • / 未指定具体的文件系统,采用默认的hdfs
    默认的hdfs地址,配置在hadoop/etc/hadoop/core-site.xml中.
    注意,这里是三个斜线:hdfs:///。URI的格式为hdfs://hostname/path,这里省略了hostname,采用默认nodename地址。

HDFS权限

HDFS实现了一个类似于POSIX的权限模型。
文件或路径对于所有者,组,其他用户三个独立的权限管理。

rwx
文件读权限写或者追加
路径list路径下的文件列表创建或删除文件或路径访问目录下的子文件或目录

HDFS通过访问者名称匹配来查找权限,过程如下:
1 如果用户名和所有者名字相同,则验证所有者的权限。
2 如果用户名和组里的某个名字相同,则验证组的权限。
3 否则使用其他人的权限

通配符

通配符经常用于搜索文件的参数中。
通配符和正则表达式类似,但是也有很大的区别。

通配符含义实例
*匹配 0 或多个字符a*b,a与b之间可以有任意长度的任意字符, 也可以一个也没有
?匹配任意单个字符a?b,a与b之间有且只有一个字符, 可以是任意字符
[list]匹配 list 中的任意单个字符a[xyz]b,a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z
[!list]匹配除 list 中的任意单一字符a[!0-9]b,a与b之间必须也只能有一个字符, 但不能是阿拉伯数字
[c1-c2]匹配 c1-c2 中的任意单一字符a[0-9]b,匹配0与9之间其中一个字符
{s1,s2,…}匹配 s1 或 s2 (或更多)中的一个字符串a{abc,xyz,123}b,a与b之间只能是abc或xyz或123这三个字符串之一

命令

appendToFile

将本地文件内容追加到hdfs文件尾:

hadoop fs -appendToFile /home/yunzhong/.bashrc hdfs:///user/hadoop/testfile

本地文件可以是多个。
也可以及时输入字符:

hadoop fs -appendToFile - hdfs:///user/hadoop/testfile

cat

将文件打印到标准输出

hadoop fs -cat hdfs:///user/hadoop/testfile
hadoop fs -cat file:///home/yunzhong/testfile

checksum

每当hadoop创建文件file时,hadoop就会同时在同一个文件夹下创建隐藏文件.file.crc,这个文件记录了文件file的校验和.

hadoop fs -checksum hdfs:///user/hadoop/testfile

chgrp

chmod

更改文件的访问权限。
参数-R是否影响所有子目录

hadoop fs -chmod -R 777 /user/hadoop/testdir
hadoop fs -chmod 777 /user/hadoop/testfile

chown

更改文件的所有者。
支持-R参数

hadoop fs -chown username[:group] /user/hadoop/testfile

copyFromLocal

将本地的文件放到hdfs中
和-put功能类似,但是copyFromLocal的文件必须来自本地文件系统。

#上传文件到hdfs:///user/hadoop/目录下。目录必须存在。
hadoop fs -copyFromLocal file:///home/yunzhong/localfile /user/hadoop/
#更改上传文件的名字
hadoop fs -copyFromLocal file:///home/yunzhong/localfile /user/hadoop/localfilenewname
# -f 强制覆盖已有文件
hadoop fs -copyFromLocal -f file:///home/yunzhong/localfile /user/hadoop/

copyToLocal

和 -get类似。目标为本地文件系统。

hadoop fs -copyToLocal hdfs:///user/hadoop/testfile /home/yunzhong/

count

统计目录下文件信息,输出列:

子目录数量文件数量目录大小路径
DIR_COUNTFILE_COUNTCONTENT_SIZEPATHNAME

参数:

  • -u参数:输出信息携带quota和usage。输出列:
    QUOTA, REMAINING_QUOTA, SPACE_QUOTA, REMAINING_SPACE_QUOTA, PATHNAME
  • -q参数:输出信息携带quota信息。输出列:
    QUOTA, REMAINING_QUOTA, SPACE_QUOTA, REMAINING_SPACE_QUOTA, DIR_COUNT, FILE_COUNT, CONTENT_SIZE, PATHNAME
  • -h参数:数据可读
  • -v参数:输出信息带表头。
hadoop fs -count -q -h -v /user/hadoop/

cp

cp可以一次拷贝多个文件,但是此时的目标必须为路径。
支持正则“*”.

hadoop fs -cp /user/hadoop/testfile* /user/hadoop/temp/

参数:

  • -f 覆盖已有的文件
  • -p 保留原属性。保留的属性可以配置[topx] ,对应(timestamps, ownership, permission, ACL, XAttr)
#覆盖已有文件。otherfile的所有者不会变
hadoop fs -cp -f -po /user/hadoop/otherfile /user/hadoop/tempdir/

df

显示空闲空间
参数:-h。结果数据可读。

hadoop fs -df -h /user/hadoop/temp/

du

显示一个文件夹下所有的文件或文件夹的大小。也可以显示单独一个文件的大小。
参数:-s统计当前文件夹的所有信息。
-h human readable
-x 不包含snapshot的统计
注意:3.2.1的hadoop还包含-v参数,显示结果的title。而且3版本的结果包含三列:size disk_space_consumed_with_all_replicas full_path_name,而2版本只包含size,full_path_name。

hadoop fs -du -s -h -x hdfs:///user/hadoop/

expunge

如果trash配置成true,那么通过fs shell删除的文件不会立即从HDFS删除。HDFS把文件移动到trash路径下(每个用户都有自己的路径/user//.Trash)。文件可以从trash中恢复。
在配置的时间间隔之后,HDFS将会对trash的文件做一个checkpoint,并且删除过期的checkpoint。
当trash中的文件过期,NameNode将会真正删除这些文件。

expunge命令创建一个新的checkpoint,且删除过期的checkpoint。
参数-immediate,将立即删除所有的trash文件。

find

参数-name:支持通配符。-iname:支持通配符,不区分大小写

hadoop fs -find /user/hadoop/ -name "testfil*"
hadoop fs -find /user/hadoop/ -name "TestFil*"

get

将文件拷贝到本地。
参数:
-p 保留文件的创建修改时间、所有者、权限信息。如果所有者/群不存在,则抛出异常。
-f 覆盖已存在文件

hadoop fs -get -f /user/hadoop/testfile

getfacl

显示文件或目录的access control lists(ACL)
参数:-R 递归显示所有文件

hadoop fs -getfacl -R /user/hadoop/temp

getmerge

合并多个文件内容,到一个本地文件。
参数:-nl 在每个源文件内容的最后添加一个换行。

hadoop fs -getmerge -nl /user/hadoop/temp /user/hadoop/testfile /home/yunzhong/mergefile

head

2版本还不支持此命令。

ls lsr

ls输出列:

  • 文件:permissions number_of_replicas userid groupid filesize modification_date modification_time filename
  • 目录:permissions userid groupid modification_date modification_time dirname

lsr等同于:hadoop fs -ls -R

mkdir

创建路径。参数可以为多个路径。
参数:-p 递归创建不存在的parent路径。

hadoop fs -mkdir -p /user/hadoop/temp/temp1/temp2 /user/hadoop/temp1

moveFromLocal

类似于-put命令,但是本地文件被删除。

hadoop fs -moveFromLocal /home/yunzhong/localfile /user/hadoop/temp/

mv

迁移文件。支持多个源文件。不可以跨文件系统。

put

将一个或多个文件拷贝到目标文件系统。可以从标准输入数据写入目标文件。
参数:-p 保留源文件的时间,访问权限,所有者等信息。
-f 覆盖已有文件

#本地到hdfs
hadoop fs -put file:///home/yunzhong/testfile hdfs:///user/hadoop/
#标准输入到hdfs文件
hadoop fs -put - hdfs:///user/hadoop/fromStdin

rm

删除文件。
如果用户开启了trash功能,则文件移入trash。
参数:
-f 不会有提示信息
-R 递归删除文件夹
-skipTrash 直接删除,不走trash

setfacl

设置acl

stat

格式化输出文件,目录的统计信息。

Format accepts permissions in octal (%a) and symbolic (%A), filesize in bytes (%b), type (%F), group name of owner (%g), name (%n), block size (%o), replication (%r), user name of owner(%u), access date(%x, %X), and modification date (%y, %Y). %x and %y show UTC date as “yyyy-MM-dd HH:mm:ss”, and %X and %Y show milliseconds since January 1, 1970 UTC. If the format is not specified, %y is used by default.

hadoop fs -stat "type:%F %u:%g size:%b name:%n" /user/hadoop/testfile

tail

显示文件的最后几行数据。
参数:-f 和linux中的含义一样,持续输出追加信息。

hadoop fs -tail /user/hadoop/testfile

test

测试文件或路径信息。

  • -d: f the path is a directory, return 0.
  • -e: if the path exists, return 0.
  • -f: if the path is a file, return 0.
  • -s: if the path is not empty, return 0.
  • -w: if the path exists and write permission is granted, return 0.
  • -r: if the path exists and read permission is granted, return 0.
  • -z: if the file is zero length, return 0.

touch,touchz

更新文件的读取和修改时间戳。如果文件不存在,则创建。
参数:
-a 仅仅更新访问时间
-m仅仅更新修改时间
-t 指定时间。时间格式(yyyyMMddHHmmss)
-c如果文件不存在,则创建。
2版本还未支持。
2版本支持touchz,创建一个空文件

truncate

截断文件,保留指定长度的内容。
参数:-w等待完全结束再退出。如果没有-w命令,truncate返回后,内部操作还没有结束,文件不能被打开或者追加信息。

hadoop fs -truncate -w 10 /user/hadoop/testfile
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值