通过Java

时间:2018-11-29 09:28:57

标签: java spring-boot hadoop hbase

我正在通过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编程添加它,则无法正常工作。

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

3 个答案:

答案 0 :(得分:1)

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

hbase.client.keyvalue.maxsize 用于验证客户端的单元格大小,而无需请求服务器。通常,它与 hbase.server.keyvalue.maxsize 相同。

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

答案 1 :(得分:0)

我怀疑是否有任何名为“ 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");

答案 2 :(得分:0)

如果我们将客户端和服务器的值都更改为0,结果是什么? MOB阈值会更改为设置值吗?即没有限制。还是有什么不好的结果?

hbase.client.keyvalue.maxsize = 0;
hbase.server.keyvalue.maxsize = 0;