apachesparkjdbcrdd是否使用hdfs来存储数据库记录并将其分发给工作节点?我们使用jdbcrdd与apachespark上的数据库进行交互。我们想知道apachespark是使用hdfs分发和存储数据库表记录,还是工作节点直接与db交互。
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.scalaRDD必须实现 compute 方法,该方法返回rdd中每个分区的值的迭代器。jdbcrdd实现只是 Package 了一个jdbc结果集迭代器:
compute
override def getNext(): T = { if (rs.next()) { mapRow(rs) } else { finished = true null.asInstanceOf[T] } }
1条答案
按热度按时间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结果集迭代器: