Hadoop常用命令[备忘]
【Hadoop常用命令】
一、 fsck:hdfs文件系统集群状态检测。
使用方式:./hadoop fsck <path> [-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]
./hadoop fsck /
可选options列表:
1) path:检测开始的目录。
2) -move:将corrupted文件迁移到/lost+found文件夹中
3) -delete:将corrupted文件删除。
4) -openforwrite:将那些已经打开正在写入操作的文件目录打印在屏幕上,条目信息后面将会提示:
OPENFORWRITE: ...............Status: HEALTHY
5) -files:将正在检测的文件信息(名称)打印出来
6) -blocks:打印文件信息的同时,打印blocks信息。
7) -locations:打印blocks的位置信息。
8) -racks:打印blocks的机架信息。
>./hadoop fsck /hbase -files -blocks -locations .... /hbase/hbase.version 7 bytes, 1 block(s): OK 0. BP-919273630-10.10.187.116-1398752513224:blk_1073741825_1001 len=7 repl=3 [121.10.187.75:50010, 121.10.187.76:50010, 121.10.187.79:50010]
二、 jar:像“java命令”一样,向hadoop集群提交mapreduce作业jar。
使用方式:./hadoop jar <jar-path> [mainClass] args...
./hadoop jar ../mapred-lib/statistic-mapred-all.jar QuartzScriptMain
注意,像“java -cp”运行一个main一样,“hadoop jar”命令也需要指定jar路径和main方法所在的类,也可以像java命令一样指定参数,最终hadoop将额外的启动一个“RunJar”进程单独运行。
三、job:在运行时查看job的状态。
1) -submit <job-file>:提交任务,此命令不常用。
2) -status <job-id>:根据jobId打印出job的进度和job的相关计数器。
3) -counter <job-id> <group-name> <counter-name>:根据指定的参数查看计数器值。
4) -kill <job-id>:取消作业执行
5) -list [all]:展示所有已经执行完毕的作业
6) -kill-task <task-id>:取消指定的task,task将会重新执行,不过不会增加"attempts"值。
7) -fail-task <task-id>:让当前task失效,task将会重新执行,相当于运行失败一次,会增加“attempts”值。
8) -set-priority <job-id> <priority>:修改job的权重,合法权重值为“VERY_HIGH”,"HIGH","NORMAL","LOW","VERY_LOW";修改权重值不一定会生效,比如job已经被调度,或者调度器不支持权重等。
四、classpath:打印出hadoop的classpath信息,便于调试程序。
五、balancer:集群数据重新平衡,是一个耗时的操作,可以指定-threshold参数表示磁盘的利用率(大于1,小于100的数字)阀值,达到此阀值的node,将会把数据迁移到其他node上;否则不平衡。
使用方式:hadoop balancer [-policy] [-threshold <num>],policy参数合法值为datanode、blockpool,默认为datanode,blockpool在HDFS Federation架构中有效。
六、dfsadmin:hdfs集群管理。
1) -report:获取hdfs集群的信息和统计数据。
>./hadoop dfsadmin -report .... Configured Capacity: 173329641472 (161.43 GB) Present Capacity: 115128503670 (107.22 GB) DFS Remaining: 112925552640 (105.17 GB) DFS Used: 2202951030 (2.05 GB) DFS Used%: 1.91% Under replicated blocks: 1930 Blocks with corrupt replicas: 0 Missing blocks: 0 ------------------------------------------------- Datanodes available: 2 (2 total, 0 dead) Live datanodes: ....
2) -safemode <enter | leave | get | wait>:Namenode节点维护命令,让Namenode处于“安全模式”;安全模式下,Namenode不能修改集群中的namespace(即无法创建、删除文件等),处于只读状态,无法备份和删除blocks操作;通常情况下,在namenode启动时,会自动进入safemode,直到恢复完毕,离开安全模式。
“dfs.namenode.safemode.threshold-pct”默认值为“0.999f”,如果集群中满足“dfs.namenode.replication.min”条件的blocks个数占blocks总数的比例小于此值时,namenode将进入safemode,比如在namenode启动时,或者运行时大量datanode离群。如果此值>=1,那么namenode将永远处于safemode,除非手动操作;如果此值<=0,表示namenode不会等待block即备,将会立即退出安全模式。
“dfs.namenode.safemode.min.datanodes”默认值为0,如果集群中存活的datanodes的数量少于此值,namenode将进入safemode;如果此值<=0,那么namenode将不会等待datanodes即备,立即退出安全模式;如果此值大于集群中datanodes的实际个数,那么namenode将无法退出安全模式。
“dfs.namenode.safemode.extension”默认值为30000,当上述两个条件之一达到阀值后,namenode在extension时间之后进入safemode,此值不能太小,以避免集群短时间不稳定或者频繁的动荡,导致namenode可用性降低。
3) -refreshNodes:重新读取hosts和exclude文件,重置Namenode内存中的datanodes列表;通常在管理员修改hdfs-site.xml文件中的“dfs.hosts.exclude”、“dfs.hosts”配置项之后,执行此命令;可以在不重启集群的情况下,让配置文件生效。
4) -upgradeProgress <status | details | force>:获取集群系统升级的过程、进度状态信息,或者强制升级。(2.2+不可用)
5) -finalizeUpgrade:升级结束后,可以通过此指令,来删除升级过程产生的文件和旧文件数据。
6) -metasave <filename>:将Namenode中核心的数据结构保存到文件中,文件将放置在${hadoop.log.dir}中,如果文件存在,则覆盖。这个文件只会包含metada(不包含namespace),按行分割,其中包含“与NameNode保持心跳的Datanodes列表”、“亟待复制的blocks列表”、“正在复制的blocks列表”、“亟待删除的blocks列表”。
>./hadoop dfsadmin -metasave meta-2014-08-06.log .... 62 files and directories, 22 blocks = 84 total Live Datanodes: 3 Dead Datanodes: 0 Metasave: Blocks waiting for replication: 0 Mis-replicated blocks that have been postponed: Metasave: Blocks being replicated: 0 Metasave: Blocks 0 waiting deletion from 0 datanodes. Metasave: Number of datanodes: 3 121.10.187.151:50010 IN 317068410880(295.29 GB) 38838272(37.04 MB) 0.00% 300675489792(280.03 GB).... 121.10.187.152:50010 IN 317068410880(295.29 GB) 39108608(37.30 MB) 0.00% 300612202496(279.97 GB).... 121.10.187.153:50010 IN 317068410880(295.29 GB) 39108608(37.30 MB) 0.00% 300626178048(279.98 GB)....
7) -setQuota <quota> <dirname>...:对指定目录设定quota(配额),即限定目录下文件个数的大小。通常hdfs并没有对目录设置quota。我可以通过“hdfs dfs -cout -q <dirname>”来查看目录文件配额,默认为“none”(未设定,即Long.MAX_VALUE),如果quota值为负值、或者user不是管理员、或者目录不存在、或者当前目录下的配额已经达到设定值,则会导致操作失败;同时可以使用"-clrQuota <dirname>"来清楚目录下的配额。
8) -restoreFailedStorage <true | false | check>:当NameNode失效后,是否根据自己的edits日志、fsimage自动恢复,默认为false。通常我们会设定SecondaryNamenode或者backup,关于NameNode的恢复,一般为手动。可以使用check指令获取当前的设置。
七、namenode:namenode管理
使用方式:hadoop namenode [-format] | [-upgrage] | [-rollback] | [-finalize] | [-importCheckpoint]
1) -format:格式化namenode,这个指令将触发namenode启动,然后format,结束后关闭namenode;我们通常在一个集群重建之后,执行format指令,由namenode生成cluster相关的标识。
2) -upgrade:升级,具体过程参见相关专门文档。
3) -rollback:升级失败(或成功后)回滚到前一版本。
4) -finalize:升级结束后,通过此指令则删除升级过程中的临时文件,以及上一版的备份数据。此后当前版本即作为稳定版本。此后,将无法使用rollback指令。
5) -importCheckpoint:恢复namenode(需要停机),当需要启动一个节点作为namenode时(新增namenode节点,或者重启失效的namenode),我们可以把现存的namenode的checkpoint文件copy到此机器上,然后通过import指令,恢复namespace数据结构。详情参见其他文档。
八、secondarynamenode:辅助namenode操作
使用方式:hadoop secondarynamenode [-checkpoint [-force]] | [-geteditsize]
1) -checkpoint [force]:如果editlog的尺寸大于“fs.checkpoint.size”,则secondarynamenode生成checkpoint文件;如果使用-force,则忽略editlog尺寸判定,立即checkpoint。前提是需要关闭secondarynamenode进程。
2) -geteditsize:打印出当前edit日志的大小。