В апреле 2022 года вышел очередной минорный релиз Apache Hive, который работает с Hadoop версии 3. Рассмотрим основные улучшения и исправленные ошибки этого обновления, которые пригодятся дата-инженеру и разработчику распределенных приложений аналитики больших данных.
Исправленные ошибки
В апрельском выпуске популярного NoSQL-хранилища Apache Hive, которое реализует возможность обращения к данным в Hadoop HDFS как к SQL-таблицам, исправлено 15 ошибок и реализовано 11 улучшений. Сперва пройдемся по исправленным ошибкам:
- ранее команда EXPLAIN, которая используется для просмотра плана выполнения запроса, выдавала исключение ClassCastException, связанное с невозможностью приведения типа данных в классе apache.hadoop.hive.ql.parse.ExplainSemanticAnalyzer к типу в классе org.apache.hadoop.hive.ql.parse.SemanticAnalyzer;
- добавлена поддержка ColumnVector для ProlepticCalendar — пролептический календарь, , который был недавно добавлен в Hive, что создало некоторые проблемы для пользователей, у которых есть даты до 1580 года нашей эры.
- исправлены сценарии обновления хранилища метаданных Hive, которые имеют неверный или устаревший синтаксис комментариев из-за того, что MySQL сделал однострочный комментарий, который начинается с синтаксиса `—`, чтобы после него был минимум один пробел. Это приводило к тому, что текущие сценарии обновления в автономном хранилище метаданных Hive выдавали исключение.
- Исправлена ошибка с исключениями NullPointerException, которые возникают при попытке использовать ссылку, указывающую на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет NullPointerException.
- исправлена некорректная отправка файлов order из модуля хранилища метаданных, возникшая из-за введения регулярных выражений при обновлении схемы данных.
- Исправлена ошибка со считывателем файлов DataFileReader, который никогда не закрывался в AVROGenericRecordReader#extractWriterTimezoneFromMetadata, вызывая утечки памяти.
- Вместо уязвимой библиотеки логирования log4j, использование строк из которой прерывало работу пользователей, не являющихся пользователями log4j, теперь используется класс StringUtils, который есть в commons-lang. Ранее в Apache Hive утилиты перехватчиков событий (HookUtils) явно использовали класс org.apache.logging.log4j.util.Strings из log4j, что нарушало работу клиентов, использующих другие регистраторы событий, поэтому было решено исключить log4j из пути к классам.
- Сделано обновление ORC с 1.5.6 до 1.5.8 в ветке 3.1., чтобы исправить проблемы с памятью из-за конфликтов конфликтующих вызовов метода getTotalMemoryPool() между диспетчерами памяти MemoryManagerImpl и LlapAwareMemoryManager.
- Исправлена утечка памяти из-за стекирования UDFClassLoader в Apache Commons LogFactory, которая случалась из-за закрытия ClassLoader в JavaUtils и невозможности применения к нему сборщика мусора.
- Устранено состояние гонки между созданием маркера уплотнения и разделением, возникающего по причине отсутствия содержимого для сопоставления с объектом из-за окончания ввода java.io.EOFException.
- Исправлена ошибка с системным сервисом LLAP, который допускал утечку файловых дескрипторов/приложений log4j.
- Устранена утечка ресурсов при исключении в конструкторе AVROGenericRecordReader, который создавал экземпляр FileReader, не имея надлежащей обработки исключений, что не позволяло средству чтения файлов закрываться в случае сбоя. Это приводило к утечке базовых ресурсов, например, подключений к внешнему хранилищу типа S3.
- Исправлена ошибка с командой Describe table, которая без необходимости выбирала разделы. Ранее при наличии сильно партиционированной таблицы в Hive, эта команда выполнялась слишком долго. Изменение внесено так, что только команда describe extended/formatted table будет собирать статистику разделов, а Describe table не будет собирать статистику.
- Налажен импорт таблиц в Hive из реляционной СУБД Tibero.
- Исправлено избыточное создание базовых/дельта папок при выполнении сжатия. Ранее несколько заданий сжатия для одних и тех же транзакций могли запускаться, если хранилище метаданных Hive перезапускалось, а задание MapReduce все еще выполнялось.
Код курса
HIVE
Ближайшая дата курса
Продолжительность
ак.часов
Стоимость обучения
0 руб.
Основные улучшения Apache Hive 3.1.3
К главным улучшениям свежего выпуска Apache Hive являются следующие:
- Улучшена производительность команды Table#getEmptyTable за счет отключения registerAllFunctionsOnce;
- Реализованы пользовательские функции (UDF) для интерпретации даты/временной метки с использованием внутреннего представления и гибридного григорианско-юлианского календаря. UDF преобразует отметку даты/времени в новый пролептический григорианский календарь (стандарт ISO 8601), который создается путем расширения григорианского календаря назад до дат, предшествующих его официальному введению в 1582 году, при условии, что его внутренние дни/миллисекунды с начала эпохи вычисляются с использованием устаревшего григорианско-юлианского календаря.
- Улучшено кэширование, за счет хранилища CachedStore, что снижает нагрузку на фоновую базу данных Hive MetaStore, поддерживая функции Create,Alter, Drop, Get и событий уведомлений (CREATE_FUNCTION_EVENT, DROP_FUNCTION_EVENT).
- Cleaner теперь не удаляет дельта-каталоги для выполнения запросов;
- Удален устаревший API AVRO. JsonProperties#getJsonProp помечен как устаревший в AVRO 1.8 и удален, начиная с AVRO 1.9. Это заменяет использование API для этого на getObjectProp, который не пропускает узел JSON из jackson, помогая подчиненным приложениям зависеть от Hive при использовании более высокой версии AVRO. Также это улучшение поможет Hive обновить саму версию AVRO.
- исправлена проблема совместимости AVRO NULL_DEFAULT_VALUE;
- извлечение статистики разделов таблицы описания стало настраиваемым;
- улучшена работа с исключением NullPointerException в TxnHandler – ранее использование Iceberg в автономном хранилище метаданных Hive 3.1.2. Iceberg выдавал много вызовов lock() для коммитов. Напомним, Apache Iceberg можно рассматривать средство для вычислительных движков (Spark, Trino, PrestoDB, Flink и Hive), которое позволяет применять табличный формат поверх форматов файлов, таких как Parquet или ORC, находящихся в Data Lake.
Код курса
NOSQL
Ближайшая дата курса
Продолжительность
ак.часов
Стоимость обучения
0 руб.
Освойте администрирование и эксплуатацию Apache Hive для аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники