我想知道什么是最好的大数据解决方案?
目前我把范围缩小到hbase和hive。
用例是我们有数百TB的数据和数百个不同的文件。数据是实时的,并且随时更新。我们需要提供最有效的报告方式。我们有几十个不同的报告页,每个报告由不同类型的数字和图形数据组成。例如:
显示在过去一小时内登录到系统的所有用户,他们的来源是我们。
显示从最多玩游戏到最少玩游戏的图表。
从系统中的所有用户中显示付费用户与非付费用户的百分比。
对于给定的用户,显示其整个历史记录。他打了多少场比赛?他玩什么游戏。他每场比赛的得分是多少?
在我看来,有3种解决方案:
将所有数据存储在hadoop中,并在hive中执行查询。这可能管用,但我不确定性能如何。当数据为100 tb时,它将如何执行?另外,hadoop作为主数据库可能不是最好的解决方案,因为更新操作很难实现,对吧?
将所有数据存储在hbase中,并使用phoenix进行查询。这个解决方案不错,但hbase是一个键/值存储。如果我加入了一个没有索引的密钥,那么hbase将进行一次完整的扫描,这可能比hive还要糟糕。我可以把索引列,但这将需要把索引几乎每列这是我认为不是最好的建议。
将所有数据存储在hbase中,并在hive中执行查询,hive使用it property桥与hbase通信。
3条答案
按热度按时间ca1c2owp1#
对您建议的解决方案的相应答复(根据我个人遇到类似问题的经验):
1) 您不应该将配置单元视为常规RDM,因为它最适合于不可变的数据。所以,如果你想用hive做更新的话,这就像杀死你的盒子一样。
2) 正如paul所建议的,在评论中,您可以使用phoenix创建索引,但是我们尝试了它,它对于您所建议的数据量来说会非常慢(我们看到hbase中有~100gb的数据量)
3) 带有hbase的hive比phoenix慢(我们尝试过,phoenix为我们工作得更快)
如果您要进行更新,那么hbase是您的最佳选择,您可以使用phoenix进行更新。但是,如果您可以使用hbase进行更新,将数据转储到parquet中,然后使用hive进行查询,这将非常快。
zd287kbt2#
您可以使用lambda结构,即hbase以及一些流计算工具,如spark streaming。您将数据存储在hbase中,当有新数据到来时,更新原始数据和按流计算的报表。创建新报表时,您可以从hbase的完整扫描中生成该报表,然后通过stream compute更新该报表。还可以使用map reduce作业定期调整流计算结果。
cfh9epnr3#
第一种解决方案(将所有数据存储在hadoop中,并在hive中执行查询)不允许更新数据。您只需插入到配置单元表即可。普通的Hive很慢,对我来说,最好用Hive驼或 Impala 。我用过 Impala ,它显示出相当好的性能,但它可以有效地,每次只有一个查询。当然,在impala中更新行也是不可能的。
第三种解决方案将获得非常慢的连接性能。我用hbase试过 Impala ,join的速度非常慢。
关于处理impala的数据大小和簇大小比率,https://www.cloudera.com/documentation/enterprise/5-8-x/topics/impala_cluster_sizing.html
如果需要行更新,可以尝试apachekudu。在这里您可以找到kudu与impala的集成指南:https://www.cloudera.com/documentation/enterprise/5-11-x/topics/impala_kudu.html