关于hbase和hive的选择
hbase是一个nosql数据库,它能提供实时写入和实时查询,但是查询的灵活性偏低,必须按其rowkey进行查询,不带rokwkey的查询方式效率极其低下 。hive是一个数据仓库,它的主要作用是统计分析,当然也可以做查询,响应速度非常慢。那么我们到底是用hbase,还是用hive,还是hive over hbase呢?假如我们的数据来源是kafka:
场景一:如果我们需要提供有限的实时查询,且通过rowkey能够满足,也需要提供灵活的统计分析,那么我们需要hbase,也需要hive,那么我们如何同步数据到hive中,一种是在hive中建立hbase的关联表,直接同步hbase的数据,hive同步hbase数据实际上还是通过hbase的scan进行的,但如果无法通过rowkey进行同步,这将是一个非常恼火的事情,不仅会大大影响hbase的性能,而且效率底下。另外一种是通过flume往hive(hdfs)写,这个时候hive统计时直接读取hdfs数据,不需要经过hbase,效率更高。
场景二:如果不需要提供有限实时查询,只需要统计分析,那么我们只需要通过flume往hive(hdfs)写。
场景三:如果我们需要多维度查询,也需要统计分析,那么我们可能需要选择elasticsearch来做数据写入,也需要通过flume往hive(hdfs)写。
一旦我们选择hdfs和elasticsearch(或者hbase),那么我们为了节约成本,都建议elasticsearch(或者hbase)只存储热点数据(即最近几个月或者1年的数据),而hdfs存储永久数据,另外hive的效率相对较低,建议用spark取代hive进行统计分析。