2016-01-21 1 views
0

Прежде всего, я использую Spark 1.5.2 на Amazon EMR и используя Amazon RDS для моей базы данных postgres.Возможно ли использовать базу данных SQL, пока Spark пишет на нее?

В настоящее время я работаю над тем, чтобы Spark записывал свои результаты в базу данных postgres, которую я использую с помощью API-интерфейса Spark jdbc. Хотя он работает правильно, меня беспокоит то, что если я попытаюсь подключиться к db, используя psql во время работы Spark, а затем попытаюсь прочитать из таблицы, на которую пишет Spark, это говорит мне, что еще нет строк. Это сохраняется до тех пор, пока Spark не закончится, а затем внезапно все строки появятся в db.

Это меня беспокоит, потому что конечная настройка должна состоять в том, чтобы регулярно запускать скрипт Spark и записывать больше данных в db, в то время как веб-сайт должен использовать этот db. Означает ли это, что я не смогу запросить db во время работы Spark?

Что вы думаете об этом? Я думал, что это может быть вопрос использования большего экземпляра для db (изначально я использовал самый маленький и самый дешевый - db.t2.micro), но я получаю ту же проблему с экземпляром класса db.m4.xlarge (хотя время для завершения этапа было сокращено наполовину).

+6

Время для изучения основ: [Изоляция транзакций] (http://www.postgresql.org/docs/9.1/static/transaction-iso.html) –

+2

Возможно, Spark использует одну транзакцию для вставки всех данных. Проблема заключается не в том, что вы не можете читать * ничего *, пока Spark пишет, это значит, что когда вы читаете, данные еще не были зафиксированы. – deceze

+1

@deceze Фактически каждый раздел сохраняется отдельно в рамках собственной транзакции. – zero323

ответ

1

Во-первых, другие плакаты верны. Spark использует транзакцию для записи в базу данных, поэтому вы не видите никаких данных до момента совершения транзакции.

Во-вторых, если вам действительно нужны данные, которые нужно вставлять в меньшие партии или в виде отдельных записей, вы всегда можете написать свой собственный код JDBC и использовать операцию map(), хотя это, вероятно, не отличная идея (но Я не знаю, каков ваш вариант использования, поэтому, возможно, есть веская причина, по которой вам это нужно).

+0

Спасибо за ответ! Как отмечали другие плакаты, мне все еще нужно изучать основы, но вроде бы в трудном месте, где я должен использовать технику, которую я действительно не готов использовать, поэтому мне придется делать это, задавая глупые вопросы по переполнение стека. И нет, мне это не нужно писать небольшими партиями, моя забота заключалась в том, действительно ли БД используется во время написания, и это так. Поэтому я не буду писать свой собственный JDBC-код, потому что, скорее всего, я испорчу его ужасно, и это не обязательно. –

 Смежные вопросы

  • Нет связанных вопросов^_^