我们使用的是hdp3。我们正在尝试将pdf文件插入hbase表中特定列族的一列中。开发环境是python3.6,hbase连接器是happybase 1.1.0。
我们无法在hbase中上载任何大于10 mb的pdf文件。
在hbase中,我们设置了如下参数:
我们得到以下错误:
ioerror(message=b'org.apache.hadoop.hbase.client.retriesHaustedWithDetailsException:失败1操作:org.apache.hadoop.hbase.donotretryioexception:大小为80941994的单元格超过了10485760字节的限制\n\tat org.apache.hadoop.hbase.regionserver.rsrpcservices.checkcellsizelimit(rsrpcservices)。java:937)\否\torg.apache.hadoop.hbase.regionserver.rsrpcservices.dobatchop(rsrpcservices)。java:1010)\n\t org.apache.hadoop.hbase.regionserver.rsrpcservices.dononatomicbatchop(rsrpcservices)。java:959)\n\tat org.apache.hadoop.hbase.regionserver.rsrpcservices.dononatomicregionmutation(rsrpcservices)。java:922)\否\torg.apache.hadoop.hbase.regionserver.rsrpcservices.multi(rsrpcservices。java:2683)\n\t org.apache.hadoop.hbase.shaded.protobuf.generated.clientprotos$clientservice$2.callblockingmethod(clientprotos。java:42014)\n\t org.apache.hadoop.hbase.ipc.rpcserver.call(rpcserver。java:409)\否\torg.apache.hadoop.hbase.ipc.callrunner.run(callrunner。java:131)\n\t org.apache.hadoop.hbase.ipc.rpcexecutor$handler.run(rpcexecutor。java:324)\否\t
1条答案
按热度按时间0g0grzrc1#
您必须检查hbase源代码以查看发生了什么:
根据错误消息,您超出了
r.maxCellSize
.上面的注解:函数
PrivateCellUtil.estimatedSerializedSizeOf
已折旧,将在将来的版本中删除。其描述如下:
基于rpc层中keyvalue的序列化格式进行估计。请注意,这里的size中添加了一个额外的sizeof int,用于指示以连续格式序列化单元格(例如在rpcs中)时单元格的实际长度。
您必须检查值集在哪里。首先检查hregion.java中的“普通”值
this.maxCellSize = conf.getLong(HBASE_MAX_CELL_SIZE_KEY, DEFAULT_MAX_CELL_SIZE);
所以可能有HBASE_MAX_CELL_SIZE_KEY
以及DEFAULT_MAX_CELL_SIZE
限制在某个地方:这是您的10485760限制,显示在您的错误信息。如果你需要,你可以试着把这个极限提高到你的极限值。我建议在使用它之前对它进行适当的测试(它的限制可能是有原因的)。
编辑:添加有关如何更改
base.server.keyvalue.maxsize
. 检查config.files
:您可以阅读:
hbase.client.keyvalue.maxsize(说明)
指定keyvalue示例的组合最大允许大小。这是为存储文件中保存的单个条目设置上限。由于它们不能被分割,这有助于避免区域由于数据太大而不能被进一步分割。将其设置为最大区域大小的一小部分似乎是明智的。将其设置为零或更小将禁用检查。违约
hbase.server.keyvalue.maxsize(说明)
单个单元格允许的最大大小,包括值和所有关键组件。值为0或更小将禁用检查。默认值为10mb。这是一个安全设置,用于保护服务器免受oom情况的影响。违约