设为首页 收藏本站
查看: 1307|回复: 0

[经验分享] hadoop源码分析系列(二)——org.apache.hadoop.fs包 ----(上)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-6-6 10:41:57 | 显示全部楼层 |阅读模式
摘要: org.apache.hadoop.fs包中主要包括了对文件系统的维护操作的抽象,包括文件的存储和管理,主要包含下面的子包这些子包中包含了对文件系统的基本操作的抽象包括文件上传协议、权限控制、对kosmos文件系统的支持、 ...

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

1304062zsvm2wzc224cw4t.png 这些子包中包含了对文件系统的基本操作的抽象包括文件上传协议、权限控制、对kosmos文件系统的支持、对amazon s3文件系统的支持和一些shell命令,下面将逐个包分析类的层次、结构、调用关系以深入理解hadoop文件系统的设计和实现原理。
1、org.apache.hadoop.fs.ftp包
顾名思义这个包提供了在http协议上对于hadoop文件系统的访问:
130406s1fchhs3cj9fhf0c.png
红框里面的是包内的类 其他是外部的调用类
   FTPException:RuntimeException的子类,用于封装ftp操作时的运行时的异常
   FTPInputStream:FSInputStream类的子类,在FSInputStream的基础上增加了一些特别的处理文件输入流的方法,不过在这个版本中基本上没     有做实现
   FTPFileSystem:由FTP提供支持的文件系统,类中的主要属性:
130406r4mnfw3n47cm9drs.png
   DEFAULT_BLOCK_SIZE:默认的文件系统的块大小,4M
   DEFAULT_BUFFER_SIZE:默认的缓冲区大小 1M
   uri:文件系统的uri
   主要方法:
    130407djf1nep1ik1ndjyd.png
下面详细介绍其中的主要方法:
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包
类图如下:
130407733dtsokt3btkt85.png
包含了对kfs的基本操作
interface IFSImpl:顶级的文件抽象接口,声明了文件操作的基本方法
KFSImpl:kfs文件系统的实现类通过调用org.kosmix包中的方法实现IFSImpl接口中定义的方法
KFSInputStream:kfs文件输入流操作类,类中提供了读取字节、设置文件流访问偏移指针等功能
KFSOutputStream:kfs文件输出流操作类,主要提供了文件操作中的write和flush方法
KosmosFileSystem:继承了FileSystem类,通过间接调用KFSImpl类中的方法完成类似FTPFileSystem中的方法。
3、org.apache.hadoop.fs.permission包
类图如下:

130408vpcmcebjpzffepjz.png 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文件系统的支持
130408o33l3t81x83189o3.png
这里我们只是看下两个顶级接口中定义的文件处理方法

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-20262-1-1.html 上篇帖子: hadoop源码分析系列之(一)——org.apache.hadoop.conf包 下篇帖子: hadoop源码分析系列(三)——org.apache.hadoop.fs包 ----(下)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表