为什么从 Cassandra 表读取数据集时 Spark 应用程序比本地文件需要更长的时间来执行



>我有以下代码,应用程序在生成结果后立即结束。

  def textProcess(sc: SparkContext) {
    val baseRDD = sc.textFile("C:\myDrive\test.log")    
    val result = baseRDD.map { x => x }.reduce((accum, current) => accum)
    println(result)
    sc.close()   
  }

但是当我使用 spark-cassandra-connector 对 Cassandra 运行以下代码时,应用程序仅在大约 10 秒延迟后结束。

  def dbProcess(sc: SparkContext) {
    val baseRDD = sc.cassandraTable("local_test", "configurations")
    val result = baseRDD.map { x => x.getString("keyname") }.reduce((accum,current) => accum)
    println(result)
    sc.close()    
  }

版本详细信息

Spark版本是1.6.x

   <dependency>
        <groupId>com.datastax.spark</groupId>
        <artifactId>spark-cassandra-connector_2.10</artifactId>
        <version>1.6.0</version>
    </dependency>
    <dependency>
        <groupId>com.datastax.cassandra</groupId>
        <artifactId>dse-driver</artifactId>
        <version>1.1.0</version>
    </dependency>
    <dependency>
        <groupId>com.datastax.cassandra</groupId>
        <artifactId>cassandra-driver-core</artifactId>
        <version>3.0.2</version>
    </dependency> 

我的问题是,为什么在处理火花-卡桑德拉-连接器时会出现这种延迟? 有没有办法避免这种延迟? 还是版本问题?(我尝试了几个其他版本,但结果完好无损(

为什么在处理Spark-Cassandra-Connector时会出现这种延迟?

基本上,差异归结为以下两行:

sc.textFile("C:\myDrive\test.log")

sc.cassandraTable("local_test", "configurations")

前者是对本地文件的相对便宜的访问,而后者访问远程Cassandra集群,这是一个相当繁重的网络操作。

撇开Cassandra集群的性能不谈,网络访问肯定比访问本地文件更耗时,不是吗?

最新更新