MooseFS是一家波兰公司开发的分布式文件系统,相对于Google体系,Apache支持的Hadoop HDFS来说,小众了许多。
一、从分布式架构的角度看
两者都属于中心结构,这点上是区别于GlusterFS这种去中心化的分布式文件系统架构。
MooseFS的元数据管理主服务叫做MasterServer,而HDFS是NameNode。它们都是在管理着元数据目录树以及负责不同数据节点的分布式协作。
因此从分布式架构角度看,两者的中心化特性所带来的分布式优劣是不分伯仲的。
这种中心化的特征我以前提到过,那就是存在一个主服务,对元数据的管理维护所形成的逻辑操作,就能让整个分布式系统的文件目录的管理维护成本变得很低,这是优势。
劣势就在于主服务往往承担着巨大的风险,这种风险来自于内存需要缓存大量元数据,那么一个数据文件块的存储就不能太小,分布式文件系统不适合存储小文件这是通病。
但是中心化架构非常关键的一环就是主服务的高可用,如果没有高可用,主服务宕机就会出现集群不可用的巨大风险,因此两者都必然具有高可用架构设计。
然而MooseFS在高可用服务上是闭源收费的,但HDFS是一套复杂、开源、成熟的设计(QJM+ZKFC+主备)机制,因此HDFS在生产环境方面是占优势的。
但是MooseFS在免费开源上也提供了MetaLogger方案,至少能让元数据实时地同步到备用服务器,主节点出现故障,至少运维手动启动备选节点不用考虑元数据的维护问题。
二、从易用性上看
MooseFS具有与GlusterFS一样出色的本地目录融合机制,原理上都是基于Linux/BSD系统的内核机制FUSE(用户空间文件系统),让分布式文件系统目录可以Mount成普通文件目录来使用,这样就保证程序无关了。
但是HDFS主要利用JAVA接口或者HDFS命令行来访问,对于程序接口是友好的,但是对于非程序员使用就带来了很多不方便。
三、从大数据生态角度考虑
MooseFS更像一个工具,而HDFS则是一个数据底座。
HDFS的存储格式与物理存储是策略与机制分离设计。
也就是说存储后都会转换成统一的128M Block(块),但是上层调用端可以设计出各自不同的格式,例如Avro、Parquet、CSV等,这就非常有利于上层的数据解析设计。
常见的分布式数据库HBase就是设计了自己的HFile格式,让不同的数据库节点进行存储、索引和查询。
HFile作为一种HDFS的格式策略,底层依然是HDFS的Block统一存储、副本复制和块分布。
尽管MooseFS也具备差不多的设计思想,不过它 并不像Hadoop生态那样,在HDFS之上有Hive、HBase这样的重量级数据系统。
而且MooseFS基于C++开发,并没有像HDFS那样更容易提供Java接口的支持和扩展,也就缺少了很大的Java社区支持。
四、对比总结
因此MooseFS比较适合作为文件资料的仓库。更倾向于普通意义上的文件存储,只不过文件也作为数据块,存在不同的分布式节点位置,
HDFS的应用设计思路继承自Google GFS,主要是针对应用系统的海量碎片数据的归拢聚合、存储,基于Java设计实现,更适合作为企业级数据底座,也更适合作为数据仓库的基础设施。