MogileFS 的客户端和API(MogileFS 系列4)
在 MogileFS 最重要的一个部分是客户端的应用,如下,可以支持的语言非常多,也支持 FUSE 所以下面,我来以 MogileFS 的 Perl 客户端和 MogileFS 的 FUSE 的 API 连接来讲讲.
上面提到各种客户端,MogileFS 的 java Ruby PHP Python 都是支持的,其它客户端 API 的资料可以参考如下地址:
Java - http://github.com/eml/java-mogilefs
Ruby - http://seattlerb.rubyforge.org/mogilefs-client/
PHP - http://projects.usrportage.de/index.fcgi/php-mogilefs
Python - http://www.albany.edu/~ja6447/mogilefs.py
MogileFS 的 Perl 的客户端
这个是我们最常用的客户端,和别的 PHP,Python 基本也分别不大,但主要是因为 MogileFS 的原型就是 Perl ,所以我们在这介绍一下这种应用.
他的资料的网站是
Perl - http://search.cpan.org/~bradfitz/MogileFS-Client/
使用非常的容易第一步和普通的面向对象的函数一样,先 new 一个对象出来,存到 $mogc 的变量名中,需要提供二个参数,主要就是 domain 的地址和 track 的地址
my $mogc = MogileFS::Client->new( domain => <domain>, hosts => [qw/<track_ip>:7001/] );
介绍几个常用的功能。
在内存中新建一个文件存入 MogileFS.这个会打开一个文件句柄。
$mogc->new_file($key, $class)
例如:
my $fh = $mogc->new_file('foo', 'some_file'); print $fh "hi this is new file"; $fh->close;
在给文件系统本身存在的文件存入 MogileFS.
$mogc->store_file($key, $class, $fh_or_filename[, $opts_hashref])
这个会直接返回文件的大小
$filesize = $mogc->store_file('some_file', 'foo', '/tmp/test.txt');
如果没有大小,就存入失败了。
取得一个文件存储在 MogileFS 中的路径
@paths = $mogc->get_paths($key, { noverify => $bool });
这个函数会得到路径的地址的列表值,因为一个文件有可能会存多个地址,所以才会出一个列表值。
例如:
my @pathes = $mogc->get_paths('foo'); print @pathes;
实际的地址如下
["http://xxx.xxx.xxx.xxx:7500/dev2/0/000/000/0000000016.fid"]
直接取得文件的内容,这个会直接得到文件的内容,内容为一个引用,需要使用 $$content 来解这个引用
$dataref = $mogc->get_file_data($key)
例如
my $content = $mogc->get_file_data('some_file'); print $$content;
删除文件系统中指定的文件
$mogc->delete('some_file');
重命名指定文件到新的名字
$mogc->rename('some_key', 'any_key');
MogileFS 的 FUSE 的 API 来对文件进行操作
另一个是基于象文件系统一样的 FUSE,很多人问我 MogileFS 和 NFS 有什么分别,我真不想解释,使用一样就感觉得出来,简单的分就是,一个是分布文件系统,一个是共享分文系统,从这个字面也不难理解它们的分别了吧.
先有个准备工作,就是准备 FUSE 的环境,这个要系统支持,也得 Perl 支持。 FUSE 主要就是给原来给 VFS 的命令,转成 MogileFS 相应的命令来替换文件系统的操作。这样就能和正常的文件系统一样。显示和操作想关的文件。
MogileFS 中 FUSE 功能操作系统支持需要的包如下
yum install fuse fuse-devel fuse-libs
Perl 要支持 FUSE 的操作,所需要的模块
cpanm FUSE::Client cpanm FUSE::Server cpanm Fuse
最后,我们需要挂载文件系统的内容。默认 MogileFS 有一些操作。来支持这个功能。我们可以使用 sixapart 提供的一个程序
我们可以使用 svn 下载 http://code.sixapart.com/svn/mogilefs/trunk/fuse/ ,然后使用其中的 mount-filepaths 就可以实现这个功能了。
命令的参数如下:
mount-filepaths --tracker HOST:PORT --domain DOMAINNAME [ --class CLASSNNAME ] [ --file-perms FILEPERM ] [ --dir-perms DIRPERM ] [ --log LOGFILE ] [ --cache-size NUM ] [ --cache-age SECS ] [ --verbose ] [ --help ]
这个功能的使用,我们要借助另外二个插件
MogileFS-Plugin-FilePaths
MogileFS-Plugin-MetaData
这二个插件的作用是,让 MogileFS 支持文件列表。会给一些 MetaData 传到这个系统中。不过这二个插件(模块)可能得修改一下才能正常使用。
上面的 sixapart 的脚本使用我不细写了。我建议使用国外另一个高人写的一个新的 MogileFS 的改善后的程序。
MogileFS + FUSE + Bigfile support: http://www.spicylogic.com/allenday/blog/2008/07/14/mogilefs-fuse-bigfile-support/
我们 Copy 这个脚本中的内容建一个名字。然后直接使用,注意。这个脚本要生产用,还得修改一下,另外,只要使用了 FUSE 性能一定不会好。。。
<fuse_script>.pl <mount_point>
例如我使用
perl myfuse.pl /mnt/
当使用了这个上面的挂载命令后,文件系统,记的先不要关掉,最好推到后台,然后我们在进入 /mnt 中就能对文件进行操作了。就象普通的文件系统一样操作。
Nginx 做为 MogileFS 的客户端使用
本功能决定在下一个文章写,写 Nginx 在 MogileFS 中的应用.不但做为客户端还做为 Perlbal 的替代用来做 MogileFS 吐文件的 API 来使用。
建议继续学习:
- 分布式缓存系统 Memcached 入门 (阅读:14723)
- Zookeeper工作原理 (阅读:10400)
- GFS, HDFS, Blob File System架构对比 (阅读:9383)
- Zookeeper研究和应用 (阅读:8521)
- 分布式日志系统scribe使用手记 (阅读:8043)
- 一致性哈希算法及其在分布式系统中的应用 (阅读:7933)
- 分布式哈希和一致性哈希 (阅读:7662)
- HBase技术介绍 (阅读:6761)
- 分布式系统的事务处理 (阅读:5999)
- Memcache分布式部署方案 (阅读:5448)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:扶凯 来源: 扶凯
- 标签: MogileFS 分布式 文件系统
- 发布时间:2011-09-07 23:23:56
- [54] IOS安全–浅谈关于IOS加固的几种方法
- [52] android 开发入门
- [52] 如何拿下简短的域名
- [51] 图书馆的世界纪录
- [49] Go Reflect 性能
- [49] Oracle MTS模式下 进程地址与会话信
- [47] 【社会化设计】自我(self)部分――欢迎区
- [46] 读书笔记-壹百度:百度十年千倍的29条法则
- [37] 程序员技术练级攻略
- [29] 视觉调整-设计师 vs. 逻辑