技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统架构 --> MogileFS 的客户端和API(MogileFS 系列4)

MogileFS 的客户端和API(MogileFS 系列4)

浏览:2519次  出处信息

    在 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 来使用。

建议继续学习:

  1. 分布式缓存系统 Memcached 入门    (阅读:14788)
  2. Zookeeper工作原理    (阅读:10513)
  3. GFS, HDFS, Blob File System架构对比    (阅读:9444)
  4. Zookeeper研究和应用    (阅读:8576)
  5. 分布式日志系统scribe使用手记    (阅读:8097)
  6. 一致性哈希算法及其在分布式系统中的应用    (阅读:7994)
  7. 分布式哈希和一致性哈希    (阅读:7729)
  8. HBase技术介绍    (阅读:6824)
  9. 分布式系统的事务处理    (阅读:6101)
  10. Memcache分布式部署方案    (阅读:5507)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1