Анализ оптимизации Hive CBO
Анализ оптимизации Hive CBO

Предыстория

Hive — это более ранняя версия SQL в системе Hadoop, которая оказывает широкое и далеко идущее влияние на выполнение SQL для больших данных. Первоначально он был разработан Facebook, а затем стал проектом с открытым исходным кодом Apache Software Foundation. Пользователи могут читать, записывать и управлять крупномасштабными наборами данных, хранящимися в распределенных системах хранения, с помощью SQL.

Помимо Hive SQL, Hive Metastore также оказывает большое влияние на систему метаданных систем больших данных и стал фактическим стандартом определения метаданных в области больших данных. И Spark, и Presto расширяют соответствующий каталог Metastore. В последующих статьях Hive Metastore будет подробно описан.

процесс синтаксического анализа

Hive Базовый процесс SQL синтаксического Анализ заключается в следующем: семантический анализ получает дерево операторов дерева логического плана (Оператор Tree),использоватьLogical Optimizer(Optimizer#optimize)Получите оптимальное дерево операторов。

  • Parser:ВоляHiveSQLзаявление, основанное наANTLR4Скомпилировано и проанализировано какASTабстрактное синтаксическое дерево ASTNode
  • Semantic Analyzer:на основеSemanticAnalyzer#genResolvedParseTreeметод,Синтаксический анализ в режиме посетителя (ContextVisitor),Рекурсивно пройти по синтаксическому дереву AST.,пройтиdoPhase1иgetMetaDataабстрактныйSQLосновная единицаQB(QueryBlock,то есть подзапрос,блок запроса),QBВключает в себя три части:источник входного сигнала、Процесс расчета、выход;
  • Logical Plan Generator:на основеSemanticAnalyzer#genOPTreeметод,Внедрите QB для получения дерева операторов логического плана. Дерево операторов.,Operator(объект дерева операторов)Передача данных представляет собой потоковый процесс.,Отец ОператорОперация будет переданаДетский операторвычислить;
  • Logical Optimizer:на основеOptimizer#optimize Дерево логических операторовOperatorОптимизировать,Выполните встроеннуюtransformдействовать,Например: оператор слияния,Сокращение количества выполняемых заданий MapReduce,Уменьшите количество случайного расчесывания,Рассчитать отжимание и т. д.;
  • Physical Plan Generator:на основеTaskCompiler#compile,Выполнить глубокую оптимизацию сверху вниз от корневого узла дерева логических операторов. Оператор,Преобразование для создания дерева операторов физического планаTask;
  • Physical Optimizer:на основеTaskCompiler#optimizeOperatorPlan Оптимизация физических планов на основе различных механизмов выполнения,TaskCompilerВ настоящее время существуютMapReduceCompiler、SparkCompiler、TezCompiler。

Поток объектов данных, соответствующий синтаксическому анализу SQL, выглядит следующим образом:

  • HiveSQL анализируется в объект абстрактного синтаксического дерева ASTNode
  • ASTNode преобразован в блок подзапроса QB (QueryBlock)
  • QB преобразуется в дерево логического плана оператора для облегчения последующей логической оптимизации реляционной алгебры.
  • Оператор преобразуется в дерево физического плана задач для реализации преобразования логического плана в физический план.

SQLВременная диаграмма анализа и исполнения следующая::Ядро заключается в обработке SemanticAnalyzer.,включать:

  • Получите QB на основе AST
  • Преобразование в оператор на основе QB, реализация логической оптимизации на основе дерева логического плана (дерева операторов).
  • Преобразование в задачу на основе оператора и достижение физической оптимизации на основе дерева физического плана (дерева операторов).

оптимизация CBO

Принцип реализации

HiveиспользоватьHiveVolcanoPlanner Наследовать родной кальцит VolcanoPlanner выполнитьоптимизация устройство СВО,CalcitePlannerнаследоватьHiveизSemanticAnalyzer(Семантический анализ),Overrideпереписанна основеQBПолучить логическое дерево операторовOperatorизgenOPTreeметод。Временная диаграмма следующая,CalcitePlannerActionвыполнитьCalcite PlannerAction,вызовapplyметод После оптимизацииизCalciteДерево логических операторов RelNode,на основеASTConverterКонвертироватьRelNodeдляHiveиз После оптимизацииизASTNode,на основе После оптимизацииизASTNodeгенерироватьHiveДерево логических операторовOperator,и выполнять последующие операции синтаксического анализа.

CBOизстатистикаи Информация о системесуществоватьсоздаватьCalcitePlannerActionобъект передается в,включать:partitionCache、colStatsCache、columnAccessInfo。

Поток анализируемых объектов данных Hive на основе CBO выглядит следующим образом:

Ядро реализации Hive CBO:существоватьQBизменятьOperatorОбработка расширения во время логического планирования,QB → Calcite оптимизация CBO → Operator

HiveсерединаRelOptHiveTableрасширение классаCalciteизRelOptTable,Внутреннее поддержание количества строк и статистических значений поля.,Предоставить статистические методы:

  • getRowCount: получить количество строк
  • getColStat: Получить Поле Статистику,Базовый RPC-интерфейс статистики метаданных вызовов: get_table_statistics_req, get_partitions_statistics_req.

Статистика

Время запуска обновления статистических метаданных должно быть гарантировано для операций ALTER и INSERT. hive.stats.autogather = true

  • ANALYZE:AnalyzeTableCommand、AnalyzeColumnCommand、AnalyzePartitionCommand;
  • ALTER:AlterTableMergeFileCommand、TruncateTableCommand;
  • INSERT:LoadDataCommand;

Statistics Статистика,ссылка:org.apache.hadoop.hive.ql.plan.Statistics

Поле

Имя поля

numRows

количество строк

runTimeNumRows

время выполненияколичество строк

dataSize

Размер файла данных

basicStatsState

Статус статистики таблицы: НЕТ, ЧАСТИЧНЫЙ, ПОЛНЫЙ

columnStats

Поле Статистика,Map<String,ColStatistics>

columnStatsState

Поле Статистический статус: НЕТ, ЧАСТИЧНЫЙ, ПОЛНЫЙ

runtimeStats

Разрешена ли статистика

ColStatistics Полеуровень Статистика

Поле

Имя поля

colName

Имя поля

colType

ПолеType

countDistinct

Статистика количества различных значений Поле

numNulls

Количество нулей

avgColLen

Полесредняя длина

numTrues

Количество истинных

numFalses

Количество ложных

range

Поле Максимальный и минимальный диапазон значений

isPrimaryKey

Это первичный ключ?

isEstimated

Это ориентировочная стоимость?

Запрос статистических метаданных:РасширятьCalciteизRelOptTable,вызовHive Metastore RPC-интерфейс для получения метаданных;

Обновления статистических метаданных

  • Статистические метаданные таблиц и разделов: на основе RPC-клиента, вызывающего интерфейс Metastore, alterTable и alterPartitions обновляют соответствующие атрибуты параметров;
  • ПолеMetadata: вызов интерфейса Metastore на основе RPC-клиента, setPartitionColumnStatistics. Обновить Статистику Поле/раздела;

АНАЛИЗВыполнение

Hive Статистика CBO в основном получается путем АНАЛИЗВыполнения и соответствующего АНАЛИЗА. Синтаксис определен следующим образом:

Язык кода:sql
копировать
ANALYZE TABLE [db_name.]tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)] 
  COMPUTE STATISTICS 
  [FOR COLUMNS]          -- (Note: Hive 0.10.0 and later.)
  [CACHE METADATA]       -- (Note: Hive 2.1.0 and later.)
  [NOSCAN];

