Вы должны проверить исходный код hbase , чтобы увидеть, что происходит:
private void checkCellSizeLimit(final HRegion r, final Mutation m) throws IOException {
945 if (r.maxCellSize > 0) {
946 CellScanner cells = m.cellScanner();
947 while (cells.advance()) {
948 int size = PrivateCellUtil.estimatedSerializedSizeOf(cells.current());
949 if (size > r.maxCellSize) {
950 String msg = "Cell with size " + size + " exceeds limit of " + r.maxCellSize + " bytes";
951 if (LOG.isDebugEnabled()) {
952 LOG.debug(msg);
953 }
954 throw new DoNotRetryIOException(msg);
955 }
956 }
957 }
958 }
На основании сообщения об ошибке вы превышаете r.maxCellSize
.
Примечание выше: функция PrivateCellUtil.estimatedSerializedSizeOf
устарела и будет удалена в будущих версиях.
Вот ее описание:
Оценка основана наФормат сериализации ключевого значения в слое RPC.Обратите внимание, что к размеру здесь добавляется дополнительный SIZEOF_INT, который указывает фактическую длину ячейки для случаев, когда ячейки сериализуются в непрерывном формате (например, в RPC).
Необходимо проверитьгде это значение установлено.Сначала проверьте «обычные» значения в HRegion.java
this.maxCellSize = conf.getLong(HBASE_MAX_CELL_SIZE_KEY, DEFAULT_MAX_CELL_SIZE);
Так что, вероятно, где-то существует предел HBASE_MAX_CELL_SIZE_KEY
и DEFAULT_MAX_CELL_SIZE
:
public static final String HBASE_MAX_CELL_SIZE_KEY = "hbase.server.keyvalue.maxsize";
public static final int DEFAULT_MAX_CELL_SIZE = 10485760;
Здесь у вас есть предел 10485760 , который отображается в вашем сообщении об ошибке.Если вам нужно, вы можете попытаться поднять этот лимит до своего предельного значения.Я рекомендую протестировать его должным образом, прежде чем начать работу с ним (ограничение там, вероятно, имеет какую-то причину).
Редактировать: Добавление информации о том, как изменить значение base.server.keyvalue.maxsize
.Отметьте config.files
:
Где вы можете прочитать:
hbase.client.keyvalue.maxsize (Описание)
Указывает максимально допустимый объединенный размер экземпляра KeyValue.Это позволяет установить верхнюю границу для одной записи, сохраненной в файле хранилища.Поскольку они не могут быть разделены, это помогает избежать дальнейшего разделения региона, поскольку данные слишком велики.Представляется целесообразным установить это значение в части максимального размера региона.Установка его на ноль или меньше отключает проверку.По умолчанию
10485760
hbase.server.keyvalue.maxsize (Описание)
Максимально допустимый размер отдельной ячейки, включая значение и все ключевые компоненты.Значение 0 или меньше отключает проверку.Значение по умолчанию составляет 10 МБ.Это параметр безопасности для защиты сервера от ситуаций OOM.По умолчанию
10485760