【问题标题】:Does HBase and Hive need to be co-located on the same machine?HBase 和 Hive 是否需要位于同一台机器上?
【发布时间】:2017-03-01 00:51:16
【问题描述】:

我们目前正在构建一个新的 hbase 集群。架构如下:

现在我想添加一个新的 hive 集群。但我不知道是否应该在与 hbase 相同的 hadoop 集群上构建 hive。或者我应该为 hive 构建一个新的 hadoop 集群?

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

【问题讨论】:

    标签: hadoop hive hbase


    【解决方案1】:

    让我们首先定义什么是 HBase 和 Hive 之间的流量。在每个 Hive 查询中,您将:

    • 使用 Hive 直接查询 HBase
    • 使用 Hive 执行 Warehouse 表与 HBase 表的 Join 请求
    • 使用 Hive 执行外部表与 HBase 表的 Join 请求

    如果您深入了解所有这些组件的架构,您会注意到 Hive Warehouse 和 Hbase 都在后台使用 HDFS。同样可以考虑位于 HDFS 中的外部表。因此,如果您将 Hive 部署到当前架构中,则内部数据将物理存储在与 HBase 相同的位置 - 在数据机架的 DataNode 中。这意味着对于 YARN 通过 Hive 查询安排的任务,您的流量将是最佳的。如果您使用位于另一个数据中心的一组单独的 DataNode 创建另一个 Rack for hive Warehouse,这将对您的性能产​​生负面影响。

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

    【讨论】:

    • 嗨,亚历克斯。我已阅读文档cwiki.apache.org/confluence/display/Hive/HBaseIntegration。而且我知道如果我在同一个数据节点上使用 hbase 建立一个 hive 集群,我可以将外部表映射到现有的 hbase 表。因此,如果我理解正确,hive 不必为该 hbase 表存储数据副本,因为它可以直接读取它。而现在的问题是,这会对hbase的性能产生巨大的影响吗,因为SQL可能会扫描hbase表中的太多行,或者SQL执行是一个复杂的map-reduce任务?
    • @Alexis 这实际上是我们在公司中使用它的方式。 Hive 将执行将 SQL 查询转换为 HBase 扫描程序的角色,因此从技术上讲,如果您直接通过 HBase 执行此步骤或允许 Hive 执行此步骤,则不会有任何区别。如果您查看 HBaseStorageHandler 类,您会发现它在后台使用标准 HBase java 客户端
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 2020-12-20
    • 2010-10-06
    • 1970-01-01
    相关资源
    最近更新 更多