Выполнение статистических метаданных:использоватьфизические операторыStatsTask,вызовIStatsProcessor#processметод执行元数据статистика,IStatsProcessorвыполнить Подкласс:

  • BasicStatsTask: базовая статистика метаданных таблицы.,траверсLocationВнизизHDFSсписок файлов(List<FileStatus>),Подсчитайте общее количество файлов данных и общий размер хранилища.,ЧтосерединаStatsAggregatorСтатистика Краткое содержание,Агрегация статистических результатов по нескольким задачам;
  • BasicStatsNoJobTask: статистические операции, которые не запускают выполнение задачи.,Например, файлы данных ORC хранят столбцы Статистика в атрибутах файла.,Этот метод считает быстрее,Запуск многопоточного выполнения файла Сводка статистики;
  • ColStatsProcessor: столбцы, статистика для каждого раздела.,на основеFetchOperatorИтеративно прочитать таблицуизданные строки,ColumnStatisticsObjTranslatorруководить Полесорт Статистика Собрать;

Подвести итог

С бурным развитием больших данных вычислительный механизм Hive, как предшественник, постепенно заменяется другими механизмами из-за таких факторов, как ограничения среды выполнения и длительное время выполнения. Однако Hive, являющийся фактическим стандартом SQL в Hadoop, всегда влиял на развитие SQL для больших данных, и большое количество существующих предприятий предприятий построено с использованием Hive SQL.

Автор этой статьи: Предыстория、процесс синтаксического анализа、оптимизация Детали CBO из трёх частей Hive Принцип CBO. Улей Базовый процесс SQL синтаксического Анализ включает в себя синтаксический анализ, семантический анализ, логическую оптимизацию и этапы физической оптимизации. Улей оптимизация CBO полагается на кальцит Реализация оптимизатора модели вулкана. В этой статье представлен соответствующий CBOПринцип. реализация, статистические метаданные CBO и реализация АНАЛИЗВыполнение.

Я участвую в последнем конкурсе эссе для специального учебного лагеря Tencent Technology Creation 2024. Приходите и разделите со мной приз!

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose