Apache Spark JDBCRDD是否使用HDFS存储数据库记录并将其分发给工作节点?我们正在使用JdbcRDD与apache spark上的数据库进行交互。我们想知道Apache Spark是否使用HDFS来分发和存储数据库表记录,或者工作节点是否直接与数据库进行交互。
答案 0 :(得分:2)
JdbcRDD不使用HDFS,将JDBC连接中的数据直接读取到工作者内存中的RDD。如果你想在HDFS上得到结果,你必须明确地将RDD保存到HDFS。
您可以在此处查看JdbcRDD如何运作https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/JdbcRDD.scala
RDD必须实现compute
方法,该方法返回RDD中每个分区值的迭代器。 JdbcRDD实现只包装JDBC结果集迭代器:
override def getNext(): T = {
if (rs.next()) {
mapRow(rs)
} else {
finished = true
null.asInstanceOf[T]
}
}