Hadoop常见的shell命令

目录

一、Hadoop 命令

1、查看Hadoop的版本

2、查看Hadoop命令的格式

  2.1、压缩文件archive

2.2、在两个HDFS之间拷贝数据 (hadoop distcp)

3、通过Hadoop fs 查看HDFS的格式

       二、hdfs命令

1、查看hdfs的版本

2、查看hdfs命令的格式

    3、管理员操作命令hdfs dfsadmin

三、操作HDFS的一般shell命令(hadoop fs 和 hdfs dfs 通用)

1、列出文件目录(-ls 和 -ls -R)

2、在HDFS中创建文件夹(-mkdir)

3、上传文件到HDFS中(-put -moveFromLocal -copyFromLocal)

4、从HDFS中下载文件(-get -moveToLocal -copyToLocal)

5、直接在HDFS中查看某个文件(-text/-cat)

6、删除在HDFS中的某个文件(夹)(-rm)

7、把HDFS指定目录下的文件合并输出到本地(-getmerge)

8、在HDFS中复制文件(-cp)

9、在HDFS中移动文件(-mv)

10、统计hdfs对应路径下的目录个数,文件个数,文件总计大小(-count)

11、显示hdfs对应路径下每个文件夹和文件的大小(-du)

12、改变一个文件在hdfs中的副本个数(-setrep)

13、查看HDFS某个文件的状态(-stat)

14、显示HDFS的文件尾部(-tail)


hadoop fs  等价于 hdfs dfs 

善用help命令求帮助

  • hadoop -help
  • hdfs -help
  • hadoop fs -help 命令  
  • hdfs dfsadmin -help 命令
  • hdfs dfs -help 命令

如:查看ls命令的帮助:hadoop fs -help ls

一、Hadoop 命令

1、查看Hadoop的版本

 hadoop version
Hadoop 2.7.1
Compiled by hadoop on 2016-08-01T13:16Z
Compiled with protoc 2.5.0
From source with checksum 57dc8ba59eafb68e93f427035b18d9d
This command was run using /software/servers/hadoop-2.7.1/share/hadoop/common/hadoop-common-2.7.1.jar

2、查看Hadoop命令的格式

hadoop -help
Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
  CLASSNAME            run the class named CLASSNAME
 or
  where COMMAND is one of:
  fs                   run a generic filesystem user client    操作HDFS的命令
  version              print the version                 
  jar <jar>            run a jar file
                       note: please use "yarn jar" to launch
                             YARN applications, not this command.
  checknative [-a|-h]  check native hadoop and compression libraries availability
  distcp <srcurl> <desturl> copy file or directories recursively
  archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
  classpath            prints the class path needed to get the
  credential           interact with credential providers
                       Hadoop jar and the required libraries
  daemonlog            get/set the log level for each daemon
  trace                view and modify Hadoop tracing settings

  
2.1、压缩文件archive

hadoop archive -archiveName name.har -p < hdfs parent dir > < src >* < hdfs dst >
命令中参数name:压缩文件名,自己任意取;
< hdfs parent dir > :压缩文件所在的父目录;
< src >:要压缩的文件名;
< hdfs dst >:压缩文件存放路径
*示例:hadoop archive -archiveName hadoop.har -p /user 1.txt 2.txt /des
示例中将hdfs中/user目录下的文件1.txt,2.txt压缩成一个名叫hadoop.har的文件存放在hdfs中/des目录下,
如果1.txt,2.txt不写就是将/user目录下所有的目录和文件压缩成一个名叫hadoop.har的文件存放在hdfs中/des目录下
显示har的内容可以用如下命令:hadoop fs -ls /des/hadoop.jar
显示har压缩的是那些文件可以用如下命令:hadoop fs -ls -R har:///des/hadoop.har
注意:har文件不能进行二次压缩。如果想给.har加文件,只能找到原来的文件,重新创建一个。har文件中原来文件的数据并没有变化,har文件真正的作用是减少NameNode和DataNode过多的空间浪费。

2.2、在两个HDFS之间拷贝数据 (hadoop distcp)

3、通过Hadoop fs 查看HDFS的格式

hadoop fs <args> URI
一个获取文件的demo:hadoop fs -get hdfs://ns3/user/ls/auto_rerun/dependencies

URI说明:
URI格式是scheme://authority/path。对HDFS文件系统,scheme是hdfs,对本地文件系统,scheme是file。其中scheme和authority参数都是可选的,如果未加指定,就会使用配置中指定的默认scheme。
一个HDFS文件或目录比如/parent/child可以表示成hdfs://namenode:namenodeport/parent/child,或者更简单的/parent/child(假设你配置文件中的默认值是namenode:namenodeport)。
大多数FS Shell命令的行为和对应的Unix Shell命令类似,出错信息会输出到stderr,其他信息输出到stdout。

参数说明:
hadoop fs -help
Usage: hadoop fs [generic options]
    [-appendToFile <localsrc> ... <dst>]
    [-cat [-ignoreCrc] <src> ...]
    [-checksum <src> ...]
    [-chgrp [-R] GROUP PATH...]
    [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
    [-chown [-R] [OWNER][:[GROUP]] PATH...]
    [-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
    [-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
    [-count [-q] [-h] <path> ...]
    [-cp [-f] [-p | -p[topax]] <src> ... <dst>]
    [-createSnapshot <snapshotDir> [<snapshotName>]]
    [-deleteSnapshot <snapshotDir> <snapshotName>]
    [-df [-h] [<path> ...]]
    [-du [-s] [-h] <path> ...]
    [-expunge]
    [-find <path> ... <expression> ...]
    [-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
    [-getfacl [-R] <path>]
    [-getfattr [-R] {-n name | -d} [-e en] <path>]
    [-getmerge [-nl] <src> <localdst>]
    [-help [cmd ...]]
    [-ls [-d] [-h] [-R] [<path> ...]]
    [-mkdir [-p] <path> ...]
    [-moveFromLocal <localsrc> ... <dst>]
    [-moveToLocal <src> <localdst>]
    [-mv <src> ... <dst>]
    [-put [-f] [-p] [-l] <localsrc> ... <dst>]
    [-renameSnapshot <snapshotDir> <oldName> <newName>]
    [-rm [-f] [-r|-R] [-skipTrash] <src> ...]
    [-rmdir [--ignore-fail-on-non-empty] <dir> ...]
    [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
    [-setfattr {-n name [-v value] | -x name} <path>]
    [-setrep [-R] [-w] <rep> <path> ...]
    [-stat [format] <path> ...]
    [-tail [-f] <file>]
    [-test -[defsz] <path>]
    [-text [-ignoreCrc] <src> ...]
    [-touchz <path> ...]
    [-truncate [-w] <length> <path> ...]
    [-usage [cmd ...]]

       
二、hdfs命令


1、查看hdfs的版本

hdfs version
Hadoop 2.7.1
Compiled by hadoop on 2016-08-01T13:16Z
Compiled with protoc 2.5.0
From source with checksum 57dc8ba59eafb68e93f427035b18d9d
This command was run using /software/servers/hadoop-2.7.1/share/hadoop/common/hadoop-common-2.7.1.jar


2、查看hdfs命令的格式

hdfs -help
Usage: hdfs [--config confdir] [--loglevel loglevel] COMMAND
       where COMMAND is one of:
  dfs                  run a filesystem command on the file systems supported in Hadoop.
  classpath            prints the classpath
  namenode -format     format the DFS filesystem
  secondarynamenode    run the DFS secondary namenode
  namenode             run the DFS namenode
  journalnode          run the DFS journalnode
  zkfc                 run the ZK Failover Controller daemon
  datanode             run a DFS datanode
  dfsadmin             run a DFS admin client
  haadmin              run a DFS HA admin client
  fsck                 run a DFS filesystem checking utility
  balancer             run a cluster balancing utility
  jmxget               get JMX exported values from NameNode or DataNode.
  mover                run a utility to move block replicas across
                       storage types
  oiv                  apply the offline fsimage viewer to an fsimage
  oiv_legacy           apply the offline fsimage viewer to an legacy fsimage
  oev                  apply the offline edits viewer to an edits file
  fetchdt              fetch a delegation token from the NameNode
  getconf              get config values from configuration
  groups               get the groups which users belong to
  snapshotDiff         diff two snapshots of a directory or diff the
                       current directory contents with a snapshot
  lsSnapshottableDir   list all snapshottable dirs owned by the current user
                        Use -help to see options
  portmap              run a portmap service
  nfs3                 run an NFS version 3 gateway
  cacheadmin           configure the HDFS cache
  crypto               configure HDFS encryption zones
  storagepolicies      list/get/set block storage policies
  version              print the version

hdfs balancer
如果管理员发现某些DataNode保存数据过多,某些DataNode保存数据相对较少,可以使用上述命令手动启动内部的均衡过程
    
    
 hdfs dfs -help
Usage: hadoop fs [generic options]
    [-appendToFile <localsrc> ... <dst>]
    [-cat [-ignoreCrc] <src> ...]
    [-checksum <src> ...]
    [-chgrp [-R] GROUP PATH...]
    [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
    [-chown [-R] [OWNER][:[GROUP]] PATH...]
    [-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
    [-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
    [-count [-q] [-h] <path> ...]
    [-cp [-f] [-p | -p[topax]] <src> ... <dst>]
    [-createSnapshot <snapshotDir> [<snapshotName>]]
    [-deleteSnapshot <snapshotDir> <snapshotName>]
    [-df [-h] [<path> ...]]
    [-du [-s] [-h] <path> ...]
    [-expunge]
    [-find <path> ... <expression> ...]
    [-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
    [-getfacl [-R] <path>]
    [-getfattr [-R] {-n name | -d} [-e en] <path>]
    [-getmerge [-nl] <src> <localdst>]
    [-help [cmd ...]]
    [-ls [-d] [-h] [-R] [<path> ...]]
    [-mkdir [-p] <path> ...]
    [-moveFromLocal <localsrc> ... <dst>]
    [-moveToLocal <src> <localdst>]
    [-mv <src> ... <dst>]
    [-put [-f] [-p] [-l] <localsrc> ... <dst>]
    [-renameSnapshot <snapshotDir> <oldName> <newName>]
    [-rm [-f] [-r|-R] [-skipTrash] <src> ...]
    [-rmdir [--ignore-fail-on-non-empty] <dir> ...]
    [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
    [-setfattr {-n name [-v value] | -x name} <path>]
    [-setrep [-R] [-w] <rep> <path> ...]
    [-stat [format] <path> ...]
    [-tail [-f] <file>]
    [-test -[defsz] <path>]
    [-text [-ignoreCrc] <src> ...]
    [-touchz <path> ...]
    [-truncate [-w] <length> <path> ...]
    [-usage [cmd ...]]

    
3、管理员操作命令hdfs dfsadmin

hdfs dfsadmin -help
hdfs dfsadmin performs DFS administrative commands.
Note: Administrative commands can only be run with superuser permission.
The full syntax is: 

hdfs dfsadmin
    [-report [-live] [-dead] [-decommissioning]]
    [-safemode <enter | leave | get | wait>]
    [-saveNamespace]
    [-rollEdits]
    [-restoreFailedStorage true|false|check]
    [-refreshNodes]
    [-refreshWhitelists Y|N|ALL]
    [-printWhitelists   Y|N|ALL]
    [-refreshBlackList Y|N|ALL]
    [-printBlackList  Y|N|ALL]
    [-printWhitelistsNameNode   Y|N|ALL]
    [-refreshWhitelistsDataNode Y|N|ALL]
    [-printWhitelistsDataNode   Y|N|ALL]
    [-refreshOtherClusterNode Y|N|ALL]
    [-printOtherClusterNode  Y|N|ALL]
    [-refreshSecurityPathLists Y|N|ALL]
    [-printSecurityPathLists   Y|N|ALL]
    [-refreshSensitiveDir Y|N|ALL]
    [-printSensitiveDir   Y|N|ALL]
    [-refreshTrashPolicyList Y|N|ALL]
    [-printTrashPolicyList   Y|N|ALL]
    [-setQuota <quota> <dirname>...<dirname>]
    [-clrQuota <dirname>...<dirname>]
    [-setSpaceQuota <quota> [-storageType <storagetype>] <dirname>...<dirname>]
    [-clrSpaceQuota [-storageType <storagetype>] <dirname>...<dirname>]
    [-finalizeUpgrade]
    [-rollingUpgrade [<query|prepare|finalize>]]
    [-refreshServiceAcl]
    [-refreshUserToGroupsMappings]
    [-refreshSuperUserGroupsConfiguration]
    [-refreshCallQueue]
    [-refresh <host:ipc_port> <key> [arg1..argn]
    [-reconfig <datanode|...> <host:ipc_port> <start|status>]
    [-printTopology]
    [-refreshNamenodes datanode_host:ipc_port]
    [-deleteBlockPool datanode_host:ipc_port blockpoolId [force]]
    [-setBalancerBandwidth <bandwidth in bytes per second>]
    [-fetchImage <local directory>]
    [-allowSnapshot <snapshotDir>]
    [-disallowSnapshot <snapshotDir>]
    [-shutdownDatanode <datanode_host:ipc_port> [upgrade]]
    [-getDatanodeInfo <datanode_host:ipc_port>]
    [-metasave filename]
    [-triggerBlockReport [-incremental] <datanode_host:ipc_port>]
    [-getAuditFilterState]
    [-refreshAuditFilter]
    [-getERPAuthState]
    [-refreshERPAuthState]
    [-help [cmd]]


hdfs dfsadmin -help
管理员可以通过dfsadmin管理HDFS,用法可以通过上述命令查看
3.1、hdfs dfsadmin -report显示文件系统的基本数据

3.2、hdfs dfsadmin -safemode < enter | leave | get | wait >
enter:进入安全模式;leave:离开安全模式;get:获知是否开启安全模式;
wait:等待离开安全模式

三、操作HDFS的一般shell命令(hadoop fs 和 hdfs dfs 通用)

1、列出文件目录(-ls 和 -ls -R)

hadoop fs -ls URI
查看HDFS根目录下的目录:hadoop fs -ls / 
递归查看HDFS根目录下的目录:hadoop fs -ls -R /


2、在HDFS中创建文件夹(-mkdir)

hadoop fs -mkdir 文件夹名称 

hadoop fs -mkdir < hdfs path>
只能一级一级的建目录,父目录不存在的话使用这个命令会报错

hadoop fs -mkdir -p < hdfs path> 
所创建的目录如果父目录不存在就创建该父目录


3、上传文件到HDFS中(-put -moveFromLocal -copyFromLocal)

hadoop fs -put 本地源路径 目标存放路径
将本地系统中的一个log文件上传到di文件夹中:hadoop fs -put test.log /di
备注:我们通过Hadoop Shell上传的文件是存放在DataNode的Block(数据块)中的,通过Linux Shell是看不到文件的,只能看到Block。
因此,可以用一句话来描述HDFS:把客户端的大文件存放在很多节点的数据块中。

adoop fs -put < local file > < hdfs file >
hdfs file的父目录一定要存在,否则命令不会执行

hadoop fs -put  < local file or dir >...< hdfs dir >
hdfs dir 一定要存在,否则命令不会执行

hadoop fs -put - < hdsf  file>
从键盘读取输入到hdfs file中,按Ctrl+D结束输入,hdfs file不能存在,否则命令不会执行

moveFromLocal
hadoop fs -moveFromLocal  < local src > ... < hdfs dst >
与put相类似,命令执行后源文件 local src 被删除,也可以从从键盘读取输入到hdfs file中

copyFromLocal
hadoop fs -copyFromLocal  < local src > ... < hdfs dst >
与put相类似,也可以从从键盘读取输入到hdfs file中

4、从HDFS中下载文件(-get -moveToLocal -copyToLocal)

hadoop fs -get HDFS文件路径 本地存放路径
将刚刚上传的test.log下载到本地的Desktop文件夹中:hadoop fs -get /di/test.log /home/hadoop/Desktop

hadoop fs -get < hdfs file > < local file or dir>
local file不能和 hdfs file名字不能相同,否则会提示文件已存在,没有重名的文件会复制到本地

hadoop fs -get < hdfs file or dir > ... < local  dir >
拷贝多个文件或目录到本地时,本地要为文件夹路径
注意:如果用户不是root, local 路径要为用户文件夹下的路径,否则会出现权限问题,

moveToLocal
当前版本中还未实现此命令

copyToLocal
hadoop fs -copyToLocal < local src > ... < hdfs dst >
与get相类似

5、直接在HDFS中查看某个文件(-text/-cat)

hadoop fs -text(-cat) 文件存放路径
在HDFS查看刚刚上传的test.log文件:hadoop fs -text /di/test.log

hadoop fs -text < hdsf file>
将文本文件或某些格式的非文本文件通过文本格式输出

6、删除在HDFS中的某个文件(夹)(-rm)

hadoop fs -rm(r) 文件存放路径
删除刚刚上传的test.log文件:hadoop fs -rm /di/test.log
删除HDFS中的di文件夹:hadoop fs -rm -R /di

hadoop fs -rm < hdfs file > ...
hadoop fs -rm -r < hdfs dir>...
每次可以删除多个文件或目录

7、把HDFS指定目录下的文件合并输出到本地(-getmerge)

hadoop fs -getmerge < hdfs dir >  < local file >
将hdfs指定目录下所有文件排序后合并到local指定的文件中,文件不存在时会自动创建,文件存在时会覆盖里面的内容

hadoop fs -getmerge -nl  < hdfs dir >  < local file >
加上nl后,合并到local file中的hdfs文件之间会空出一行

8、在HDFS中复制文件(-cp)

hadoop fs -cp  < hdfs file >  < hdfs file >    前面是源,后面是目标
目标文件不能存在,否则命令不能执行,相当于给文件重命名并保存,源文件还存在
hadoop fs -cp < hdfs file or dir >... < hdfs dir >
目标文件夹要存在,否则命令不能执行

9、在HDFS中移动文件(-mv)

hadoop fs -mv < hdfs file >  < hdfs file >
目标文件不能存在,否则命令不能执行,相当于给文件重命名并保存,源文件不存在

hadoop fs -mv  < hdfs file or dir >...  < hdfs dir >
源路径有多个时,目标路径必须为目录,且必须存在。
注意:跨文件系统的移动(local到hdfs或者反过来)都是不允许的

10、统计hdfs对应路径下的目录个数,文件个数,文件总计大小(-count)

hadoop fs -count < hdfs path >
统计hdfs对应路径下的目录个数,文件个数,文件总计大小
输出一行用空格分割:分别为目录个数,文件个数,文件总计大小,输入路径
 7           64             867944  hdfs://ns3/user/ls/auto_rerun/dependencies

11、显示hdfs对应路径下每个文件夹和文件的大小(-du)

hadoop fs -du < hdsf path> 
显示hdfs对应路径下每个文件夹和文件的大小

hadoop fs -du - h < hdsf path> 
显示hdfs对应路径下每个文件夹和文件的大小,文件的大小用方便阅读的形式表示,例如用64M代替67108864(相比上面做了单位处理,便于阅读)

hadoop fs -du -s < hdsf path> 
显示hdfs对应路径下所有文件和的大小(显示一行结果,汇总所有的文件大小)

12、改变一个文件在hdfs中的副本个数(-setrep)

hadoop fs -setrep -R 3 < hdfs path >
改变一个文件在hdfs中的副本个数,上述命令中数字3为所设置的副本个数,-R选项可以对一个人目录下的所有目录+文件递归执行改变副本个数的操作

13、查看HDFS某个文件的状态(-stat)

hdoop fs -stat [format] < hdfs path file>
返回对应路径的状态信息
[format]可选参数有:%b(文件大小),%o(Block大小),%n(文件名),%r(副本个数),%y(最后一次修改日期和时间)
可以这样书写hadoop fs -stat %b%o%n < hdfs path file>,不过不建议,这样每个字符输出的结果不是太容易分清楚
hadoop fs -stat %b < hdfs path file>
hadoop fs -stat %o < hdfs path file>
hadoop fs -stat %n < hdfs path file>


14、显示HDFS的文件尾部(-tail)

hadoop fs -tail < hdfs file >
在标准输出中显示文件末尾的1KB数据


参考:
https://segmentfault.com/a/1190000002672666


 

猜你喜欢

转载自blog.csdn.net/l1394049664/article/details/82152548
今日推荐