Первое знакомство с Spark SQL | 20 изображений, подробно описывающих принцип работы и абстракцию данных Spark SQL.
Первое знакомство с Spark SQL | 20 изображений, подробно описывающих принцип работы и абстракцию данных Spark SQL.

Краткое содержание статьи

В области больших данных важность SQL очевидна, и это можно даже назвать «все можно SQLизировать».

Независимо от того, создаете ли вы платформу или приложение, вам неизбежно придется иметь дело с SQL. Фраза «SQL Boy», хотя и является самоуничижением, также может иллюстрировать тесную связь между инженерами по работе с большими данными и SQL.

От самых примитивных и популярных механизмов запросов SQL, таких как Hive/Spark SQL, до механизмов OLAP, таких как Kylin/ClickHouse, до потоковой передачи Flink SQL/Kafka SQL, различные стеки технологий обработки больших данных более или менее развиты.

Можно сказать, что отсутствие поддержки SQL ухудшит собственную техническую архитектуру, а также повлияет на удобство использования.

Среди всех этих движков Spark SQL имеет самую глубокую и лучшую оптимизацию SQL!

1

Что такое Spark SQL?

Spark SQL — это модуль в Spark, используемый для обработки структурированных данных. Он предоставляет абстракцию программирования (DataFrame) и может использоваться в качестве механизма запросов для распределенного SQL.

Spark SQL может преобразовывать задачи вычисления данных в RDD в форме SQL, а затем отправлять их в кластер для вычислений. Подобно Hive, который преобразует задачи вычисления данных в MapReduce в форме SQL, он значительно упрощает запись данных Spark. программы расчетных операций, а эффективность его выполнения выше, чем у вычислительной модели MapReduce.

В Spark Spark SQL — это не просто узкий SQL, а основной компонент оптимизации и выполнения программ Spark.

Потоковые вычисления, машинное обучение, графовые вычисления, глубокое обучение и другие приложения можно преобразовать в API DataFrame/Dataset. Эти API, как и обычный SQL, имеют общий уровень оптимизации, уровень выполнения и возможность доступа к нескольким источникам данных.

Можно сказать, что Spark SQL — это «закулисный герой», который делает приложения Spark эффективными, высокоотказоустойчивыми и экологически чистыми.

2

Возможности Spark SQL

Spark SQL имеет следующие возможности:

  1. и Spark Core из бесшовно интегрировано, вы можете написать весь RDD При подаче заявки настройте Spark SQL завершить реализацию логики.
  2. Единый метод доступа к данным, Spark SQL Обеспечить стандартизацию SQL Запрос.
  3. Hive из Наследство, Искра SQL проходить Встроенныйиз Hive или Внешнее соединение было развернуто из Hive Кейс, понял Hive Синтаксис наследования и операции.
  4. Стандартизированный метод подключения, Spark SQL Можно начать с Thrift Server поддерживать JDBC、ODBC извизит, Воля себя как один BI Server использовать。

3

Как работает Spark SQL

Прежде чем понять принцип работы Spark SQL, нам необходимо сначала понять архитектуру Spark SQL:

3.1

Архитектура Spark SQL

Spark SQL состоит из 4 частей: Core, Catalyst, Hive и Hive-Thriftserver.

Архитектура Spark SQL

  • Core:Ответственный за обработку данныхизвходить/выход,от Различные источники данных для получения данных (например, RDD,HDFS,Parquet Документы JSON файл и т. д.), а затем выведите результаты запроса в Data Frame。
  • Catalyst:Отвечает за обработку операторов запроса.извесь Процесс исполнения,включатьанализировать、обязательность、оптимизация、Создайте физический план ожидания.
  • Hive:Ответственныйверно Hive Обработка данных.
  • Hive-Thriftserver:поставлять Client и JDBC/ODBC и другие интерфейсы.

Spark SQL Core: компилятор запросов Catalyst

Ядром Spark SQL является компилятор запросов Catalyst, который преобразует SQL/DataFrame/Dataset в пользовательской программе посредством серии операций в RDD, выполняемые в системе Spark.

Компонент компилятора запросов Catalyst

Катализатор состоит из следующих важных компонентов:

1. Parser

Преобразование SQL/DataFrame/Dataset в неразрешенное дерево в Spark называется логическим планом, который представляет собой абстракцию пользовательской программы.

Совместим со стандартом ANSI SQL 2003 и HiveQL.

2. Analyzer

Используйте информацию в каталоге для анализа дерева, созданного в Parser.

Анализатор состоит из серии правил (Rule), каждое правило отвечает за определенную операцию проверки или преобразования, например, за анализ имен таблиц и имен столбцов в SQL и определение их существования.

Через Анализатор мы можем получить анализируемый логический план.

3. Optimizer

Оптимизируйте древовидную структуру разобранного логического плана для повышения эффективности выполнения.

Процесс оптимизации также завершается с помощью ряда правил. Часто используемые правила включают в себя перемещение предикатов, сокращение столбцов, изменение порядка соединений и т. д.

Кроме того, в Spark SQL имеется оптимизатор на основе затрат, который является важным компонентом, разработанным внутри DLI и предоставленным сообществом открытого исходного кода. Оптимизатор может автоматически генерировать оптимальный план на основе распределения данных.

4. Planner

Преобразуйте оптимизированный логический план в план физического выполнения (Физический план).

Он состоит из серии стратегий. Каждая стратегия преобразует определенный логический оператор в соответствующий оператор физического выполнения и, в конечном итоге, становится конкретной операцией RDD.

Обратите внимание, что в процессе преобразования один логический оператор может соответствовать реализации нескольких физических операторов. Например, соединение может быть реализовано как SortMergeJoin или BroadcastHashJoin. В этом случае необходимо выбрать лучший оператор на основе модели стоимости.

Упомянутый выше оптимизатор затрат также может сыграть ключевую роль в этом процессе выбора.

Вся платформа Catalyst обладает хорошей масштабируемостью. Разработчики могут гибко добавлять свою собственную грамматику, правила синтаксического анализа, правила оптимизации и стратегии преобразования в соответствии с различными потребностями.

3.2

Основные принципы работы SQL

Понять В традиционной реляционной базе данныхиз Основные принципы работы SQL, полезно, правда Как работает Spark SQL лучше понимается.

Базовый процесс выполнения SQL

В традиционных реляционных базах данных самый простой оператор запроса SQL состоит из трех частей: проекция (a1, a2, a3), источник данных (таблица A) и фильтр (условие).

переписывались соответственно SQL Во время запроса Result、DataSource и Операция, то есть согласно Result --> DataSource --> Operation описано по порядку.

но SQL Фактический процесс исполнения основан на Operation --> DataSource --> Result выполняются в порядке, соответствующем SQL Синтаксис прямо противоположный.

Конкретный процесс выполнения выглядит следующим образом:

  1. Лексическийиграмматикаанализировать(Parse):вернописатьиз SQL Последовательность предложений лексический и грамматический анализировать, различать SQL Какие ключевые слова да используются в предложении (например, select、from и где), какие да выражения, какие да Проекция, которая да DataSource Подожди, судья SQL Грамматика стандартизирована и образует логический план.
  2. Связывать:Воля SQL Оператор и база данных из словаря данных (столбец, таблица, представление ожидания) для привязки, если это необходимо, из Projection и DataSource ожидание существует, но означает это SQL Оператор да может быть выполнен и сгенерировать исполняемый план.
  3. Оптимизировать:в целомиз База данных будетпоставлятьнесколькоплан выполнения,Эти планы обычно имеют текущую статистику.,База данных выберет лучший план среди этих планов.,Создайте оптимальный план выполнения.
  4. Выполнять:перед выполнениемиз Шаги, чтобы получитьизоптимальный план выполнения,Верните фактический запрос, чтобы получить набор данных.

