Можно ли использовать Apache Spark в качестве замены базы данных? (Например, заменить Mysql) - PullRequest
0 голосов
/ 07 февраля 2020

Мне нужно решение для масштабируемой базы данных, которое может масштабироваться до нескольких рабочих узлов, и я столкнулся с Apache Spark SQL, который кажется очень мощным и устойчивым. Могу ли я использовать это как замену Mysql? Я пытался создавать, читать, обновлять, удалять значения из DataFrame, но кажется, что он не был создан для этой цели? Я (в настоящее время) не могу найти способ обновления и строк ... Это похоже на то, что это действительно хорошо для запроса данных, когда они у вас есть, но не для вставки данных

Я ошибаюсь? Я чрезвычайно новичок в Spark и не хочу тратить время на попытки превратить его во что-то, что не

В случае, если его нельзя использовать в качестве базы данных ... это означает, что Spark просто используется для аналитики? Должен ли я хранить свои данные с использованием базы данных, а затем загружать набор данных в spark, если мне нужна информация в реальном времени?

Ответы [ 3 ]

2 голосов
/ 07 февраля 2020

Краткий ответ: Нет.

Строка описания на веб-сайте Spark гласит:

Apache Spark ™ - это унифицированный механизм аналитики для крупномасштабной обработки данных.

И документация Spark SQL описывает это:

Одно из применений Spark SQL - выполнение SQL запросов . Spark SQL также можно использовать для чтения данных из существующей установки Hive. [...] При запуске SQL из другого языка программирования результаты будут возвращены в виде набора данных / DataFrame. Вы также можете взаимодействовать с интерфейсом SQL, используя командную строку или через JDBC / ODB C.

Так что да, Spark позволяет выполнять SQL запросов для фреймов данных (в результате чего в других фреймах данных), но фреймы данных Spark являются неизменяемыми, и изменение данных обычно выполняется путем экспорта запрашиваемых и преобразованных наборов данных обратно в базовую базу данных (SQL / Relational или нет) или другое хранилище (файловая система / DFS).

Spark даже позволяет приложениям подключаться к нему через JDB C и отправлять запросы, как если бы это была СУБД, но она не предназначена для замены баз данных. Придерживайтесь использования свечи для пакетной и специальной обработки c или анализа. На самом деле, даже для запросов SQL обычных приложений вы должны предпочесть базу данных, потому что Spark может быть неэффективной альтернативой для типичных запросов произвольного доступа (он обрабатывает данные в памяти, поэтому он может быть вынужден делать ненужные операции чтения, чтобы найти и вернуть небольшую часть данных).

1 голос
/ 07 февраля 2020

Исследуйте озеро Дельта. Delta lake обеспечивает кислотные транзакции, и вы можете создать надежное «хранилище данных» внутри озера данных (например, s3 или adls).

Это означает, что вы можете выполнять обновление / удаление / вставку / объединение таблиц Delta.

Имейте в виду, что Spark является сильным кандидатом на уровень обработки и подготовки, что означает, что вы можете загружать данные из различных источников в пакетном или потоковом режиме, смешивать их вместе, если это необходимо, и вы можете разобраться в своих данных с помощью Delta lake.

Однако для обслуживающего слоя существуют более совершенные инструменты, которые могут обрабатывать множество одновременных пользователей / запросов, таких как sql базы данных или dremio.

0 голосов
/ 09 февраля 2020

В качестве базы данных OLTP для транзакций, в которых вы обновляете несколько таблиц и фиксируете работу: нет, нет шансов.

В качестве основы для анализа данных в хранилищах данных, например OLTP, да.

поставить иначе, если ваш код SQL имеет эту строку вверху

BEGIN TRANSACTION

, то вам нужна база данных, такая как MySQL, Postgres, et c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...