都是用于大数据存储的

    Kudu的底层数据文件的存储,未采用HDFS这样的较高抽象层次的分布式文件系统,而是自行开发了一套可基于Table/Tablet/Replica视图级别的底层存储系统。

    这里再总结一下Kudu与HBase的一些大的区别点

    1. Kudu的数据分区方式相对多样化,而HBase较单一。

    2. Kudu的Tablet自身具备多副本机制,而HBase的Region依赖于底层HDFS的多副本机制。在HBase 1.0版本中已经有了Region Replica(HBASE-10070)特性,同时,社区还有Facebook贡献的HydraBase的方案,但均尚不成熟。

    3. Kudu底层不依赖于其它的分布式文件系统。而HBase依赖于HDFS。

    4. Kudu的底层文件格式采用了类似于Parquet的列式存储格式,而HBase的底层HFile文件却是按行来组织的。

    5. Kudu关于底层的Flush任务以及Compaction任务,能够结合忙时或者闲时进行自动的调整。HBase还尚不具备这种调度能力。

    6. Kudu的Compaction无Minor/Major的区分,限制每一次Compaction的IO总量在128MB大小,因此,并不存在长久执行的Compaction任务。 Compaction是按需进行的,例如,如果所有的写入都是顺序写入,则将不会触发Compaction。

    7. Kudu的设计,既兼顾了分析型的查询能力,又兼顾了随机读写能力,这样,势必也会付出一些代价。 例如,写入数据时关于Primary Key唯一性的限制,就要求写入前要检查对应的Primary Key是否已经存在,这样势必会增大写入的时延。而底层尽管采用了类似于Parquet的列式文件设计,但与HBase类似的冗长的读取路径,也会对分析性的查询带来一些影响。另外,这种设计在整行读取时,也会付出较高的代价。