3.3

Выполняемый процесс Spark SQL

Spark SQL использует метод, аналогичный реляционным базам данных, для обработки операторов SQL и соответствует структуре композиции Catalyst.

Выполняемый процесс Spark SQL

Ниже для иллюстрации используются примеры SQL и графические средства:

3.3.1. Используйте SessionCatalog для сохранения метаданных.

SQLContext необходимо инициализировать перед анализом операторов SQL, который определяет контекст SQL Spark, а SessionCatalog загружается перед вводом операторов SQL.

При инициализации SQLContext метаданные будут сохранены в SessionCatalog, включая имя базы данных, имя таблицы, имя поля, тип поля и т. д. Эти данные будут использоваться при разрешении несвязанных логических планов.

3.3.2 Генерация несвязанных логических планов с помощью Antlr.

Spark2.0 Начните использовать Antlr Провести морфологический и грамматический анализ, Antlr Будет построено синтаксическое дерево, сгенерированное на основе ключевых слов, которое представляет собой несвязанный логический план выполнения (неразрешенные Logical план), в том числе Unresolved Relation、Unresolved Function и Unresolved Attribute。

▲ Анализировать SQL и генерировать абстрактное синтаксическое дерево (несвязанный логический план выполнения)

3.3.3 Используйте Анализатор для привязки логического плана.

На этом этапе анализатор использует правила анализа в сочетании с метаданными SessionCatalog для анализа несвязанного логического плана и создания связанного логического плана (анализируемого логического плана).

Конкретный процесс:

Создайте экземпляр простого анализатора, затем просмотрите предопределенный пакет и запустите правила в пакете с помощью метода выполнения родительского класса Rule Executor. Каждое правило будет обрабатывать несвязанный логический план.

Некоторые из них можно обработать за один синтаксический анализ, а некоторые требуют нескольких итераций. Итерация не остановится, пока не достигнет времени фиксированной точки или не произойдет никаких изменений в древовидной структуре до и после этих двух раз.

▲ Добавьте метаданные в синтаксическое дерево и создайте логический план привязки.

3.3.4. Используйте Оптимизатор для оптимизации логических планов.

Optimizer методы реализации и обработки следуют Analyzer Аналогично определите ряд Optimization Правила, используйте их Rules Воля связывает логический план для итеративной обработки, завершает работу по слиянию, сокращению столбцов и оптимизации ожидания предикатов и генерирует оптимизированный логический план (Оптимизированный Logical Plan)。

▲ Predicate Pushdown (предикатное нажатие вниз), Фильтр перемещается в положение сканирования, а данные, соответствующие условиям, отфильтровываются перед выполнением операции соединения, чтобы уменьшить объем данных в операции.

▲ Column Pruning (очистка столбцов) сохраняет только те столбцы, которые используются в запросе, и удаляет другие столбцы, чтобы уменьшить объем обрабатываемых данных и повысить скорость.

3.3.5 Используйте SparkPlanner для создания физических планов для исполняемых планов.

SparkPlanner использует стратегии планирования для преобразования оптимизированного логического плана и создания исполняемого физического плана (физического плана).

На основе прошлой статистики производительности выберите лучшую модель затрат плана физического выполнения и, наконец, создайте исполняемое дерево плана физического выполнения, чтобы получить SparkPlan.

▲ Используйте метод queryExecution для просмотра логического плана выполнения.

▲ Используйте метод объяснения для просмотра плана физического выполнения.

3.3.6. Используйте выполнение для выполнения физического плана.

Прежде чем, наконец, фактическое выполнение плана физического выполнения, еще предстоит Preparations Обработка правил, наконец, называется SparkPlan из execute(),Выполнить физический планрасчет RDD。

▲ Выполнить физический план и вернуть данные результата.

После описанного выше процесса процесс записи пользователя завершается. SQL заявление (или DataFrame/Dataset), приезжать Spark внутренний RDD Конкретная логика работы трансформации.

