您的位置:首页 > 运维架构 > Apache

hadoop源码分析系列(二)——org.apache.hadoop.fs包 ----(上)

2013-02-28 17:57 871 查看
摘要: org.apache.hadoop.fs包中主要包括了对文件系统的维护操作的抽象,包括文件的存储和管理,主要包含下面的子包这些子包中包含了对文件系统的基本操作的抽象包括文件上传协议、权限控制、对kosmos文件系统的支持、 ...

org.apache.hadoop.fs包中主要包括了对文件系统的维护操作的抽象,包括文件的存储和管理,主要包含下面的子包


这些子包中包含了对文件系统的基本操作的抽象包括文件上传协议、权限控制、对kosmos文件系统的支持、对amazon s3文件系统的支持和一些shell命令,下面将逐个包分析类的层次、结构、调用关系以深入理解hadoop文件系统的设计和实现原理。

1、org.apache.hadoop.fs.ftp包

顾名思义这个包提供了在http协议上对于hadoop文件系统的访问:



红框里面的是包内的类 其他是外部的调用类

FTPException:RuntimeException的子类,用于封装ftp操作时的运行时的异常

FTPInputStream:FSInputStream类的子类,在FSInputStream的基础上增加了一些特别的处理文件输入流的方法,不过在这个版本中基本上没 有做实现

FTPFileSystem:由FTP提供支持的文件系统,类中的主要属性:



DEFAULT_BLOCK_SIZE:默认的文件系统的块大小,4M

DEFAULT_BUFFER_SIZE:默认的缓冲区大小 1M

uri:文件系统的uri

主要方法:




下面详细介绍其中的主要方法:

initialize(URI uri, Configuration conf):根据uri和配置信息初始化文件系统,首先从uri中取得文件系统的host信息,如果uri为空就从conf中配置的fs.ftp.host参数中获取,可以见运行时的参数修改的优先级大于配置文件中同名参数的优先级,然后从fs.ftp.host.port取得端口信息,最后取得fs.ftp.user和fs.ftp.password中的用户名和密码信息,设置到Configuration对象中。

connect():连接请求方法,通过apache的ftp client和Configuration对象中的配置信息向服务端发出连接请求,并对服务器的返回进行解析。

disconnect(FTPClient client):注销存在的ftp连接

makeAbsolute(Path workDir, Path path):解析绝对路径

FSDataInputStream open(Path file, int bufferSize):在指定路径上用指定的缓冲区大小读取文件,返回文件输入流,这里面需要注意的是要在目录下读取文件所以需要changeWorkingDirectory。

create(Path file, FsPermission permission,

boolean overwrite, int bufferSize, short replication, long blockSize,

Progressable progress):创建文件,注意这个方法中虽然传递了replication参数,但是并没有使用,

append(Path f, int bufferSize,

Progressable progress) :追加写文件,这个版本中并没有实现这个方法

delete(FTPClient client, Path file, boolean recursive):删除文件,这个方法比较简单,如果是文件就直接删除,如果是目录要遍历目录下文件然后删除最后删除目录。

getFsAction(int accessGroup, FTPFile ftpFile):这是一个很特别的方法,主要是通过读取文件和组信息来获得权限

getPermissions(FTPFile ftpFile):获得文件的完整的权限信息

getFileStatus(FTPFile ftpFile, Path parentPath) :获得文件状态信息

mkdirs(FTPClient client, Path file, FsPermission permission):创建目前,创建之前检查指定的权限信息

rename(FTPClient client, Path src, Path dst):重命名文件,通过调用ftp client的rename来完成重命名

2、org.apache.hadoop.fs.kfs包

类图如下:



包含了对kfs的基本操作

interface IFSImpl:顶级的文件抽象接口,声明了文件操作的基本方法

KFSImpl:kfs文件系统的实现类通过调用org.kosmix包中的方法实现IFSImpl接口中定义的方法

KFSInputStream:kfs文件输入流操作类,类中提供了读取字节、设置文件流访问偏移指针等功能

KFSOutputStream:kfs文件输出流操作类,主要提供了文件操作中的write和flush方法

KosmosFileSystem:继承了FileSystem类,通过间接调用KFSImpl类中的方法完成类似FTPFileSystem中的方法。

3、org.apache.hadoop.fs.permission包

类图如下:


AccessControlException:访问控制异常类,已经标记为过期

FsAction:权限的枚举类,主要是对POSIX系统的支持,定义了8中权限模型,对应POSIX系统的---、--x、-w-、

-wx、r--、r-x、rw-、rwx,并定义了他们之间的and or not关系操作。

FsPermission:可序列化的权限类,完成了unix系统上对文件和目录user、group、other的权限解析。

PermissionStatus:可序列化的权限关联信息类,类中定义了存储权限信息的可序列化的read和write方法。

4、org.apache.hadoop.fs.s3 和 org.apache.hadoop.fs.s3native包

这两个包中定义了对as3文件系统的支持



这里我们只是看下两个顶级接口中定义的文件处理方法


可见和前面两个包的定义方法很类似,这里就不做详细分析了。

原创作品 转载请注明出处 http://f.dataguru.cn/thread-18677-1-1.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: