我正在通过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以编程方式添加它,则无法正常工作。
请让我知道问题的原因和解决方案?
hbase.server.keyvalue.maxsize保护生产服务器,使其免受行为不当的客户端的影响,这些客户端会尝试上传大型单元。客户无法覆盖此属性,这与其原始目的相矛盾。
hbase.client.keyvalue.maxsize用于在不需要服务器的情况下在客户端验证单元格大小。通常,它的值与hbase.server.keyvalue.maxsize。
相同。上传大小超过10MB(默认值)的单元格不是一个好主意。尝试阅读有关HBase的MOB功能的信息,该功能是针对您的用例设计的。
我怀疑是否有任何名为“ 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");