Как Spark SQL доступ к базам данных - PullRequest
1 голос
/ 06 марта 2020

Предположим, вы обращаетесь к базе данных SQL с помощью spark SQL. С помощью RDD искрового разделения данных на множество различных частей, которые все вместе составляют набор данных.

Мой вопрос заключается в том, как Spark SQL управляет этим доступом с N узлов к базе данных. Я вижу несколько возможностей:

  1. Каждый узел СДР получает доступ к базе данных и строит свои части. Преимущество этого состоит в том, что узлам не приходится выделять много памяти, но база данных должна выдерживать N соединений с потенциально очень большим N.

  2. Один узел получает доступ к данным и отправляет данные другим узлам N-1 по мере необходимости. Проблема состоит в том, что этот единственный узел должен иметь все данные, и во многих случаях это невозможно. Возможно, это можно облегчить, получая данные по блокам.

Пакет JDB C использует объединенные соединения, чтобы избежать повторного подключения. Но это не решает эту проблему.

Какая справка объясняет, как spark управляет этим доступом к базе данных SQL? Сколько из этого можно параметризовать?

1 Ответ

2 голосов
/ 06 марта 2020

Это подробно описано на странице документации JDB C К другим базам данных источников данных.

Короче говоря, каждый узел, участвующий в задании, устанавливает sh a подключение к базе данных. Однако не число узлов определяет количество подключений, а настроенное количество разделов:

numPartitions: максимальное количество разделов, которое можно использовать для параллелизма при чтении таблицы и писать. Это также определяет максимальное количество одновременных соединений JDB C . Если число записываемых разделов превышает это ограничение, мы уменьшаем его до этого ограничения, вызывая coalesce (numPartitions) перед записью.

А что касается

Пакет JDB C использует объединенные соединения, чтобы избежать повторного подключения. Но это не решает эту проблему.

JDB C драйверы не подразумевают пул соединений. Приложение устанавливает, настраивает и использует пул соединений. Если Spark не требуется повторно подключаться к базе данных для получения данных, ему не нужно устанавливать sh несколько подключений на раздел. Таким образом, пул соединений не понадобится.

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

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