我们正在处理美国的 2400 万家企业。我们现在在 HDFS 和 Hadoop 上使用 Pig。我们希望加快临时查询的调试速度。例如,现在从我们的 5 个服务器集群中的 2400 万个业务中提取一个业务需要几分钟。
Hbase 似乎是我发现的唯一可以完成这项工作的系统。蜂巢似乎没有这样做。
这是我们当前在 HDFS 中存储为制表符分隔的平面文本文件的架构。
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 不支持重复键。正如您在上面的示例中看到的,每个企业可以有多个电话号码、标题、评论等。
所以我的问题
- 在 Hadoop 中加速这样的临时查询的想法是什么?
- 在 HBase 中存储字符串数组的最佳实践是什么?
- 如何用 HBase 中的重复键对这个键值对进行建模?
阅读评论中的问题后编辑: 最常见的临时查询是返回具有给定 ID 的企业的所有信息。还有其他很好的即席查询支持,例如返回给定邮政编码和标题的企业。
使用 RDBMS 支持 ad hoc 查询的评论中的建议是一个很好的建议。但我希望有一个系统来支持流式查询和即席查询。我们的临时查询主要用于调试。如果我们在数据中发现错误,我们仍然需要验证它是否是我们的 Hadoop 数据中的错误,因此查询 RDBMS 是不够的。
最常见的流式处理查询是将两个大数据集加入并匹配两个数据集中的业务。流处理查询支持要求比 ad hoc 查询多得多,因此我们选择 Hadoop。我们的临时查询主要用于调试。