Позже будет новая глава, в которой будет показано, как практиковать Spark SQL, так что следите за обновлениями!

4

Абстракция данных Spark SQL

существовать Spark SQL В DataFrame есть две абстракции данных: и DataSet。

4.1

DataFrame

существовать Spark середина,DataFrame это своего рода RDD — базовый распределенный набор данных.,Аналогично традиционной базе данныхиздвумерныйповерхностьсетка。

DataFrame и RDD Основное различие между изсуществовать состоит в том, что первое имеет Schema Метаинформация, т.е. DataFrame. Представленный набор данных двумерной таблицы в каждом столбце имеет имя и тип информации о структуре данных. В то же время и Hive Аналогично, DataFrame Вложенные типы данных (Struct, Array и Map)。

Это делает Spark SQL Получите больше информации о структурной информации, которая скрыта в DataFrame За кулисами из Источник данных также действует на DataFrame вышеиз Трансформация осуществляетсяпротивсексизоптимизация,Наконец, цель значительного повышения эффективности времени выполнения достигнута.

С другой стороны RDD,Зависит Не зная конкретной структуры хранимых элементов данных, Spark Core может толькосуществовать Stage Слои просты в выполнении、Универсальныйизсборочная линияоптимизация。

Кроме того, из API С точки зрения простоты использования DataFrame API Предоставляет набор реляционных операций высокого уровня, которые лучше функциональных. RDD API Будьте более дружелюбны и устанавливайте более низкие барьеры для входа.

DataFrame имеет следующие характеристики:

  • RDD дараспределенныйиз Java вернослонизсобирать;DataFrame дараспределенныйиз Row вернослонизсобирать。
  • DataFrame Помимо предоставления более RDD Помимо более богатых операторов, более важно повысить эффективность выполнения и сократить чтение данных. также Оптимизация плана реализации,Например, нажатие предиката и ожидание сокращения столбца.
  • DataFrame предоставленные для данных Schema изView,Думайте об этом как о базе данныхсерединаизодин кусочекповерхность Приходитьвернообращаться。
  • DataFrame Он также использует механизм отложенного выполнения, но его производительность лучше, чем RDD Если быть высоким, то основная причина заключается в том, что Catalyst серединаиз Optimizer Оптимизируйте план выполнения.
  • DataFrame да Зависит от R, Опыт Pandas в обработке небольших наборов данных применяется к обработке распределенных больших наборов данных.
  • существовать Spark 1.3 До версии DataFrame Вызов SchemaRDD。

4.2

DataSet

DataFrame имеет следующие ограничения:

  • Небезопасный тип времени компиляции: DataFrame API Нет поддержки безопасности во время компиляции.секс,Это ограничивает существование структуры при манипулировании данными без знания,Делает существование действительным во время компиляции,Но при выполнении кода возникает исключение во время выполнения.
  • Невозможно работать с объектом домена (объект домена отсутствует): преобразовать объект домена в DataFrame После этого его нельзя перегенерировать в от, поэтому пишет, что оригинал нельзя перегенерировать RDD。

На основании двух вышеуказанных пунктов, от Spark 1.6 начать появляться Набор данных, как DataFrame API Расширение — строго типизированный объект из конкретного домена, который может быть преобразован параллельно с функциональными или реляционными операциями в сочетании с RDD и DataFrame из Преимуществ, чтобы Spark 2.0 генерал-лейтенант DataFrame и DataSet слиться.

каждый DataSet Еще есть один под названием DataFrame из Типизированный вид, такой DataFrame да Row Тип из DataSet, то есть Набор данных[строка]. Следовательно, DataFrame Может рассматриваться как особый тип из DataSet типа Row。

RDD, DataFrame, DataSet из отношений

DataSet API да DataFrames из Расширять,Он обеспечивает типобезопасный объектно-ориентированный интерфейс программирования.,Это строго типизированная неизменяемая коллекция объектов.,Сопоставляется с реляционной схемой.

