Hive或HBase用于报告?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive或HBase用于报告?相关的知识,希望对你有一定的参考价值。

我想了解什么是最适合报告的大数据解决方案?

目前我把它缩小到HBase和Hive。

用例是我们有数百TB的数据,包含数百个不同的文件。数据是实时的,并且一直在更新。我们需要提供最有效的报告方式。我们有几十个不同的报告页面,其中每个报告包含不同类型的数字和图形数据。例如:

  1. 显示过去一小时内登录系统的所有用户,其来源为美国。
  2. 显示最少玩游戏的图表。
  3. 系统中的所有用户都显示付费与非付费用户的百分比。
  4. 对于给定用户,显示他的整个历史记录。他打了几场比赛?他参加过什么样的比赛。他在每场比赛中的得分是多少?

我看到它的方式,有3个解决方案:

  1. 将所有数据存储在Hadoop中并在Hive中执行查询。这可能有效,但我不确定性能。当数据为100 TB时,它将如何执行?此外,将Hadoop作为主要数据库可能不是最佳解决方案,因为更新操作很难实现,对吧?
  2. 将所有数据存储在HBase中并使用Phoenix进行查询。这个解决方案很不错,但HBase是一个键/值存储。如果我加入未编入索引的密钥,那么HBase将进行全扫描,这可能比Hive更糟糕。我可以在列上放置索引,但这需要在几乎每列上放一个索引,我认为这不是最好的建议。
  3. 将所有数据存储在HBase中,并使用它的propriety bridge在Hive中进行与HBase通信的查询。
答案

针对您建议的解决方案的相应回复(基于我在类似问题上的个人经验):

1)你不应该认为Hive as a regular RDMS最适合不可变数据。因此,如果您想使用Hive进行更新,就像杀死您的盒子一样。

2)正如Paul所建议的那样,在评论中你可以使用Phoenix来创建索引,但是我们尝试了它,并且你建议的数据量会非常慢(我们看到Hbase的速度很慢,大约有100 GB的数据。)

3)使用Hbase的Hive比Phoenix慢(我们尝试了它,Phoenix为我们工作得更快)

如果您要进行更新,那么Hbase是您拥有的最佳选择,您可以使用Phoenix。但是,如果您可以使用Hbase进行更新,请将数据转储到Parquet中,然后使用Hive进行查询,这将非常快。

另一答案

您可以使用lambda结构,即hbase以及一些流计算工具,如spark streaming。您将数据存储在hbase中,当有新数据到来时,通过stream-compute更新原始数据和报告。创建新报告时,您可以从hbase的全扫描生成报告,之后,报告可以通过stream-compute更新。您还可以使用map-reduce作业定期调整流计算结果。

另一答案
  1. 第一个解决方案(将所有数据存储在Hadoop中并在Hive中执行查询)将不允许您更新数据。您只需插入配置单元表即可。简单的蜂巢很慢,对我来说最好使用Hive LLAP或Impala。我使用过Impala,它表现出相当不错的性能,但它可以有效,每次只有一个查询。当然,Impala中的更新行也是不可能的。
  2. 第三种解决方案将获得非常慢的连接性能。我用HBase尝试过Impala,加入的速度非常慢。
  3. 关于处理Impala,https://www.cloudera.com/documentation/enterprise/5-8-x/topics/impala_cluster_sizing.html的数据大小和簇大小比率

如果需要行更新,可以尝试Apache Kudu。在这里,您可以找到Kudu与Impala的集成指南:https://www.cloudera.com/documentation/enterprise/5-11-x/topics/impala_kudu.html

以上是关于Hive或HBase用于报告?的主要内容,如果未能解决你的问题,请参考以下文章

OLAP CUBE 可以在 HBase 中完成吗?

Cube.js 作为报告工具

Cognos 报告 Hive 数据源很慢?

HBase基准性能测试报告分享与讨论

Hadoop Hive 慢查询

Apache Pig 与 Hive [关闭]