Apache Hudi 0.14.0 Отмечает важную веху благодаря ряду расширенных функций. функциональность。Это включает в себя введениеRecord Level Index、Автоматически генерировать ключи записи , используется для инкрементного чтения hudi_table_changes
функцияждатьждать。стоит отметитьизда,Эта версия также содержит Spark 3.4 изподдерживать。существовать Flink аспекты, 0.14.0 Версия содержит некоторые интересные функции,НапримерПоддержка последовательного хэш-индекса, поддержка Flink 1.17 а такжеподдерживать Даженовыйиудалитьзаявление。этотснаружиэтот Версия Также обновленHudiповерхность Версия,Пользователям предлагается просмотреть информацию, представленную ниже.из Руководство по перенос. Мы призываем пользователей существовать принять 0.14.0 Версия Посмотреть раньше Важные особенности、основные измененияиизменение поведения。
существовать 0.14.0 В версии есть некоторые изменения, например от ".aux" Планы сжатия удаляются из папки и добавляются новые версии блоков журнала. В рамках этого выпуска версия таблицы обновлена до версии 6。существовать Иметь старыйповерхность Версияизповерхностьбеги дальше Версия 0.14.0 из Hudi задании, запускается процесс автоматического обновления для обновления таблицы до версии 6. Обновление для каждого Hudi все поверхности одноразовые, потому что после завершения обновления hoodie.table.version
Будут обновлены в файле свойств. Также включен инструмент командной строки для перехода на более раннюю версию, позволяющий пользователям удалять файлы с поверхности Версия. 6 перейти на 5 или от Hudi 0.14.0 Вернуться к 0.14.0 До из Версии. Пожалуйста, начните с 0.14.0 окружающую среду с помощью этого инструмента. Более подробную информацию см. hudi-cli。
ПРИМЕЧАНИЕ. Если вы начинаете миграцию с более старой версии (до 0.14.0), просмотрите инструкции по обновлению каждой старой версии по порядку.
существующая Эта версия расширяет сферу владения и включает в себя Spark 3.4 (hudi-spark3.4-bundle_2.12) и Spark 3.0 (hudi-spark3.0-bundle_2.12) из Пакетный пакет. пожалуйста, обрати внимание,существовать Hudi 0.10.1 После версии, да Spark 3.0 изпод поддержка была прекращена, но из-за сильного сообщества по интересам существование было восстановлено в этой версии. Spark 3.0 изподдерживать。
существовать 0.14.0 До версии, Spark SQL проходить INSERT INTO Впуск изданные следовать upsert Процесс, при котором несколько записей Versioniz будут объединены в одну версию. Но из 0.14.0 Начал меняться INSERT INTO из Строка по умолчаниюдля,Строка по умолчаниюдля Дажеизменятьдляinsert
поток。этот Дажеизменять显着提高了写入производительность,Потому что он обходит поиск индекса.
Если вы используете preCombine ключ для создания таблицы, затем INSERT INTO из Операция по умолчанию по-прежнему upsert
。Напротив, если он не установленpreCombine клавиша, затем ВСТАВИТЬ INTOиз Базовая операция записи по умолчанию имеет значение для insert
。Пользователи могут основывать своииз Требует явной настройки Конфигурация hoodie.spark.sql.insert.into.operation
из значения, чтобы гибко переопределить эту строку. Возможные значения для этой конфигурации включают в себя insert
、bulk_insert
и upsert
。
Кроме того, две связанные версии старой конфигурации были признаны устаревшими в версии 0.14.0.
Если тип операции настроен как Spark SQL INSERT INTO Потоковая передача из вставки. Теперь пользователи могут выбирать параметры конфигурации. hoodie.datasource.insert.dup.policy Обеспечьте соблюдение политики дублирования. Эта политика определяет, когда существует загрузка и выполнение действия, когда входящая запись сохранена в хранилище. Доступные значения для этой Конфигурации следующие:
проходитьдобавить вэтот Конфигурация,старыйиз Связанный Конфигурация hoodie.datasource.write.insert.drop.duplicates
Сейчас устарел. когда оба указаны,Новая конфигурация будет иметь приоритет над старой Конфигурацией. Если конкретная Конфигурация не указана,Будет использовано значение по умолчанию новая Конфигурацияиз. Пользователям настоятельно рекомендуется перейти на новуюизконфигурацию.
для Spark Пакетная запись (Spark Datasourceи Spark SQL), который автоматически Таблицы MOR (слияние при чтении) включают сжатие, если пользователь явно не отменяет это поведение. Пользователи могут выбрать hoodie.compact.inline
настраиватьдля false
Явно отключить сжатие. Если пользователь не отменяет эту конфигурацию, примерно каждые 5 дополнительные коммиты(hoodie.compact.inline.max.delta.commits
иззначение по умолчанию)вызовет MOR поверхностьиз сжатие。
из версии 0.14.0 начать HoodieDeltaStreamer Переименовать в Толстовка Стример. Также обеспечивается обратная совместимость, поэтому существующие задания пользователей не затрагиваются. Но существование вот-вот будет выпущено из Версия может остановить Deltastreamer изпод поддержки. Поэтому настоятельно рекомендуется пользователям перейти на HoodieStreamer。
Начиная с 0.14.0Версия,Когда пользователь не предоставляет четких спецификаций,HudiВозможность автоматического создания ключей мастер-записи.。этот Расширенная функциональностьделать MERGE INTO JOIN
пункт может относиться к Hudi Условие соединения на поверхности любого столбца данных, где указан первичный ключ. Hudi Генерировать себя. Но в случае существования пользователя Конфигурация первичного ключа записи условие соединения по-прежнему требует, чтобы пользователь указал поле первичного ключа.
Hudi Версия 0.14.0 Представлена реализация новогоизиндекса - Record Level Индекс. Индекспроходить на уровне записей эффективно сохраняет каждую запись из местоположения и обеспечивает быстрый поиск во время операций поиска по существующему индексу, что значительно повышает производительность операций записи на большие поверхности. он может эффективно заменить Hudi Обычно используется в других глобальных индексах, таких как Global_bloom、Global_Simple или Hbase。
Поскольку существующий процесс поиска очень затратен для сбора индексированных данных из различных файлов данных.,Блум индекси простой индекс для большого набора данных поверхности оказывается более низкой производительностью. и,Эти индексы не поддерживают запись ключей один к одному для записи сопоставлений путей к файлам;,Они существуют, когда поиск оптимизирует поиск для вывода отображений. Эти индексы накладных расходов на каждый файл делают их менее эффективными для обработки или записи данных с большими наборами файлов или записей.
С другой стороны, Hbase индексдля Каждый ключ записи сохраняет сопоставление «один к одному», что обеспечивает высокую производительность при заданном размере набора данных. Однако для этого требуется отдельный HBase кластер для обслуживания,Это существование является трудным с эксплуатационной точки зрения и ресурсоемким.,Требует специальных знаний.
индекс записи в сочетании с HBase индексизация скорости и масштабируемости без ограничений и накладных расходов. для HUDI Часть метаданных, будущие записи и запросы любого повышения производительности будут автоматически конвертироваться в улучшение индекса производительности для записи. Используя индекс уровня записи, можно улучшить производительность поиска индекса. 4 приезжать 10 раз, в зависимости от рабочей нагрузки, даже для очень больших наборов данных (например. 1 ТБ) тоже.
проходить Уровень ведения журналаиндекс,можно наблюдать значительные улучшения производительности,Потому что задержки и поступления и зданные прямо пропорциональны сумме. Этот и другие глобальные индексы резко контрастируют,Где время поиска индекса увеличивается линейно с размером поверхности. Индекс уровня записи специально разработан для эффективной обработки таких крупномасштабных поисков данных.,И время поиска не увеличивается линейно с размером файла.
для Чтобы воспользоваться преимуществами этой быстрой индексизации, пользователям необходимо включить два типа конфигурации:
hoodie.metadata.record.index.enable
Для того, чтобы записать индекс уровня записи в элемент данныхповерхность.hoodie.index.type
Нужно установить для RECORD_INDEX
Чтобы найти индекс уровня записи использования.С самого начала версии Hudi первичный ключ является обязательным полем для любой конфигурации поверхности Hudi, необходимой пользователю. от 0.14.0 Изначально мы ослабили это ограничение. Эта Расширенная Функциональность решает давнюю потребность сообщества, когда в некоторых случаях использования нет первичных ключей. Версия 0.14.0 Сейчас существуютдля пользователей обеспечивают создание Hudi гибкость поверхности без явного первичного ключа Конфигурация (проходить опустить настройку Конфигурации) - hoodie.datasource.write.recordkey.field
)。В этом случаеHudi Первичный ключ будет сгенерирован автоматически. Эта функция работает только с новыми таблицами, существующие таблицы нельзя изменить.
все Spark Все писатели предоставляют эту функциональность с определенными ограничениями. только для типа добавления из варианта использования, следующие четыре средства записи разрешают вставки и массовые вставки - Spark Datasource、Spark SQL、Spark Streaming、Hoodie Стример. Используйте только Spark SQL MERGE INTO 、 UPDATE и DELETE заявлениеподдерживать Даженовыйиудалить.для Spark Источник данных, только если DataFrame содержит Hudi из метаполя только поддержка UPDATE и УДАЛИТЬ. Ознакомьтесь с кратким руководством, чтобы узнать об автоматическом создании ключей. Hudi поверхность CRUD Операция из фрагмента кода.
Добавить Спарк 3.4 поддержка, Spark 3.4 из пользователей могут использовать hudi-spark3.4-bundle。Spark 3.2、Spark 3.1、Spark3.0 и Spark 2.4 Будет по-прежнему подлежать поддержке. Пожалуйста, проверьте Руководство по миграциичтобы получить Пакетное обновление пакет. Вы можете просмотреть краткое руководство, чтобы быстро приступить к работе. Hudi и Spark 3.4。
Теперь пользователи могут существовать и существовать Athena беспрепятственно эксплуатировать Hudi из Юаньданныеповерхность. Файл Столбец поверхностииндекспроходить извлекает информацию из обслуживаемого раздела, перемещая карту файла изиндекс, устраняя необходимость в рекурсивных вызовах файловой системы (например, «Поверхность столбца») из. Этот метод оказался очень эффективным, особенно при работе с большим количеством наборов данных. использовать Hudi 0.14.0, пользователи могут существоватьдля ее Hudi поверхностьосуществлять Glue Активировать во время синхронизации каталогов на основе данныхповерхности поверхности списка файлов. Чтобы включить эту функцию, пользователи могут Конфигурация hoodie.datasource.meta.sync.glue.metadata_file_listing
исуществовать Glue Установите его во время синхронизации true。
существовать Hudi 0.14.0 , теперь пользователи могут продолжать использовать нативные Parquet фильтр Блума, при условии, что они поддерживаются расчетной системой Apache Parquet 1.12.0 или выше Версия. Эта поддержка охватывает набор данных, а также запись и чтение. Худи проходить Hadoop Конфигурация проста в использовании. Parquet фильтр Блума。потребности пользователяиспользоватьпоколениеповерхностьприменятьфильтр Колонка Блумаиз с конкретными ключами для установки Hadoop конфигурация. Например, parquet.bloom.filter.enabled#rider=true
для rider Столбец создает фильтр Блума. Всякий раз, когда запрос включает в себя rider Если предикат из указан, отфильтруйте Блума вступит в игру, тем самым увеличивая показатели производительности.
существовать в сценарии с несколькими авторами,Из-за одновременной записи,На временной шкале могут появиться пробелы (запрошенные моменты или моменты в полете — это не самые новые моменты). существуют при выполнении инкрементного запроса,Эти пробелы могут привести к противоречивым результатам. для решения этой проблемы,Hudi 0.14.0 Введена настройка новаяиз Конфигурация. hoodie.read.timeline.holes.resolution.policy
,Специально используется для устранения этих несоответствий в дополнительных запросах. Конфигурация предлагает три возможные стратегии:
В течение некоторого времени Худи пользовательсуществоватьчитать Spark из Timestamp введите столбец и впоследствии попытайтесь использовать Hive 3.x Есть трудности с их прочтением. существовать Hudi 0.13.x Мы представили обходной путь для устранения этой проблемы в версии 0.14.0. Версиясейчассуществоватьубеждаться HiveAvroSerializer и Hive 3.x Полностью совместим для решения этой проблемы.
существовать 0.14.0 Например, BigQuerySyncTool. поддерживатьиспользовать Список будетповерхностьсинхронныйприезжать БигQuery. Ожидается, что по сравнению с традиционным способом производительность запросов будет выше. Эволюция шаблона по методу контрольного списка. Потому что новыйиз schema Благодаря улучшениям больше нет необходимости удалять столбцы разделов из файлов. Чтобы включить эту функцию, пользователи могут hoodie.gcp.bigquery.sync.use_bq_manifest_file
настраиватьдля true
。
существовать 0.14.0 в багажник добавлена поверхность MOR На снимке написано «утверждение». Строка по умолчанию для была изменена различными способами, чтобы соответствовать незагрузочной MOR поверхностьизготовленная для. Чтение снимков теперь будет режимом чтения по умолчанию. использовать hoodie.datasource.query.type=read_optimized
Выполнение запросов, оптимизированных для чтения, которые ранее были строкой по умолчанию. Такая поверхностьиз Hive Синхронизация приведет к тому, что имя поверхности будет соответствовать _ro и _rt Суффиксы поверхность обозначают оптимизацию чтения и чтение снимка соответственно.
Hudi используйте тип добавочного запроса для получения изменений после предоставления заданной метки времени фиксации из потока записей из функциональности. существовать Hudi 0.14.0 , мы добавили новый, более простой метод, используем имя для hudi_table_changes функция значения изповерхности, чтобы получить Hudi данныенаборизбольшинствоновыйсостояниеили Дажеизменятьпоток。Ниже приводится несколько примеров того, как использовать эту функцию из синтаксиса и.
SYNTAX
hudi_table_changes(table, queryType, beginTime [, endTime]);
-- table: table identifier, example: db.tableName, tableName, or path for the table, example: hdfs://path/to/hudiTable.
-- queryType: incremental query mode, valid values: latest_state, cdc
(for cdc query, first enable cdc for the table by setting cdc.enabled=true),
-- beginTime: instantTime to begin query from, example: earliest, 202305150000,
-- endTime: optional instantTime to end query at, example: 202305160000,
EXAMPLES
-- incrementally query data by table name
-- start from earliest available commit, end at latest available commit.
SELECT * FROM hudi_table_changes('db.table', 'latest_state', 'earliest');
-- start from earliest, end at 202305160000.
SELECT * FROM hudi_table_changes('table', 'latest_state', 'earliest', '202305160000');
-- incrementally query data by path
-- start from earliest available commit, end at latest available commit.
SELECT * FROM hudi_table_changes('path/to/table', 'cdc', 'earliest');
Дополнительные примеры см. в кратком руководстве.
на основе RFC-72 цельсуществовать Тяжелыйновыйдизайн Hudi-Spark Объединив предложение из, мы представили MOR (Merge of Reads) поверхность из экспериментальной программы чтения форматов файлы. Ожидается, что устройство чтения значительно уменьшит задержку чтения по сравнению со старыми форматами файлов. 20% к 40%, особенно для моментальных снимков и запросов начальной загрузки. Цель состоит в том, чтобы приблизить задержку к COW (копировать) Формат файла задерживается при записи. Чтобы воспользоваться преимуществами этого нового формата файлов, пользователям необходимо установить hoodie.datasource.read.use.new.parquet.file.format=true
。стоит отметитьизда,Эта функция все еще экспериментальная.,И есть некоторые ограничения. Для получения более подробной информации и тех, кто заинтересован в участии,См. HUDI-6568.
0.14.0 Версияподдерживатьсуществоватьосуществлять INSERT OVERWRITE TABLE и INSERT OVERWRITE PARTITION ждать SQL При работе используйте операции массовой вставки. Чтобы включить массовую вставку, настройте hoodie.spark.sql.insert.into.operation
настраиватьдляценитьbulk_insert
。и Операция вставки по сравнению с,Пакетная вставка имеет лучшую производительность записи. Кроме того, простой индекс сегмента также имеет средство записи строк.
когда Hoodie Streamer При работе в непрерывном режиме вы можете создавать новые/обновлять новые свойства перед каждым вызовом синхронизации. Заинтересованные пользователи могут достичь org.apache.hudi.utilities.deltastreamer.ConfigurationHotUpdateStrategy
чтобы воспользоваться этим.
HoodieStreamer Добавлен новый источник - SqlFileBasedSource, предназначенный для упрощения сценариев однократной обратной засыпки.
Ниже приводится 0.14.0 Версиясерединана основе Flink Engine из Расширенная функциональность。
статический хеш-индекс (индекс BUCKET) по сравнению с,Последовательное хеширование индексов для записи данных обеспечивает динамическую масштабируемость сегмента данных. Чтобы воспользоваться этой функцией,Пожалуйста, измените опциюindex.type
КонфигурациядляBUCKETи будетhoodie.index.bucket.engine
настраиватьдляCONSISTENT_HASHING
。
Async активируется в средстве записи существования, когда включено последовательное хеширование. Clustering Планирование очень важно. План кластеризации должен выполняться в автономном режиме. существовать В ходе этого процесса писатель будет существовать. В режиме ожидания выполните двойную запись в старый и новый сегменты данных. Хотя двойная запись не влияет на корректность, настоятельно рекомендуется выполнить кластеризацию как можно скорее.
существовать 0.14.0 Раньше при запросе с постоянной фильтрацией даты и времени и предикатами Flink Потоковая программа чтения неправильно удаляет разделы datetime. Начиная с версии, Исправлен запрос потоковой передачи Flink.,С поддержкой любого шаблона предиката фильтра,Включая, помимо прочего, фильтрацию по дате и времени.
для простого из барреля индексповерхности,Если запрос использует предикат фильтра в стиле ожидания в ключевом поле индекса,Flink Engine оптимизирует планирование,Содержит только те из очень конкретныхданныеведроизисточникданныедокумент;этот Ожидается, что запросы класса будут в среднемпроизводительность Воляулучшить почти hoodie.bucket.index.num.buckets
раз.
Поддержка Флинк 1.17новыйиз Скомпилировано maven Конфигурационный файл flink1.17,существовать Flink Hudi Пакетный пакет jar изкомпилировать cmd серединадобавить в Конфигурационный файл -Pflink1.17 чтобы включить Flink 1.17 изинтеграция.
Начиная с версии, операторы UPDATE и DELETE были интегрированы для пакетных запросов. Только определив изповерхность первичного ключа до того, как можно правильно обработать этот оператор.
UPDATE hudi_table SET ... WHERE ...
DELETE FROM hudi_table WHERE ...
EXAMPLES
-- update the specific records with constant age
UPDATE hudi_table SET age=19 WHERE UUID in ('id1', 'id2');
-- delete all the records that with age greater than 23
DELETE FROM hudi_table WHERE age > 23;
Java Движок был расширен множеством операций записи, чтобы сделать его совместимым с другими движками. Например Java Engine 0.14.0 Добавлены сжатие и кластеризация.
существоватьHudi В версии 0.14.0, когда запросы используютComplexKeyGeneratorилиCustomKeyGeneratorизповерхности, значение раздела возвращается в виде строки. Обратите внимание, что в хранилище не происходит изменения типа, т. е. поля раздела в хранилище записываются с пользовательскими типами. Этот упомянутый выше генератор ключей является основным изменения,Волясуществовать 0.14.1 средний ремонт - HUDI-6914