Преимущества DataSet:

  • против RDD、DataFrame и DataSet Сравнивая программирование трех, DataSet API Независимо от синтаксических ошибок и ошибок анализа, их можно обнаружить при компиляции, и RDD и DataFrame Иногда требуется, чтобы существование было обнаружено во время выполнения.
  • DataSet и RDD Для сравнения, Зависит от в DataSet data, использовать специальную кодировку,Таким образом, существование экономит больше памяти при хранении данных.
  • и RDD по сравнению с DataSet сохраняет больше информации описания.,Концептуальнождатьтакой же Вреляционная база данныхсерединаиздвумерныйповерхность。
  • и DataFrame По сравнению с DataSet сохраняет информацию о типе.,дамощный Тип из,Обеспечивает проверку типов во время компиляции.

4.3

Различия между RDD, DataFrame и DataSet

4.3.1. структурноизразличия

RDD、DataFrame、DataSet существоватьструктурноизразличия

  • РДД[Человек]: с Person — параметр типа,Но не понимаю его внутреннюю структуру.
  • DataFrame: предоставляет подробную структурную информацию. Schema,Включить столбец с именем и типом данных,Аналогично традиционной базе данныхиздвумерныйповерхность。
  • DataSet[Person]: содержит не только информацию о схеме, но и информацию о типе.

4.3.2. данныеизразличия

Предположим, что в RDD[Person] есть две строки данных:

Данные в но DataFrame:

Язык кода:javascript
копировать
DataFrame = RDD[Person] - Дженерики + Schema + SQL + оптимизация

Данные в Dataset[Person]:

Язык кода:javascript
копировать
Dataset[Person] = DataFrame + Дженерики = RDD[Person] + Schema + SQL + оптимизация

Данные в Dataset[Row]:

Язык кода:javascript
копировать
DataFrame = DataSet[Row]

Это можно увидеть более интуитивно по данным. RDD、DataFrame、DataSet междуизразличия。

5

SparkSession

Spark 2.0 введено в SparkSession, который предоставляет пользователям единую точку входа для изучения ииспользования. Spark из различных функций и позволяет пользователям вызывать его DataFrame и DataSet изолированный API писать Spark программа.

Самое главное,Это снижает потребность пользователей в понимании некоторых концепций.,Облегчает нам общение и Spark.

SparkSession можно использовать непосредственно в Spark Shell.

существовать Spark Первые днииз Версия Средний, ИскраContext да Spark от главной точки входа, Зависит от В RDD даосновнойиз API,и Spark Должен быть создан до взаимодействия SparkConf и SparkContext, через SparkContext создавать и эксплуатировать RDD。

верно Вдругойиз API,нуждатьсяиспользоватьдругойиз Контекст. Например, для Потоковая передача, нужно использовать Стриминг Контекст; SQL, нужно использовать SQLКонтекст; для Улей, нужно использовать HiveContext。

носледовать DataSet и DataFrame из API Постепенно становится стандартом API, для них необходимо установить точки доступа.

таксуществовать Spark2.0, представил SparkSession как DataSet и DataFrame API из Точка входа, SparkSession Инкапсулированный SparkConf и Искра Контекст. Для обратной совместимости SQLContext и HiveContext Также сохранено, заключено в капсулу существующее SparkSession середина.

Поэтому при использовании SparkSession нет необходимости явно создавать SparkConf, SparkContext и SQLContext.

SparkSession По сути да SQLContext и HiveContext из комбинации (могут быть добавлены в будущем StreamingContext),таксуществовать SQLContext и HiveContext Доступно на API существовать SparkSession На том же да можно использоватьиз.

SparkSession внутренний Инкапсулированный SparkContext, поэтому расчет на самом деле да Зависит от SparkContext Завершенный.

Информация об авторских правах: © Олаф Протце / Alamy Stock Photo

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.