通过Java以编程方式设置“ hbase.server.keyvalue.maxsize”

问题描述 投票:1回答:2

我正在通过Java Spring引导执行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以编程方式添加它,则无法正常工作。

请让我知道问题的原因和解决方案?

java spring-boot hadoop hbase
2个回答
3
投票

hbase.server.keyvalue.maxsize保护生产服务器,使其免受行为不当的客户端的影响,这些客户端会尝试上传大型单元。客户无法覆盖此属性,这与其原始目的相矛盾。

hbase.client.keyvalue.maxsize用于在不需要服务器的情况下在客户端验证单元格大小。通常,它的值与hbase.server.keyvalue.maxsize

相同。

上传大小超过10MB(默认值)的单元格不是一个好主意。尝试阅读有关HBase的MOB功能的信息,该功能是针对您的用例设计的。


1
投票

我怀疑是否有任何名为“ hbase.server.keyvalue.maxsize”的属性。它是“ hbase.client.keyvalue.maxsize”属性,用于禁用Keyvalue实例的限制。

这里是hbase-default.xml:https://svn.apache.org/repos/asf/hbase/hbase.apache.org/trunk/hbase-default.xml

是,您可以在Java程序中设置此属性,如下所示。

conf.set("hbase.client.keyvalue.maxsize","0");
© www.soinside.com 2019 - 2024. All rights reserved.