- HDFS shell
1.0查看帮助
hadoop fs -help <cmd>
1.1上传
hadoop fs -put <linux上文件> <hdfs上的路径>
1.2查看文件内容
hadoop fs -cat <hdfs上的路径>
1.3查看文件列表
hadoop fs -ls /
1.4下载文件
hadoop fs -get <hdfs上的路径> <linux上文件>
hadoop distcp hdfs://NameNode1/foo hdfs:// NameNode2/ bar
递归查看当前文件夹及子文件夹的目录和文件
hadoop fs- lsr /user/ubuntu/In/
将hadoop回滚到前一个版本
hadoop DataNode -rollback
hadoop nameNode
hadoop nameNode -format // 格式化NameNode
hadoop nameNode -upgrade // 在hadoop升级后,应该使用这个命令启动namedata
hadoop nameNode -rollback // 使用NameNode回滚前一个版本
hadoop nameNode -finalize // 删除文件系统的前一个状态,
这会导致系统不能回滚到前一个状态
hadoop nameNode -importCheckpoint //复制备份checkpoint的状态到当前checkpoint
SecondaryNameNode
hadoop secondaryNameNode -checkpoint [force]
//当editlog超过规定大小(默认64MB)时,启动检查secondaryNameNode的checkpoint过程;如果启用force选项,则强制执行checkpoint过程
[-geteditsize]
//在终端上显示editlog文件的大小
balancer
hadoop balancer
//当集群中添加新的DataNode时,可以使用这个命令来进行负载均衡.
dfsadmin
# 在终端上显示文件系统的基本信息
hadoop dfsadmin -report # 已过时
hdfs dfsadmin -report
# hadoop的安全模式及相关维护;
# 在安全模式中系统是只读的,数据块也不可以删除或复制.
hdfs dfsadmin -safemode enter|leave|get|wait
# 重新读取hosts和exclude文件,将新的被允许加入到集群中的DataNode连入,
# 同时断开与那些从集群出去的DataNode的连接.
hdfs dfsadmin -refreshNodes -finalizeUpgrade
#获取当前系统的升级状态,细节,或者强制执行升级过程.
hdfs dfsadmin -upgradeProgress status|details|force
# 保存NameNode的主要数据结构到指定目录下
hdfs dfsadmin -metasave filename
#显示命令的帮助信息
hdfs dfsadmin -help [cmd]
fsck
检查系统中的不一致情况,比如某文件只有目录,但数据已经丢失或副本数目不足.
与linux不同,这个命令只用于检测,不能进行修复.
hadoop fsck [GENERIC_OPTIONS] <path> [-move|-delete|-openforwrite][-files[-blocks [-locations|-racks]]]
//<path>检查的起始目录
//-move移动受损文件到/lost+found
//-delete删除受损文件
//-openforwrite在终端上显示被写打开的文件
//-files 在终端上显示正被检查的文件
//-blocks在终端上显示块信息
//-location在终端上显示每个块的位置
//-rack显示DataNode的网络拓扑结构图 机架数
hadoop fsck / # fsck工具用来验证hdfs中的文件是否正常可用,
# 这个工具可以检测文件块是否在DataNode中丢失,是否低于或高于文件副本要求.
over-replicated blocks
under-replicated blocks # 两种情况hadoop都会自动处理
hadoop dfsadmin-metasave # 命令获取正在被复制的块信息
misreplicated blocks # 用来指明不满足块副本存储位置策略的块.
# 比如副本因子为3,如果一个块的所有副本都存在于一个机器上,
# 那么这个块就是misreplicated blocks.针对这个问题,hdfs不会自动调整.我们只能通# 过手动设置来提高该文件的副本数,
然后再将它的副本数设职位正常值来解决这个问题.
fs:
fs可以说是hdfs最常用的命令,这是一个高度类似linux文件系统的命令集.
你可以使用这些命令查看hdfs的目录结构文件.上传和下载文件.创建文件夹.
复制文件等.其使用方法如下:
hadoop fs -ls /hbase #显示目标路径当前目录下的所有文件
hadoop fs -lsr / #递归显示目标路径下的所有目录及文件(深度优先)
hadoop fs -du / #以字节为单位显示目录中所有文件的大小.或该文件的大小(
#如果目标为文件).
hadoop fs -du -s / # 以字节为单位显示目标文件大小(用于查看文件夹大小)
hadoop fs -count / # 将目录的大小,包含文件(包括文件)个数的信息输出到屏幕
hadoop fs -mv <src> <dst> # 把文件或目录移动到目标路径,这个命令允许同时移动多个文件
# 但是只允许移动到一个目标路径中,参数中的最后一个文件夹即为目标路径
hadoop fs -cp <src> <dst> # 复制文件或目录到目标路径,这个命令允许同时复制多个文件,如果复制多个文件,目标路径必须是文件夹
hadoop fs -rm [-skipTrash] /hbase # 删除文件,这个命令不能删除文件夹
hadoo fs -rmr [-skipTrash] /hbase # 删除文件夹及其下的所有文件
hadoop fs -put <localsrc> <dst> # 从本地文件系统上传文件到hdfs中
hadoop fs -get [-ignoreCrc] [crc] <src> <localdst>
# 复制文件到本地文件系统.
# 这个命令可以选择是否忽视校验和.
# 忽视校验和下载用于挽救那些已经发生错误的文件
hadoop fs copyFromLocal <localsrc> <dst> # 同put
hadoop fs copyToLocal <localsrc> <dst> # 同get
hadoop fs moveFromLocal <localsrc> <dst> # 同put 但上传完会从本地文件系统中移除
hadoop fs moveToLocal <localsrc> <dst> # 同get 但下载完会从文件系统中移除
hadoop fs -getmerge <src> <localdst> [addnl] # 将源目录中的所有文件进行排序并写入目标文件中,文件之间以换行符分隔.
hadoop fs -cat <src> # 在终端显示文件中的内容,类似Linux系统中的cat
hadoop fs -mkdir <path> # 创建文件夹
hadoop fs -touchz <path> # 类似于touch 创建一个空文件
hadoop fs -tail [-f] <file> # 在终端上显示(标注输出stdout)文件的最后1kb内容。
# -f选项的行为与Linux中一致,会持续检测新添加到文件中的内容,这在查看日志文件时会显得非常方便
hadoop fs -chmod [-R] <MODE[,MODE]……|OCTALMODE> PATH……]
# 改变文件的权限,只有文件的所有者或是超级用户才能使用这个命令。
# -R可以递归地改变文件夹内的所有文件的权限
hadoop fs -chown [-R] [OWNER][:[GROUP]] PATH……]
# 改变文件的拥有者,-R可以递归地改变文件夹内所有文件的拥有者。同样,这个命令只有超级用户才能使用
hadoop fs -chgrp [-R] GROUP PATH……]
# 改变文件所属的组,-R可以递归地改变文件夹内所有文件所属的组。这个命令必须是超级用户才能使用[-help[ cmd]]
# 这是命令的帮助信息在这些命令中,参数<path>的完整格式是hdfs://NameNodeIP:port/ # 比如你的NameNode地址是192.168.0.1,
# 端口是9000.那么,如果想访问HDFS上路径为/user/root/hello的文件,则需要输入的地址是hdfs://192.168.0.1:9000/user/root/hello。
# 在Hadoop中,如果参数<path> 没有NameNodeIP,那么会默认按照core-site.xml中属性fs.default.name的设置,附加“/user/你的用户名”
# 作为路径,这是为了方便使用以及对不同用户进行区分。
hadoop文件结构
- HDFS文件结构
- hadoop的状态监视和管理工具
- hadoop集群的维护
NameNode的文件结构
最新格式化的NameNode会创建一下目录结构:
${dfs.name.dir}/current/VERSION
/edits
/fsimage
/fstime
其中dfs.name.dir属性是一个目录列表,是每个目录的镜像.
VERSION文件是Java属性文件,其中包含运行hdfs的版本信息.
下面是一个典型的VERSION文件包含的内容:
#Wed Mar 23 16: 03: 27 CST 2011
namespaceID= 1064465394
cTime= 0
storageType= NAME_ NODE
layoutVersion=- 18 layout 布局 设计
其中namespaceID 是文件系统的唯一标识符.在文件系统第一次被格式化时
会创建namespaceID .这个标识符也要求各DataNode节点和NameNode保持一致.
NameNode会使用此标识符识别新的DataNode.DataNode只有在向NameNode注册后
才会获得此namespaceID. cTime属性标记了NameNode存储空间创建的时间.
对于新格式化的存储空间,虽然这里的cTime属性值为0,但是只要文件系统被更新.
他就会更新到一个新的时间戳.storageType用于指出此存储目录包含一个NameNode
的数据结构,在DataNode中它的属性值为DATA_NODE
layoutVersion是一个负的整数,定义了HDFS持久数据结构的版本.注意,
该版本号和hadoop的发行版本号无关,每次hdfs的布局发生改变,该版本号就会递减
(比如:-18版本号之后是-19),在这种情况下,HDFS就需要更新升级.
因为如果一个新的NameNode或DataNode还处在旧版本上,那么系统就无法正常运行,
各节点的版本号要保持一致.
编辑日志 edit log
文件系统映像 filesystem image
DataNode目录结构:
dataNode不需要进行格式化,它会在启动时自己创建存储目录,其中关键的文件和目录如下:
${dfs.data.dir}/current/VERSION
/blk_<id_1>
/blk_<id_1>.meta
/blk_<id_2>
/blk_<id_2>.meta
/....
/subdir0/
/subdir1/
...
/subdir63
datanode的version文件和namenode的非常类似
DataNode中current目录下的其他文件都有blk_refix前缀.他有两种类型:
1)hdfs的文件块本身,存储的是原始文件内容
2)块的元数据信息(使用.meta后缀标识).一个文件块由存储的原始文件字节组成,
元数据文件由一个包含版本和类型信息的头文件和一系列块的区域校验和组成
当目录中存储的块数量增加到一定规模时,DataNode会创建一个新的目录,
用于保存新的块及元数据.当目录中的块数量达到64(可由dfs.DataNode.numblocks属性值确定)时,
便会新建一个子目录,这样就会形成一个更宽的文件树结构,
避免了由于存储大量数据而导致目录很深,使检索性能免受影响.通过这样的措施,数据节点可以确保每个目录中的文件块数是可控的,也避免了一个目录中存在过多文件.
安全模式:
查看namenode是否已进入安全模式:
hdfs dfsadmin -safemode get
safe mode is ON
在这种情况下,需要在等待NameNode退出安全模式时执行一些命令,这时我们可以使用一下命令 :
hdfs dfsadmin -safemode wait
#command to read or write a file
升级完集群后需要确定数据是否仍然可读等.
hdfs dfsadmin -safemode enter | leave
评论前必须登录!
注册