java - 用于 Web 分析的 Hadoop-Hive-HBase 建议

标签 java hadoop analytics hbase hive

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

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

架构的非 Hadoop 端很简单。 Java servlet 将解析来自 Javascript 标记的参数(很简单——我们是一家 Java 商店)。然后,servlet 将发送一条 JMS 消息以进行异步处理(同样,很简单)。

我的问题是……下一步是什么?我们对 Hive 之类的东西进行了一些研究,它听起来非常适合在数据存储中查询我们正在寻找的各种指标。但是,它的延迟很高。我们很幸运能够将它放到一个每月点击数百万次的网站上。我们真的很想使用我们的分析工具的 Web 界面获得相对快速的指标。延迟不是我们的 friend 。那么,实现这一目标的最佳方法是什么?是否将查询作为计划作业运行,然后将结果存储在延迟较低的地方(PostgreSQL 等)并从那里检索它们?如果是这样,监听 JMS 消息的组件应将数据存储在何处? Hive 可以直接从 HBase 获取数据吗?我们是否应该将其存储在某个地方的 HDFS 中并在 Hive 中读取?

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

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

最佳答案

正如您所提到的,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的自定义用户界面显示。

关于java - 用于 Web 分析的 Hadoop-Hive-HBase 建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9167331/

相关文章:

java - 我不断收到 "OAuth consumer key/secret combination not supplied"错误消息

java - 在 JSP 中生成 liferay-ui 元素

google-analytics - 生成Google Analytics(分析)和Omniture的链接

java - 如何从亚马逊 EMR HDFS 远程读取(或任何其他 hadoop 远程服务器)

javascript - Adobe DTM 中的过滤器链接跟踪问题

hadoop - Spring XD 是正确的工具选择吗?

java - 自定义 RecyclerAdapter 和 startActivityForResult

java - JSP include,前后导入代码

java - 未安装 Hadoop 的 Spark ML

hadoop - 如何计算 Hive 中两个数组的交集和并集?