ApacheSparkJDBCRDD使用hdfs?

zpqajqem  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(265)

apachesparkjdbcrdd是否使用hdfs来存储数据库记录并将其分发给工作节点?我们使用jdbcrdd与apachespark上的数据库进行交互。我们想知道apachespark是使用hdfs分发和存储数据库表记录,还是工作节点直接与db交互。

ct3nt3jp

ct3nt3jp1#

jdbcrdd不使用hdfs,直接从jdbc连接读取数据到worker内存中的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实现只是 Package 了一个jdbc结果集迭代器:

override def getNext(): T = {
      if (rs.next()) {
        mapRow(rs)
      } else {
        finished = true
        null.asInstanceOf[T]
      }
}

相关问题