【问题标题】:How to increase scan speed in Hbase如何提高 Hbase 的扫描速度
【发布时间】:2015-11-25 09:00:35
【问题描述】:

我是 Apache Hbase 的新手,我正在使用 hbase-0.98.13,并且我创建了一个包含列族 sample_family 的表示例。我已经将 pig 脚本的输出加载到 hbase 表中。当我尝试根据列族中的一列扫描表时,需要超过 2 分钟。

这里是查询

scan 'sample', {FILTER=>"SingleColumnValueFilter('sample_family','id',=,'binary:1000')"}

谁能告诉我如何在一两秒内完成这个过程?

是否需要对此进行任何配置更改?任何人都可以帮助我吗?

【问题讨论】:

  • 在 HBase 单元格中查询值并不是 HBase 引擎中性能最高的部分。正如@Matik 所说,您应该正确设计行键以实现最大的 HBase 性能。
  • @maxteneff。我怀疑行键值是否必须是唯一的?

标签: apache hadoop hbase


【解决方案1】:

在 HBase 中快速搜索没有灵丹妙药。 您的示例中的扫描必须遍历表中的所有行,这就是为什么在大型表上需要大量时间的原因。 HBase 中没有辅助索引来帮助改进特定列的搜索。

提高扫描性能的最有效方法是正确设计行键。 HBase 在内部保持行按行键排序,您可以指定扫描的开始行和结束行。因此,设计用于按最常见条件进行搜索的行键至关重要。在您的问题中,您按id 列搜索,其中值为1000。您可以将此 id 放入行键中(但是,您必须确保避免区域热点)。

【讨论】:

  • 我怀疑行键值是否必须唯一?
  • 是的,行键是唯一的。但是,您可以拥有任意数量的列,甚至可以拥有每列的多个版本。
  • 多个版本的列指...?
  • HBase 中的每个单元格(列值)都有一个与之关联的插入时间(这是您在 HBase shell 中进行扫描时在每一行中看到的“时间戳”)。当您更新列值时,HBase 不会覆盖以前的值,而是添加一个带有新时间戳的值。如果需要,您可以获得列的所有版本。
  • 因此,对于每个行键值,我们可以有单行列。如果插入多于一行,它会更新吗?
猜你喜欢
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 2022-07-20
  • 1970-01-01
  • 2014-04-27
  • 2015-07-16
  • 2012-10-18
相关资源
最近更新 更多