首页 > 代码库 > 基于key/value+Hadoop HDFS 设计的存储系统的shell命令接口
基于key/value+Hadoop HDFS 设计的存储系统的shell命令接口
对于hadoop HDFS 中的所有命令进行解析(其中操作流程是自己的想法有不同意见欢迎大家指正)
接口名称 | 功能 | 操作流程 |
get | 将文件复制到本地文件系统 。如果指定了多个源文件,本地目的端必须是一个目录。 | (1)按照上述机制,在Config server上的存储引擎中逐层读取K-V,直到获得文件名(或大文件元数据信息); (2)根据文件名(或大文件元数据信息)到相应的Data server中获取相应的文件(大文件需要拼接); (3)将获取的文件写入本地文件系统。 |
put | 从本地文件系统中复制文件或目录到目标文件系统。 | (1)按照上述章节所述,逐层解析<dst>绝对路径,获取目标文件夹的key/value数据; (2)根据章节所述规则,结合目标文件夹的标号和源文件的文件名生成对应的key/value; (3)根据步骤(2)生成的key/value上传源文件的相关信息; (4)上传源文件内容到系统中。 |
rm | 删除指定的文件,只删除非空目录和文件。 | (1)根据上述章节所述,逐层解析到目标文件所在的位置获取指定文件的key/value; (2)根据key找到指定的文件或目录所在的DataNode上存储的信息; (3)删除信息; (4)将删除记录写入edit log。 |
mkdir | 创建目录,会创建路径中所有缺失的父目录。 | (1)按照上述机制,逐层解析找到父目录,获取标记,如果父目录不存在则递归的创建路径上的目录; (2)将父目录的标记作为key的父节点字段部分,创建新目录。 |
appendToFile | 添加源文件从本地文件系统到目标文件系统。 | (1)按照上述章节所述,逐层解析<dst>绝对路径,获取目标文件夹的key/value数据; (2)根据章节所述规则,结合目标文件夹的标号和源文件的文件名生成对应的key/value; (3)根据步骤(2)生成的key/value上传源文件的相关信息; (4)上传源文件内容到系统中。 |
cat | 将路径指定文件的内容输出到stdout。 | (1)按照上述机制,逐层解析path到目标文件,获取文件的key/value; (2)根据key值在找到文件内容输出到stdout中; (3)将结果在终端显示出来。 |
chgrp | 改变文件和目录的群组。 | (1)按照上述机制,在Config server上的存储引擎中逐层读取K-V,直到获得所操作的文件名/目录(或大文件元数据信息); (2)修改这个K-V中的value的表示群组的字段并重新插入新的K-V。 |
chmod | 改变文件和目录的访问权限。 | (1)按照上述机制,在Config server上的存储引擎中逐层读取K-V,直到获得所操作的文件名/目录(或大文件元数据信息); (2)修改这个K-V中的value的表示访问权限的字段并重新插入新的K-V。 |
chown | 变更文件和目录的拥有者。 | (1)按照上述机制,在Config server上的存储引擎中逐层读取K-V,直到获得所操作的文件名/目录(或大文件元数据信息); (2)修改这个K-V中的value的表示所有者的字段并重新插入新的K-V。 |
copyFromLocal | 从本地文件系统中复制文件,和put命令相似。 | 操作流程参见put接口。 |
copToLocal | 将文件复制到本地文件系统,和get命令类似。 | 操作流程参见get接口。 |
count | 显示由路径确定的子目录的个数,文件个数,使用字节个数,以及所有的文件目录名。 | (1)解析到目标路径,获取相关的key/value; (2)获取value中的子目录个数,文件个数,使用字符串等相关信息的字段。 |
cp | 将文件从源路径复制到目标路径。这个命令允许有多个原路径,此时目标路径必须是一个目录。 | (1)根据上述章节所述,逐层解析<dest>,获取目标文件的位置信息; (2)获取源文件的内容; (3)逐块复制源文件信息到目标文件当中。 |
du | 显示文件大小,如果path是一个目录,则显示该目录中所有文件的大小。 | (1)按照上述机制,在Config server上的存储引擎中逐层读取K-V,直到获得文件名或目录; (2)如果是文件读取相应的key/value中,读取value中表示文件大小的字段,如果是目录则读取标记,递归的查询属于该目录下的所有文件。 |
dus | 显示文件的大小,但是当作用于目录时,会显示文件大小之和。 | (1)按照上述机制,在Config server上的存储引擎中逐层读取K-V,直到获得文件名或目录; (2)如果是文件读取相应的key/value中,读取value中表示文件大小的字段,如果是目录则读取标记,递归的查询属于该目录下的所有文件value信息,将value中关于文件大小的字段信息相加取和。 |
expunge | 清空回收站。 | (1)按照上述机制,解析到HDFS系统回收站目录下(/user/用户名/.Trash/current); (2)删除(参考接口rm)。 |
getfacl | 显示文件和目录的访问控制列表。 | (1)按照上述章节所述,逐层解析,获取目标文件或路径的key/value数据; (2)获取value中有关的ACL的字段信息。 |
getmerge | 获取由源目录指定的所有文件,将它们合并为单个文件并写入本地文件系统中的LOCALDST。 | (1)按照上述机制,逐层解析,获取源目录文件的标记; (2)根据标记,在config server中寻找目录文件下的子文件; (3)创建目标文件,将子文件的内容依次合并到目标文件当中; (4)将目标文件写入本地文件系统。 |
ls | 列出目录及文件信息。 | (1)按照上述机制,逐层解析获取到目标文件或者文件夹的标记; (2)根据标记查询子目录或者文件相关信息; (3)列出信息。 |
lsr | 循环列出目录,子目录及文件信息。 | 操作流程参见参照ls接口。 |
moveFromLocal | 类似于put,只是本地的源在复制之后会被删除。 | (1)按照上述章节所述,逐层解析<dst>绝对路径,获取目标文件夹的key/value数据; (2)根据章节所述规则,结合目标文件夹的标号和源文件的文件名生成对应的key/value; (3)根据步骤(2)生成的key/value上传源文件的相关信息; (4)上传源文件内容到系统中; (5)删除本地源文件。 |
moveToLocal | 于get命令类似。 | 操作流程参见get接口。 |
mv | 移动文件从源地址到目标地址。 | (1)按照上述机制,逐层解析<dest>绝对路径获取目标文件夹的标号; (2)逐层解析到源文件获取源文件的key/value数据; (3)更改源文件中的key值将其中的父节点标号字段改为目标文件夹的标号。 |
rmr | 递归删除指定文件和目录。 | (1)按照上述机制,逐层解析到目标文件所在的位置获取指定文件的标记; (2)采用递归算法根据标记删除指定的文件或目录。 |
setfacl | 设置访问控制列表(acl)的文件和目录。 | (1)按照上述机制,逐层解析,获取目标文件或路径的key/value数据; (2)设置value中的ACL。 |
setrep | 改变文件的目标副本系数。 | (1)按照上述章节所述,逐层解析,获取目标文件的key/value数据; (2)修改value中有关副本系数的字段。 |
stat | 显示文件中的统计信息。 | (1)按照上述章节所述,逐层解析,获取目标文件的key/value数据; (2)获取value中关于文件的统计信息的相关字段。 |
tail | 显示目标文件中的最后1KB数据。 | (1)按照上述章节所述,逐层解析,获取目标文件的key/value数据; (2)根据所得到的key/value查询最后一块中的1KB信息,如果最后一块不足1KB,则查询倒数第二块中信息,拼接成1KB。返回信息。 |
test | 对路径进行检查。 | (1)按照上述章节所述,对目标路径逐层解析,获取目标文件的key/value数据; (2)检查目标文件中的key/value中的相关字段,以检测文件是否存在,大小是否为0,目录路径是否存在。 |
text | 显示文件的文本内容,当文件为文本文件时,等同于cat。文件为压缩格式时,会先解压缩。 | 操作流程参见cat接口。 |
touchz | 创建长度为0的文件。 | 操作流程参见mkdir接口。 |