3

我用:

  1. cassandra 2.1.12 - 3 个节点
  2. 火花 1.6 - 3 个节点
  3. 火花卡桑德拉连接器 1.6

我在 Cassandra 中使用令牌(不是 vnodes)。

我正在编写一个从 Cassandra 表中读取数据并显示其计数表的简单工作,该表有大约 7000 万行,并且需要 15 分钟。

当我读取数据并检查 RDD 的分区数时,它在 21000 左右,这太大了。如何控制这个数字?

我试过了splitCountsplit.size.in.mbs但他们告诉我相同数量的分区。

有什么建议么?

import org.apache.spark.{SparkContext, SparkConf} 
import com.datastax.spark.connector._
import org.apache.spark.sql.cassandra.CassandraSQLContext
import org.apache.spark.sql.cassandra._
import org.apache.spark.sql
import java.sql.DriverManager
import java.sql.Connection


object Hi {
  def main(args: Array[String])
  {
    val conf = new  SparkConf(true).set("spark.cassandra.connection.host", "172.16.4.196").set("spark.cassandra.input.split.size_in_mb","64")
    val sc = new SparkContext(conf)

    val rdd =  sc.cassandraTable("cw","usedcareventsbydatecookienew")
    println("hello world" + rdd.partitions)
    println("hello world" + rdd.count)
  }

}

这是我的参考代码。我现在运行 nodetool compact 我能够控制分区的数量,但整个过程仍然需要将近 6 分钟,我认为任何改进建议都太高了

4

2 回答 2

4

您在寻找spark.cassandra.input.split.size吗?

spark.cassandra.input.split.size 默认值 = 64。单个 Spark 分区中的近似行数。值越高,创建的 Spark 任务就越少。过多地增加该值可能会限制并行度。

于 2016-04-21T07:32:43.073 回答
0

当我在我的 cassandra 表上运行紧凑命令时,我的问题得到了解决,现在我可以使用 spark.cassandra.input.split.size 参数来控制它

于 2016-04-28T08:08:56.610 回答