我想编写一个能够生成报告并通过监控来自大型生产系统的数据进行交互式数据分析(类似OLAP)的应用程序。 (我知道,未来会有一些有问题的权衡决定,但让我们暂时把它们放在一边。)
我确定了基本技术堆栈的以下可能性:
根据我的研究,我倾向于认为Hadoop / HBase / Hive是最常见的组合。但这只是基于一些论坛问题和产品介绍 其他人可以分享他对这个问题的一般看法吗? 或者更具体地回答以下问题:
答案 0 :(得分:3)
IMHO,
1-考虑到所有最新进展,根据您的读/写需求决定是否使用HBase或Cassandra有点困难。您可以调整这些工具以适应您的读/写要求。在做出任何决定时,您应该考虑更多的事情。
2-此时您似乎不需要数据库。您可以将存储在HDFS中的数据映射到Hive表。然后在需要长时间运行批处理时运行Hive查询。如果您打算对数据的某些部分执行实时即席查询,则可以在相同的Hive表上使用Cloudera Impala(当real-timeness
很重要时)。 Impala使用相同的Hive元数据。所以你不必担心。
3-如果您打算在Hadoop平台上工作,那么HDFS + Hive + HBase + Pig会很好。我不是说Cassandra很糟糕,但是Hbase的开发是为了与Hadoop一起使用。
4-那里有许多“酷”的东西,但你最好保持低数字。更多工具意味着更多配置,更多设置和更多管理(更令人头痛)。因此,首先只考虑那些真正需要的东西,并且只有在您认为确实需要时才添加特定工具,或者它是否会给您一些额外的优势。但是你可能想看看Impala, Storm, Flume, Spark/shark
等工具。
AFAIK,HBase被构建为在Hadoop集群之上使用。毫无疑问它会占用一些内存,但这不应该是你的应用程序的瓶颈。你只需要正确地调整一切。但只有在您需要对数据进行随机实时读/写访问时才能实现它。
答案 1 :(得分:2)
如果你在与Hadoop相同的集群上运行HBase,你真的会减少可用于MapReduce作业的内存。对于OLAP系统,您并不需要HBase的随机读取/更新功能。您可以使用Flume或手动将数据加载到Hadoop集群中。设备监视数据有助于按时间划分,例如按日历日期划分。将数据加载到可以映射到分区Hive表的目录结构后,可以使用HiveQL进行查询。对于最棘手的分析,您可以使用Java编写MapReduce作业或使用Pig。
问题是答案不会立即发生。这对于广告分析是可以的,但如果您尝试查看一些常用的预定指标,则可能会令人沮丧。在后一种情况下,您应该考虑预先计算此类度量标准并将结果加载到内存缓存中,甚至是关系数据库中。我已经看到在HBase中缓存了这些经常使用的结果,我只是为了这个目的而无法在集群上浪费一半的可用内存。