Является ли Apache Spark верным вариантом для обработки данных непосредственно из RDBMS? - PullRequest
0 голосов
/ 28 августа 2018

Я выполнил один POC о том, как взаимодействовать с RDBMS [MySQL] напрямую с помощью Apache Spark. Мне удалось взаимодействовать с базой данных MySQL из spark-shell, используя следующий код:

>>> empDF = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/SPARKPOC").option("dbtable", "SPARKPOC.EMP").option("user", "myuser").option("password", "mypassword").option("driver", "com.mysql.jdbc.Driver").load()

>>> empDF.printSchema()
root
 |-- EMPNO: integer (nullable = true)
 |-- ENAME: string (nullable = true)
 |-- JOB: string (nullable = true)
 |-- MANAGERID: integer (nullable = true)
 |-- SALARY: double (nullable = true)
 |-- PHONE: long (nullable = true)
 |-- DEPTNO: integer (nullable = true)

>>> empDF.show()
18/08/27 22:16:47 WARN SizeEstimator: Failed to check whether UseCompressedOops is set; assuming yes
+-----+----------+---------+---------+------+-----------+------+
|EMPNO|     ENAME|      JOB|MANAGERID|SALARY|      PHONE|DEPTNO|
+-----+----------+---------+---------+------+-----------+------+
| 7369|     SMITA|    CLERK|     7902| 800.0| 9567342250|    20|
| 7499|     ANKUR| SALESMAN|     7698|1600.0|95673422300|    30|
| 7521|     VIJAY| SALESMAN|     7698|1250.0|95673422500|    30|
| 7566|      AJAY|  MANAGER|     7839|2975.0|       null|    20|

Аналогичным образом я также смог выполнить запрос с помощью Apache Spark и получить требуемые результаты из MySQL.

Я ищу немного ясности по поводу:

Читает ли spark данные за один раз из СУБД, сохраняет их в памяти и затем обрабатывает?

Что делать, если между серверами происходит сбой соединения, когда Apache Spark читает данные из MySQL? Если вообще возникает какое-либо сетевое соединение между ними, Spark запускает процесс сам с самого начала или я заново запускаю всю работу?

Будем благодарны за любые быстрые ссылки.

С уважением, Bhupesh

1 Ответ

0 голосов
/ 28 августа 2018

Spark при чтении данных с любых rdbms создает параллельное соединение с сервером, а количество параллельных сеансов зависит от следующих параметров

numPartitions PartitionColumn - это должен быть числовой столбец нижняя граница UpperBound

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

параметр fetchsize

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

Если ваше соединение не удалось, вам не нужно перезапускать вашу работу. Spark повторит соединение и прочитает данные

...