Hive或HBase用于报告?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive或HBase用于报告?相关的知识,希望对你有一定的参考价值。
我想了解什么是最适合报告的大数据解决方案?
目前我把它缩小到HBase和Hive。
用例是我们有数百TB的数据,包含数百个不同的文件。数据是实时的,并且一直在更新。我们需要提供最有效的报告方式。我们有几十个不同的报告页面,其中每个报告包含不同类型的数字和图形数据。例如:
- 显示过去一小时内登录系统的所有用户,其来源为美国。
- 显示最少玩游戏的图表。
- 系统中的所有用户都显示付费与非付费用户的百分比。
- 对于给定用户,显示他的整个历史记录。他打了几场比赛?他参加过什么样的比赛。他在每场比赛中的得分是多少?
我看到它的方式,有3个解决方案:
- 将所有数据存储在Hadoop中并在Hive中执行查询。这可能有效,但我不确定性能。当数据为100 TB时,它将如何执行?此外,将Hadoop作为主要数据库可能不是最佳解决方案,因为更新操作很难实现,对吧?
- 将所有数据存储在HBase中并使用Phoenix进行查询。这个解决方案很不错,但HBase是一个键/值存储。如果我加入未编入索引的密钥,那么HBase将进行全扫描,这可能比Hive更糟糕。我可以在列上放置索引,但这需要在几乎每列上放一个索引,我认为这不是最好的建议。
- 将所有数据存储在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作业定期调整流计算结果。
- 第一个解决方案(将所有数据存储在Hadoop中并在Hive中执行查询)将不允许您更新数据。您只需插入配置单元表即可。简单的蜂巢很慢,对我来说最好使用Hive LLAP或Impala。我使用过Impala,它表现出相当不错的性能,但它可以有效,每次只有一个查询。当然,Impala中的更新行也是不可能的。
- 第三种解决方案将获得非常慢的连接性能。我用HBase尝试过Impala,加入的速度非常慢。
- 关于处理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用于报告?的主要内容,如果未能解决你的问题,请参考以下文章