Java 用于Web分析的Hadoop Hive HBase建议

Java 用于Web分析的Hadoop Hive HBase建议,java,hadoop,analytics,hbase,hive,Java,Hadoop,Analytics,Hbase,Hive,我所在的团队很幸运,他们的管理层认识到提高技能和学习新技术的必要性。因此,每当我们在重大项目之间有一点停工时间,我们都会被鼓励利用这段时间来扩展我们的思维,学习新的东西。我们经常作为一个团队处理一个大型研究项目,这样每个人都能从知识中受益。例如,我们构建了一个符合规范的Kerberos身份验证服务器,以熟悉协议的细节。我们编写了自己的Web服务器,以了解网络应用程序的有效设计策略 最近,我们对MapReduce非常好奇,特别是Hadoop和各种支持组件(HBase、HDFS、Pig、Hive等)

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

最近,我们对MapReduce非常好奇,特别是Hadoop和各种支持组件(HBase、HDFS、Pig、Hive等)。为了进一步了解它,我们想编写一个web分析服务。它将使用Javascript页面标记来收集指标,并使用Hadoop等工具通过web界面提供分析和报告

该体系结构的非Hadoop方面很简单。Java servlet将解析Javascript标记中的参数(非常简单——我们是Java商店)。然后servlet将发送一条JMS消息进行异步处理(同样,很简单)

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

正如我所说,我们是一个技术性很强的团队,喜欢学习新技术。不过,这与我们以前学到的任何东西都大不相同,所以我们想了解一下这里的“最佳实践”是什么。非常感谢您提供的任何建议或意见


编辑:我想我应该澄清一下我在寻找什么。我正在为这样的解决方案寻求架构和设计方面的建议。我们将在一个每月获得数百万页面浏览量的网站上收集20-30个不同的指标。这将是大量的数据,我们希望能够尽可能接近实时地获取指标。我正在寻找关于这种解决方案体系结构的最佳实践和建议,因为我不希望我们自己提出一些非常糟糕的东西,这会让我们认为我们是“Hadoop专家”,因为它可以工作。

正如您提到的,Hive的查询延迟很高。可以将其指向HBase(请参阅),但是集成会导致HBase中的表被强制放入一个基本上是矩形的、类似关系的模式中,这对于HBase来说不是最优的。另外,这样做的开销非常昂贵——在我的集群上,针对hbase的配置单元查询至少比针对普通HDFS文件的查询慢一个数量级

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


最后,另一种选择是使用类似(在Hadoop上运行)的工具实时收集和分析数据,并存储上述查询结果,或将其存储在HBase中,以便通过直接查询HBase的自定义用户界面显示。

这是一个很多的词。我不清楚你具体在问什么;目前的问题可能过于宽泛,无法很好地符合SO格式。您试图支持哪些类型的指标?为什么不开始在HBase中收集数据并进行实验呢?这些指标本身并不重要。我们将收集标准浏览器类型、IP地址等。这个问题更多的是关于应该使用的体系结构。我们正在寻找最佳实践,这样我们就不会想出一些愚蠢的办法,认为我们是Hadoop天才。我读了几篇关于用Cassandra支持Hadoop/Hive的文章。您认为这会产生更好的性能还是解决您提出的其他HBase问题?卡桑德拉和HBase在这方面大致相当——它们不是“矩形”数据存储,因此它们不适用于像Hive或ODBC这样的东西,后者期望数据是好的、矩形的和“关系型的”。使用Cassandra或HBase的主要优势是:1)通过API获得低延迟数据访问,2)无需担心管理自己的HDFS I/O—您只需通过它们的公共API编写,它们就能处理I/O。