Ограничение ширины столбца 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 недостаточно, поскольку ограничение кода вызовет исключение.