Apache Spark是直接从RDBMS处理数据的正确选择吗?

时间:2018-08-28 08:08:59

标签: apache-spark apache-spark-sql hadoop2 apache-spark-dataset apache-spark-2.0

我已经完成了一个有关如何直接使用Apache Spark与RDBMS [MySQL]进行交互的POC。我可以使用以下代码从spark-shell与MySQL数据库进行交互:

>>> 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是否可以一次从RDBMS读取数据,将其存储在内存中,然后进行处理?

     

如果Apache Spark从MySQL读取数据之间的连接失败,该怎么办?如果两者之间的某些网络连接完全失败,Spark会从头开始启动该过程,还是我重新运行整个作业?

任何快速参考将不胜感激。

关于, 布普什

1 个答案:

答案 0 :(得分:1)

在从任何rdbms读取数据时产生火花,从而与服务器建立并行连接,并且并行会话的数量取决于以下参数

numPartitions PartitionColumn-它应该是一个数字列 下界 upperBound

将从rdbms并行读取数据,并且一次可以控制多少条记录可以被

控制

fetchsize参数

始终建议将您各自的查询推送到数据库,并让数据库处理优化,而不是直接在dbtable选项中提供表名。

如果连接失败,则无需重新运行作业。 Spark将重试连接并读取数据