友情推荐:HDFS的Shell命令

Hadoop官网安装链接:
http://hadoop.apache.orghttp://hadoop.apache.org/releases.html 可选择对应不同版本安装

一、shell命令基本格式

针对HDFS的shell格式
hadoop fs -ls hdfs://namenode:host/parent/child,也可以省略“hdfs://namenode:host”,直接hadoop fs -ls /parent/child

针对本地文件系统的shell格式,注:本地文件系统指的是客户端所在的系统。
hadoop fs -ls file:///parent/child

命令

说明

hadoop fs

FS relates to a generic file system which can point to any file systems like local, HDFS etc. So this can be used when you are dealing with different file systems such as Local FS, HFTP FS, S3 FS, and others。意思是说该命令可以用于其他文件系统,不止是hdfs文件系统内,也就是说该命令的使用范围更广

hadoop dfs

专门针对hdfs分布式文件系统,已经Deprecated

hdfs dfs

和上面的命令作用相同,相比于上面的命令更为推荐,并且当使用hadoop dfs时内部会被转为hdfs dfs命令

二、HDFS的shell操作的所有命令

[root@hadoop ~]# hadoop fs
 Usage: java FsShell
 [-ls 
 
   ] 
  
 [-lsr 
  
    ] 
   
 [-du 
   
     ] 
    
 [-dus 
    
      ] 
     
 [-count[-q] 
     
       ] 
      
 [-mv ] 
      
 [-cp ] 
      
 [-rm [-skipTrash] 
      
        ] 
       
 [-rmr [-skipTrash] 
       
         ] 
        
 [-expunge] 
        
 [-put … ] 
        
 [-copyFromLocal … ] 
        
 [-moveFromLocal … ] 
        
 [-get [-ignoreCrc] [-crc] ] 
        
 [-getmerge [addnl]] 
        
 [-cat ] 
        
 [-text ] 
        
 [-copyToLocal [-ignoreCrc] [-crc] ] 
        
 [-moveToLocal [-crc] ] 
        
 [-mkdir 
        
          ] 
         
 [-setrep [-R] [-w] <path/file>] 
         
 [-touchz 
         
           ] 
          
 [-test -[ezd] 
          
            ] 
           
 [-stat [format] 
           
             ] 
            
 [-tail [-f] ] 
            
 [-chmod [-R] <MODE[,MODE]… | OCTALMODE> PATH…] 
            
 [-chown [-R] [OWNER][:[GROUP]] PATH…] 
            
 [-chgrp [-R] GROUP PATH…] 
            
 [-help [cmd]]

三、常用shell命令

#appendToFile命令:追加一个文件到已经存在的文件末尾
#注:hdfs文件不能进行修改,但是可以进行追加
hadoop fs -appendToFile <localsrc> <hdfspath>
#cat命令:显示文件内容到标准输出
hadoop fs -cat [-ignoreCrc] <hdfspath>
#checksum命令:Datanode在把数据实际存储之前会验证数据的校验和(checksum的初始值?)如果某个client在读取数据时检测到数据错误, 在抛出ChecksumException
#参考:
hadoop fs -checksum <hdfspath>
#chgrp命令:更改文件组的关联。用户必须是文件的所有者,否则是超级用户
hadoop fs -chgrp [-R] GROUP <hdfspath> #-R 将使改变在目录结构下递归进行
#chmod命令:改变文件的权限。
hadoop fs -chmod [-R] [mode] <hdfspath>
hadoop fs -chmod a+w <hdfspath>
hadoop fs -chmod 666 <hdfspath> #使用-R 将使改变在目录结构下递归进行
#chown命令:改变文件的拥有者
hadoop fs -chown user:group <hdfspath>#使用-R 将使改变在目录结构下递归进行
#copyFromLocal命令:从本地文件系统中拷贝文件到 hdfs 路径去
hadoop fs -copyFromLocal <hdfspath>
#copyToLocal命令:从 hdfs 拷贝到本地
hadoop fs -copyToLocal <localsrc>
#count命令:统计hdfs对应路径下的目录个数,文件个数,文件总计大小,显示为目录个数,文件个数,文件总计大小,输入路径
hadoop fs -count [-q] <hdfspath>
#cp命令:从 hdfs 的一个路径拷贝 hdfs 的另一个路径
hadoop fs -copy <hdfspath1> <hdfspath2>
#df命令:统计文件系统的可用空间信息
hadoop fs -df -h <hdfspath>
#du命令:显示目录中所有文件大小,当只指定一个文件时,显示此文件的大小
hadoop fs -du <hdfspath>
hdfs dfs -du -h /user/hive/warehouse #能看到Hive数据仓库下所有数据库的总大小,以G或者K显示
#dus命令:汇总统计目录下文件(夹)大小
hadoop fs -dus <hdfspath>
#find命令:查找文件
#name不区分大小写,iname区分大小写
#print 打印(默认),print0打印在一行
hadoop fs -find <hdfsDir> -name <hdfspath> -print

