基于GFS思想的分布式文件系统KFS


KFS(KOSMOS DISTRIBUTED FILE SYSTEM),不是KFC(肯德基)哦,是一个类似GFS的开源分布式文件系统。

自从去年Google 发布了他的几款主要产品gfs,bigtable,map-reduce 的相关文档后,一些牛人就马上行动起来,折腾出来实现类似功能的开源产品了,kfs就是其中之一,主要模仿的是gfs的功能。

gfs,bigtable,map-reduce是google产品的三大基石,而这三个产品现在都有了对应的开源实现:

    gfs:
    kfs(据传google创始人的同窗所创),hdfs(hadoop的子项目)

    bigtable:
    hbase(hadoop的子项目),Hypertable(从hbase项目组分离出去的,用c++实现)

    map-reduce:
    hadoop(apache的项目,使用java实现,目前在yahoo全力打造,已可以支持2000个以上的节点并行计算的规模)

还是先说说KFS吧,这个项目说起来和Google还有点渊源,江湖传闻Google的两个共同创始人佩奇和布林有两个大学同窗,名叫Anand Rajaraman和Venky Harinarayan,是两个印度人,看到Google获得巨大成功之后,心里有点不服气,于是就动手做了个一个新的搜索引擎Kosmix,希望能证明他们的能力也是很强的,在做这个搜索引擎的过程中,他们实现了一个类似GFS的文件系统KFS,并把它开源了。

KFS是用C++写的,但是其客户端支持C++,Java,Python方式的调用。并且,现在已经可以被Hadoop和Hypertable这两个项目支持,作为底层存储。

那么KFS到底有什么特性呢?

    自动存储扩充(添加新的chunckserver,系统自动感知)
    有效性(复制机制保证文件有效性,一般文件会被以三种方式存储,当其中一个chunkserver出现错误的时候,不会影响数据的读取;)
    文件复制粒度:可以配置文件复制的粒度,最大可以被复制64份
    还原复制:当其中一个Chunckserver出现故障的时候,Metaserver会强制使用其他的chunckserver
    负载平衡(系统周期地检查chunkservers的磁盘利用,并重新平衡chunkservers的磁盘利用,HDFS现在还没有支持)
    数据完整性(当要读取数据时检查数据的完整性,如果检验出错使用另外的备份覆盖当前的数据)
    文件写入:当一个应用程序创建了一个文件,这个文件名会被立刻写入文件系统,但为了性能,写入的数据会被缓存在kfs客户端.并且周期性的从缓存中把数据更新到chunkserver中。当然,应用程序也可以强制把数据更新到服务器上。一旦数据被更新到服务器,就可以被有效的读取了。(我怎么能知道这个文件什么时候可以读取了呢?)
    契约(使用契约来保证Client缓存的数据和文件系统中的文件保持一致性)
    支持FUSE(在linux系统下,可以通过Fuse 映射一个文件夹,从而可以很方便的读取kfs的文件)
    支持C++,Java,Python方式的调用
    提供了丰富的工具程序,如kfsshell,cp2kfs等
    提供了启动和停止服务的脚本

KFS高级特性:

    支持同一文件多次写入和Append,不过不能在文件中间插入数据。 (HDFS支持一次写入多次读取,不支持Append)
    文件及时生效,当应用程序创建一个文件时,文件名在系统马上有效。(HDFS文件只当输入流关闭时才在系统中有效,因此,如果应用程序在关闭前出现异常导致没有关闭输入流,数据将会丢失。)
    这一点好像也不是很好,如果输入流中断,在kfs里会留下一个错误的文件,当读取时会出现错误,好像也没有太大的意义。

你可能感兴趣的:(hadoop,搜索引擎,python,Google,hbase)