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)Получите оптимальное дерево операторов。
Поток объектов данных, соответствующий синтаксическому анализу SQL, выглядит следующим образом:
SQLВременная диаграмма анализа и исполнения следующая::Ядро заключается в обработке SemanticAnalyzer.,включать:
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,Внутреннее поддержание количества строк и статистических значений поля.,Предоставить статистические методы:
Время запуска обновления статистических метаданных должно быть гарантировано для операций ALTER и INSERT. hive.stats.autogather = true;
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-интерфейс для получения метаданных;
Обновления статистических метаданных:
Hive Статистика CBO в основном получается путем АНАЛИЗВыполнения и соответствующего АНАЛИЗА. Синтаксис определен следующим образом:
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выполнить Подкласс:
С бурным развитием больших данных вычислительный механизм Hive, как предшественник, постепенно заменяется другими механизмами из-за таких факторов, как ограничения среды выполнения и длительное время выполнения. Однако Hive, являющийся фактическим стандартом SQL в Hadoop, всегда влиял на развитие SQL для больших данных, и большое количество существующих предприятий предприятий построено с использованием Hive SQL.
Автор этой статьи: Предыстория、процесс синтаксического анализа、оптимизация Детали CBO из трёх частей Hive Принцип CBO. Улей Базовый процесс SQL синтаксического Анализ включает в себя синтаксический анализ, семантический анализ, логическую оптимизацию и этапы физической оптимизации. Улей оптимизация CBO полагается на кальцит Реализация оптимизатора модели вулкана. В этой статье представлен соответствующий CBOПринцип. реализация, статистические метаданные CBO и реализация АНАЛИЗВыполнение.