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里会留下一个错误的文件,当读取时会出现错误,好像也没有太大的意义。