невозможно загрузить pdf-файлы размером более 10 МБ в Hbase через python happybase - HDP 3 - PullRequest
0 голосов
/ 26 февраля 2019

Мы используем HDP 3. Мы пытаемся вставить PDF-файлы в один из столбцов определенного семейства столбцов в таблице Hbase.Средой разработки является python 3.6, а соединителем hbase - happybase 1.1.0.

Мы не можем загрузить файл PDF размером более 10 МБ в hbase.

В hbase мы установили параметры следующим образом: enter image description here

enter image description here

Получим следующееошибка:

IOError (message = b'org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: сбой 1 действие: org.apache.hadoop.hbase.DoNotRetryIOException: ячейка с размером 80941994 превышает ограничение в размере 8094199410485760 байт.\ n \ tat org.apache.hadoop.hbase.regionserver.RSRpcServices.doNonAtomicBatchOp (RSRpcServices.java:959) \ n \ tat org.apache.hadoop.hbase.regionserver.RSRpcServices.doNonAt22S_service\ tat org.apache.hadoop.hbase.regionserver.RSRpcServices.multi (RSRpcServices.java:2683) \ n \ tat org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos $ ClientService $ 2.callBlockingProtojj (: 42014) \ n \ tat org.apache.hadoop.hbase.ipc.RpcServer.call (RpcServer.java:409) \ n \ tat org.apache.hadoop.hbase.ipc.CallRunner.run (CallRunner.java:131) \ n \ tat org.apache.hadoop.hbase.ipc.RpcExecutor $ Handler.run (RpcExecutor.java:324) \ n \ tat

1 Ответ

0 голосов
/ 06 марта 2019

Вы должны проверить исходный код 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
...