Hadoop-Hive-HBase对Web分析的建议

时间:2012-02-06 21:12:07

标签: java hadoop analytics hbase hive

我工作的团队很幸运,管理层认识到需要提高我们的技能和学习新技术。因此,每当我们在主要项目之间有一点停机时,我们都会鼓励我们利用这段时间来扩展我们的思想并学习新的东西。我们经常以团队的形式处理大型研究项目,以便每个人都能从知识中获益。例如,我们构建了一个符合规范的Kerberos身份验证服务器,以熟悉协议的细节。我们编写了自己的网络服务器,以了解网络应用程序的有效设计策略。

最近,我们对Map-Reduce非常好奇,特别是Hadoop和各种支持组件(HBase,HDFS,Pig,Hive等)。要了解更多信息,我们希望编写一个网络分析服务。它将使用Javascript页面标记来收集指标,使用Hadoop和某些来通过Web界面提供分析和报告。

架构的非Hadoop方面很容易。 Java servlet将从Javascript标记中解析参数(很简单 - 我们是一个Java商店)。然后,servlet将发送一条JMS消息进行异步处理(再次,简单)。

我的问题是......下一步是什么?我们已经研究过像Hive这样的东西,它听起来非常适合查询我们正在寻找的各种指标的数据存储区。但是,这是高延迟。我们很幸运能够将其放到一个每月点击几百万的网站上。我们真的希望使用网络界面为我们的分析工具获得相对快速的指标。延迟不是我们的朋友。那么,实现这一目标的最佳方法是什么?将查询作为预定作业运行,然后以较低的延迟(PostgreSQL等)将结果存储在某处并从那里检索它们?如果是这种情况,那么侦听JMS消息的组件应该在哪里存储数据? Hive可以直接从HBase获取数据吗?我们应该将它存储在某个地方的HDFS中并在Hive中阅读吗?

就像我说的,我们是一支非常技术性的团队,喜欢学习新技术。但是,这与我们之前学到的任何东西都不同,所以我们想要了解这里的“最佳实践”。您可以给予任何建议或意见,非常感谢!

编辑:我想我会补充说明我正在寻找的内容。我正在寻求有关此类解决方案的架构和设计方面的建议。我们将在每月获得数百万次网页浏览量的网站上收集20-30个不同的指标。这将是大量数据,我们希望能够尽可能接近实时地获取指标。我正在寻找关于这种解决方案架构的最佳实践和建议,因为我不希望我们自己提出一些非常糟糕的东西会让我们认为我们是“Hadoop专家”只是因为它有效。

1 个答案:

答案 0 :(得分:2)

正如您所提到的,Hive具有较高的查询延迟。它可以指向HBase(参见https://cwiki.apache.org/Hive/hbaseintegration.html),但是集成导致HBase具有强制进入大多数矩形,类似关系的模式的表,这对于HBase来说不是最佳的。另外,这样做的开销非常昂贵 - 在我的集群上,针对hbase的hive查询至少比普通HDFS文件慢一个数量级。

一个好的策略是将原始指标存储在HBase或普通HDFS上(如果这些指标来自日志文件,可能希望查看Flume)并运行定期MapReduce作业(甚至每5分钟)以创建预聚合结果,您可以存储在可以通过Hive查询的普通矩形文件中。当你只是在阅读文件而Hive不需要做任何花哨的事情(例如排序,加入等)时,Hive实际上是相当低的延迟 - 它不会运行MapReduce,它只是将文件的内容流式传输给你

最后,另一个选择是使用Storm(在Hadoop上运行)来实时收集和分析数据,并存储上述查询结果,或者将它们存储在HBase中以便通过一个直接查询HBase的自定义用户界面。