#例子
hadoop fs -find / -name *.txt -print
#get命令:将文件复制到本地文件系统
hadoop fs -get [-ignorecrc] [-crc] [-p] [-f] <hdfspath> <localsrc>
#-ignorecrc:跳过对下载文件的 CRC 检查
#-crc:为下载的文件写 CRC 校验和
#getmerge命令:合并下载多个文件
hadoop fs -getmerge /aaa/log.* ./log.sum

#例子
# 清空本地 /tmp/ 目录
rm -rf /tmp/*
# 在本地 /tmp/ 中创建两个文件
echo "AAA" > /tmp/AAA.txt
echo "BBB" > /tmp/BBB.txt
# 把本地 /tmp/*.txt 上传至 HDFS 上的 /china/ 目录下
hadoop fs -mkdir -p /china/txt/
hadoop fs -put /tmp/*.txt /china/txt/
# 下载 HDFS 上 /china/txt/ 路径下所有文件的内容到本地
hadoop fs -getmerge /china/txt/* /tmp/CCC.txt
#help命令:通过此命令了解更多命令
hadoop fs -help
#ls命令:显示文件、目录信息
hadoop  fs -ls <path>
hadoop  fs -ls [-R] <path>#-R查出文件夹及其子文件的所有信息
hadoop  fs -ls [-h] <path>#-h优化文件大小显示
#lsr命令:递归查看所有目录
hadoop fs -lsr <path>
#等价于
hadoop fs -ls -R <path>
#mkdir命令:在 hdfs 上创建目录,-p 表示会创建路径中的各级父目录
hadoop fs -mkdir [-p]  <path>
#moveFromLocal命令:移动本地文件到 HDFS 上
hadoop fs -moveFromLocal <localsrc> <hdfspath>
#mv命令:在hdfs目录中移动文件
hadoop fs -mv <hdfspath1> <hdfspath2>
#put命令:将单个src或多个srcs从本地文件系统复制到目标文件系统
hadoop  fs -put  [-f] [-p] <localsrc1> <localsrc2> <localsrcN> <hdfspath>
#-p:保留访问和修改时间,所有权和权限
#-f:覆盖目的地(如果已经存在)
#rm命令:删除指定的文件。只删除非空目录和文件
#-f目标目录不存在不提示
#-r|R递归删除
hadoop fs -rm -r <hdfspath>
#rmdir命令:删除空文件夹
#需要确保HDFS上的目录为空
hadoop fs -rmdir <hdfsDir>
#setrep命令:设置具体文件的副本数量为n
#注:实际中这个功能不常用,副本大小会预先定义好。
hadoop fs -setrep -w n -R <hdfspath>#-R选项用于递归改变目录下所有文件的副本系数
#stat命令:打印有关路径的信息,可以加下面的格式化输出
#%b: 文件大小
#%n: 文件名
#%o: 块大小
#%r: 副本个数
#%y, %Y: 修改日期
hdfs dfs -stat [format] <hdfspath>
#tail命令:显示 HDFS 上的文件最后 1KB 的内容
hadoop fs -tail [-f] <hdfspath>#-f选项:监控显示,有新数据追加进来时会实时显示
#test命令:测试hdfs中的某个文件或者目录是否存在
#-d: 如果测试的路径是一个文件夹, 则返回0,否则返回1
#-e: 如果测试的路径存在, 则返回0,否则返回1
#-f: 如果测试的路径是一个文件, 则返回0,否则返回1
#-s: if 如果测试的路径不是空(文件夹下有文件或者文件夹), 则返回0,否则返回1
#-z: 如果测试的是一个文件,并且这个文件不为空, 则返回0,否则返回1
hdfs dfs -test -[ezd] <hdfspath>
#text命令:格式化输出文件的内容,允许的格式化包括zip,和 TextRecordInputStream
hdfs dfs -text <<hdfsSource>
#touchz命令:在指定目录创建一个新文件,如果文件存在,则创建失败
hdfs dfs -touchz <hdfspath>

四、部分功能通用shell命令

#chgrp、chmod、chown:修改文件属性和权限
# 修改 /china/ 目录及其所有子目录的用户组为 root
hadoop fs -chgrp -R root /china/

# 修改 /china/ 目录及其所有子目录的权限为 777
hadoop fs -chmod -R 777 /china/

# 修改 /china/ 目录及其所有子目录的所有者为 root
hadoop fs -chown -R root /china/
#put、copyFromLocal:拷贝本地文件到 HDFS 上(上传)
# 复制本地 /tmp/ 目录到 HDFS 的 /china/ 目录下
hadoop fs -copyFromLocal /tmp/ /china/
hadoop fs -put /tmp/ /china/
#get、copyToLocal:拷贝 HDFS 上的文件到本地(下载)
# 复制 HDFS 上 /china/BBB.txt 文件到本地的当前目录
hadoop fs -copyToLocal /china/BBB.txt ./
hadoop fs -get /china/BBB.txt ./
#count,du:统计文件大小
hadoop fs -du -s -h /
hadoop fs -count /