gpt4 book ai didi

java - Hbase ResultScanner.next() 第一次响应需要很长时间

转载 作者:可可西里 更新时间:2023-11-01 16:51:39 26 4
gpt4 key购买 nike

我是 Hbase 的新手,我的以下问题可能看起来很愚蠢!我提前道歉:)

我们有一个用例,我们需要在 Hbase 中存储一些大数据,每行将近 30MB,我们将其存储在 6 列中,每列 5MB,一些元数据的 2 列都在一个列族中。我们有两种类型的数据,我们使用 Hbase 作为一些大队列!

我们在 Hbase 中创建了两个表,分别命名为 TableA 和 TableB。我们必须插入数据(来自 A 或 B 类型),我们有一个 pull 函数,它应该获取一行(A 或 B 类型),返回它并从表中删除它。

我们有三个具有 4GB RAM 和足够存储空间的集群节点。

对于这项工作,在 Java 中,我制作了一个 ResultScanner,获取第一行的键,然后使用 Get 检索整行,如下所示

Scan scanA = new Scan();
scanA.addColumn(familyByteArray, oneSmallColumnByteArray);
ResultScanner scanner = tblA.getScanner(scanA);

// The big problem is here, this blows region servers and takes too long
// to respond
Result r = scanner.next();

// no problem here
Get get = new Get(r.getRowKey());
r = tblA.get(get);

scanner.next() 的第一次调用打击了 regionServers(即使存储的数据几乎很小(8k 行))并且通过增加 hbase.rpc.timeout 我防止 SocketTimeoutException,但 regionServers 有时仍会在第一个 next() 中关闭。

首先,scanner.next() 需要 60 秒,但下一个 scanner.next() 会很快回答(比如 1 秒)。

正如我之前提到的,我不关心返回哪一行,我只想获取一行并返回它。

您是否知道如何提高 scanner.next() 的速度并防止它杀死 regionServers?

最佳答案

首先,3簇是什么意思?我认为您的意思是 3 节点集群。

现在至于解决方案 4Gb(是 Node 的总内存吗?)ram 根本不够 Hbase,除非它是本地 VM。

分配给 HBase 的理想堆不应小于 8Gb。现在我建议对代码进行一些修改

  • 向扫描器添加扫描缓存,理想情况下它应该在 200 到 750 左右,但在您的情况下,从较低的值开始
  • 在 HBase 表上启用压缩
  • 如果将来您有足够的处理能力和内存,请尝试端点协处理器
  • 检查表上是否没有发生重大压缩。让它完成,然后尝试启动扫描
  • 在您的 HBase 表上启用布隆过滤器
  • 最后但并非最不重要的是不要忘记关闭结果扫描仪

关于java - Hbase ResultScanner.next() 第一次响应需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32578392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com