首页 > 解决方案 > 通过 Java 以编程方式设置“hbase.server.keyvalue.maxsize”

问题描述

我正在通过 Java Spring boot 执行 hbase 操作。我收到错误“大小为 10762275 的单元格超出了 10485760 字节的限制”

在某个地方我开始了解增加单元大小,即需要在 hbase-site.xml 中将“hbase.server.keyvalue.maxsize”设置为所需的大小才能解决此问题。我添加了这个属性并解决了问题。

但是我想通过我的 Java 代码添加这个属性,因为我可能无法在生产中访问 hbase-site.xml。

我设置属性的配置方法是:

public Configuration createHbaseConfiguration() {
        Configuration conf = HBaseConfiguration.create();
        conf.clear();
        conf.set("hbase.master.port", hbaseConnectionPortNum);
        conf.set("hbase.master", hbaseConnectionIpAddr);
        conf.set("hbase.zookeeper.quorum", zookeeperConnectionIpAddr);
        conf.set("hbase.zookeeper.property.clientPort", zookeeperConnectionPortNum);
        conf.setInt("hbase.client.retries.number", 2);
        conf.setInt("hbase.client.keyvalue.maxsize", 0);
        conf.setInt("hbase.server.keyvalue.maxsize", 0);
        return conf;
    }

我能够连接到 hbase,也可以使用这些 proeprites 通过 java 执行所有其他 hbase 操作,但是我在单元大小问题上遇到了相同的问题。

注意:将“hbase.server.keyvalue.maxsize”设置为 0 会消除对单元大小的所有限制。

总结: 如果我在 hbae-site.xml 中设置属性“hbase.server.keyvalue.maxsize”,它会非常好,但是如果我尝试通过 java 以编程方式添加它,它就不起作用。

请告诉我问题的原因和解决方法?

标签: javaspring-boothadoophbase

解决方案


hbase.server.keyvalue.maxsize保护您的生产服务器免受试图上传大单元的行为不端的客户端的影响。该属性不能被客户端覆盖,这与其最初的目的相矛盾。

hbase.client.keyvalue.maxsize用于在客户端验证单元大小而不向服务器请求。通常它与hbase.server.keyvalue.maxsize具有相同的值。

上传大小超过 10MB(默认值)的单元格是个坏主意。尝试阅读HBase 中的MOB功能,它专为您的用例而设计。


推荐阅读