【问题标题】:Hbase concurrency making it slowHbase 并发使其变慢
【发布时间】:2014-05-30 05:11:56
【问题描述】:

我有 1 台主服务器和 5 台区域服务器,每台服务器都有 200 GB 磁盘空间和 16 GB RAM。我在 HBase 中创建了一个包含 1000 万条记录的表。我在 hadoop 2 上使用 hbase-0.96 版本。

表名 - sh_self_profiles

列族 - 简介

在此表中,每行有 30 列。 当我从 HBase 获得单列值时,大约需要 10 毫秒。我的问题是当我达到 100 个或更多并发请求时,时间会慢慢累积并增加到 400 多毫秒,而不是仅在 10 毫秒内完成。线性命中 100 个请求时,每个请求只需要 10 毫秒。

【问题讨论】:

  • 添加更多关于您的密钥设计、hbase 内存设置等的信息。
  • 记录有多大?它们是 1 亿条 1MB 记录还是 10 字节记录?这有很大的不同。
  • 读取是如何分布的?统一?您是否一遍又一遍地访问同一行?

标签: hadoop hbase


【解决方案1】:

您应该检查的一件事是您的桌子的分布情况。

您可以通过访问 HBase 主 Web 控制台 http://:60010 来执行此操作,您将能够看到您的表有多少个区域。如果您在创建表时没有做任何特别的事情,您很容易只有一个或两个区域,这意味着所有请求都被定向到单个区域服务器。

如果是这种情况,您可以使用预拆分区域重新创建表(我建议使用 5 的倍数,例如 15 或 20),并确保您正在执行的并发获取平均分布在行键空间。

另外,请检查您为区域服务器分配了多少 RAM - 您可能需要从默认值增加它。如果您在这些机器上没有运行除 HBase Region Sever 以外的任何其他东西,您可能会增加到 8GB 内存。

除此之外,您还可以调整 hbase.regionserver.handler.count 的默认值。

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您使用的是哪个客户端?您使用的是标准 Java 客户端、Thrift 客户端、HTTP REST 客户端还是其他什么?如果您的用例是大量随机读取单列值,我强烈建议您尝试asynchbase,因为它比标准同步 Java 客户端快得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-24
      • 2015-07-16
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      相关资源
      最近更新 更多