2017-02-28 121 views
0

我们目前正在构建一个新的hbase集群。该架构如下:HBase和Hive是否需要共置于同一台机器上?

hbase architecture

现在我想添加一个新的蜂巢星团。但我不知道是否应该在hbase的hadoop集群上构建配置单元。或者我应该为蜂巢构建一个新的hadoop群集?

如果我为hive构建一个新的hadoop集群,当我执行SQL来聚合hbase的数据时,hive和hbase之间的流量是否会太大(AFAIK,hive需要将hbase上的数据导入到它自己的hdfs存储) ?

回答

3

首先定义HBase和Hive之间的流量。在每一个蜂巢查询,你将:

  • 使用蜂巢查询HBase的直接
  • 使用蜂巢执行加入与HBase的表仓库表的请求
  • 使用蜂巢执行加入与HBase的表外部表的请求

如果深入了解所有这些组件的体系结构,您会发现Hive Warehouse和Hbase都在场景后面使用HDFS。对于位于HDFS中的外部表也可以考虑同样的情况。因此,如果您将Hive部署到当前体系结构中,则内部数据将实际存储在与HBase相同的位置 - 在您的数据机架的DataNode中。这意味着您的流量对于YARN通过Hive查询计划的任务来说是最优的。如果您为另一个数据中心内的一组独立DataNode创建另一个配置单元仓库,这会对您的性能产​​生负面影响。

因此,如果您有足够的容量将数据保存在单个机架中以满足您的所有服务需求,请采用这种方式。您可以在参考链接中阅读有关HiveHBase基础架构的更多信息。

+0

嗨Alex。我已阅读文档https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration。我知道如果我在同一datanode上设置hbase的hive集群,我可以将外部表映射到现有的hbase表。因此,如果我理解正确,配置单元不必为该hbase表存储数据副本,因为它可以直接读取它。现在的问题是,这是否会对hbase的性能产生巨大影响,因为SQL可能会扫描hbase表中的太多行,或者SQL执行是一个复杂的map-reduce任务? – Alexis

+0

@Alexis这实际上就是我们在公司使用它的方式。 Hive将执行SQL查询的翻译员角色,因此从技术角度讲,如果您直接通过HBase执行此步骤或允许Hive执行此操作,则不会有任何区别。如果你看看HBaseStorageHandler类,你会发现它使用标准的HBase java客户端背后的场景 – Alex

+0

得到它谢谢@Alex – Alexis

相关问题