首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hadoop的Hadoop查询

Hadoop的Hadoop查询
EN

Stack Overflow用户
提问于 2012-10-01 21:36:39
回答 3查看 3.3K关注 0票数 1

我们在美国有2400万家企业。我们现在正在HDFS上使用Pig,一个Hadoop。我们希望加快对调试的临时查询。例如,现在grep只需几分钟就能完成我们5个服务器集群中2400万个业务中的一个业务。

Hbase似乎是我发现的唯一能胜任这项工作的系统。蜂巢似乎不起作用。

下面是我们的模式,目前存储为HDFS中以制表符分隔的平面文本文件。

代码语言:javascript
复制
place_id name value
1  Title    Bamboo Garden
1  Title    Bamboo Garden Restaurant
1  Phone 425-555-555
1  Phone 425-444-444
1  Address 123 Bellevue Way
2  Title    Burger King
2  Phone 425-333-3333

为了灵活地组装附加数据和字段,我们选择了这个名称值对。如果我们想合并两个数据集,我们可以很容易地“禁止”它们。此外,添加更多的新字段也非常容易。这个模式是很久以前设计的,改变它的可能性很小。

我们发现很难在Hbase中建模,因为Hbase不支持重复键。正如您在上面的例子中所看到的,每个企业都可以有多个电话号码、标题、评论等等。

所以我的问题

  1. 在Hadoop中加快这样的临时查询的想法是什么?
  2. 在HBase中存储字符串数组的最佳实践是什么?
  3. 如何在HBase中使用重复键对对密钥进行建模?

在阅读了注释中的问题后编辑:最常见的即席查询是返回具有给定id的企业的所有信息。还有其他一些特别的查询支持,例如返回给定的邮政编码和标题的业务。

建议使用RDBMS支持即席查询是一个很好的建议。但我希望有一个系统来支持流媒体和临时查询。我们的特殊查询主要用于调试。如果我们在我们的数据中发现了一个bug,我们仍然需要验证它是否是Hadoop数据中的一个bug,所以查询RDBMS是不够的。

大多数常见的流处理查询是将两个大数据集连接起来,并在两个数据集中匹配业务。与自组织查询相比,流处理查询的支持需求要大得多,因此我们选择Hadoop。我们的临时查询主要用于调试。

EN

回答 3

Stack Overflow用户

发布于 2012-10-02 01:59:24

,在Hadoop中,加快这种临时查询的方法是什么?

我觉得你不应该尝试。Hadoop用于批处理分析,而不是获取记录。

在HBase中存储字符串数组的最佳实践是什么?

有几种方法可以做到这一点。如果没有很多更新,请以序列化方式将字符串数组存储在一个字符串中。就像手机里的425-555-5555^425-444-444一样。在Pig和Hive中,您可以使用一些简单的字符串拆分实用程序将其转换回数组。

如果你经常添加数字,那么你就可以得到一个叫做"phone1""phone[2]"等的单元格,这使得猪和蜂巢的处理变得相当困难。

如何在HBase?中用重复键对键值对建模

基本上,您在schema中实现的是一个双重嵌套映射,这正是HBase。因此,对数据进行建模应该非常容易。

你需要在这里复制钥匙。让企业的名称成为关键,因为这似乎是单一的。不过,你确实想找出一种使其独一无二的方法,因为我认为“汉堡王”可能存在于不止一个地方。我建议的一件事是,让企业的名称成为关键的一部分,但增加一些东西,使其独特。

例如:"Bambo Garden^1""Burger King^2""Bamboo Garden^123 Bellvue Way"

在这些钥匙下面,有电话号码,地址,还有其他的东西。

您仍然可以像以前一样添加列,因为您不再指定模式了。您的所有旧代码都将仍然工作,并且在出现新列时会忽略它们。

票数 2
EN

Stack Overflow用户

发布于 2012-10-03 12:33:45

猪/蜂巢主要用于批处理,而不是用于实时临时查询。

阿帕奇钻已经被踢开了,这是谷歌德雷斯尔的一个实现,用于交互式临时查询。可能要过一段时间才能从Apache演练中实现一些坚实的东西。在此之前,您可以使用Google BigQuery云服务来交互地分析海量数据集--最多可达数十亿行。

Apache演练的目标之一是将其与数据源(如HBase和HDFS )结合使用。因此,应该可以将Apache用作HDFS中数据的查询引擎。

票数 2
EN

Stack Overflow用户

发布于 2012-10-02 04:47:53

正如Robert在一条评论中提到的,您最好的选择可能是一个常规的RDBMS。

关于临时查询和存储数组的方法,您希望做什么查询(这极大地影响了您在HBase中建模的方式)。

关于你的第三个问题。存储它的最简单方法(这可能不是我前面提到的最好的方法)是将"name“变成一个限定符(”列“)。如果您有多个值(例如电话号码),您可以只使用多个限定符(假设列族为f,则为f: phone 1,f:phone 2.)并且您可以通过前缀(所有以电话开头的列)获取列。

阿农

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12681486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档