【问题标题】:Hadoop-Hive-HBase Advice for Web Analytics针对 Web 分析的 Hadoop-Hive-HBase 建议
【发布时间】:2012-02-28 08:29:56
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 这句话太多了。我不清楚您具体要问什么;原样问题可能过于宽泛,无法很好地融入 SO 格式。你试图支持什么样的指标?为什么不直接开始在 HBase 中收集数据并进行实验?
  • 指标本身并不重要。我们将收集标准浏览器类型、IP 地址等。这个问题更多的是关于应该使用的架构。我们正在寻找最佳实践,这样我们就不会想出一些可行的愚蠢方法并认为我们是 Hadoop 天才。

标签: java hadoop analytics hbase hive


【解决方案1】:

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

【讨论】:

  • 我已经阅读了几篇关于使用 Cassandra 支持 Hadoop/Hive 的文章。您认为这会产生更好的性能还是解决您提出的其他 HBase 问题?只是想很好地了解我们的潜在选择是什么。
  • Cassandra 和 HBase 在这方面大致相当——它们不是“矩形”数据存储,因此它们不适合 Hive 或 ODBC 之类的东西,它们希望数据是好的和矩形的并且“关系”。使用 Cassandra 或 HBase 之类的东西的主要优势是 1)您可以通过 API 获得低延迟数据访问,以及 2)您无需担心管理自己的 HDFS I/O - 您只需编写通过他们的公共 API,他们处理 I/O。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 2015-03-05
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多