Ограничение ширины столбца Hive Metastore

Используя AWS EMR в версии 5.2.1 в качестве среды обработки данных, при работе с огромным файлом JSON, имеющим сложную схему со многими вложенными полями, Hive не может обработать его и выдает ошибки, так как он достигает текущего предела длины столбца 4000 символов,

Ошибка при обработке оператора: СБОЙ: Ошибка выполнения, код возврата 1 из org.apache.hadoop.hive.ql.exec.DDLTask. InvalidObjectException(сообщение: недопустимое имя типа столбца слишком длинное: [...]

Глядя на документацию, уже есть много вопросов, касающихся этой проблемы или аналогичной, хотя все они не решены [1, 2 ]. При этом рекомендуется изменить несколько полей Metastore на другое значение, чтобы обеспечить большую длину определений структур.

  • COLUMNS_V2.TYPE_NAME
  • TABLE_PARAMS.PARAM_VALUE
  • SERDE_PARAMS.PARAM_VALUE
  • SD_PARAMS.PARAM_VALUE

Как указано в первом выпуске, предлагаемое решение упоминает:

[...] после установки значений Metastore также должен быть настроен и перезапущен."

Тем не менее, нигде не указано, что должно быть сконфигурировано помимо значений БД.

Таким образом, после обновления полей текущий локальный Metastore (в данном случае mysql) из string в mediumtext и перезапуская процесс Metastore, все еще не может получить никакого прогресса, поскольку попытка загрузить JSON продолжает терпеть неудачу с той же самой ошибкой.

Я что-то упустил или кто-то нашел альтернативное решение этой проблемы?

1 ответ

Решение

Рассматривая исходный код MetaStore как проблему Hive HIVE-15249, существует также дополнительная проверка, которая применяется помимо ограничений параметров, установленных в таблицах MetaStore.

В частности, в HiveMetaStoreUtils.java файл, следующее объявление кажется причиной ошибки выполнения:

public static final int MAX_MS_TYPENAME_LENGTH = 2000; // 4000/2, for an unlikely unicode case

Таким образом, изменение значений для упомянутого в MetaStore недостаточно, поскольку ограничение кода вызовет исключение.

Другие вопросы по тегам