3

我正在使用 Spark Cassandra 连接器。从 Cassandra 表中获取数据需要 5-6 分钟。在 Spark 中,我在日志中看到了许多任务和 Executor。原因可能是 Spark 将进程划分为许多任务!

下面是我的代码示例:

public static void main(String[] args) {

    SparkConf conf = new SparkConf(true).setMaster("local[4]")
            .setAppName("App_Name")
            .set("spark.cassandra.connection.host", "127.0.0.1");

    JavaSparkContext sc = new JavaSparkContext(conf);

    JavaRDD<Demo_Bean> empRDD = javaFunctions(sc).cassandraTable("dev",
            "demo");
    System.out.println("Row Count"+empRDD.count());
}
4

2 回答 2

10

在 Google 上搜索后,我喜欢最新的 spark-cassandra-connector 中的问题。参数spark.cassandra.input.split.size_in_mb 默认值为 64 MB,在代码中被解释为 64 字节。所以尝试 spark.cassandra.input.split.size_in_mb = 64 * 1024 * 1024 = 67108864

听到是一个例子:

public static void main(String[] args) {

    SparkConf conf = new SparkConf(true).setMaster("local[4]")
            .setAppName("App_Name")
            .set("spark.cassandra.connection.host", "127.0.0.1")
            .set("spark.cassandra.input.split.size_in_mb","67108864");


    JavaSparkContext sc = new JavaSparkContext(conf);

    JavaRDD<Demo_Bean> empRDD = javaFunctions(sc).cassandraTable("dev",
            "demo");
    System.out.println("Row Count"+empRDD.count());
}
于 2015-07-23T11:57:48.463 回答
7

为了加快速度,您可以在创建 SparkConf 时尝试设置 spark.cassandra.input.split.size_in_mb。

可能是执行程序试图一次将所有行读入内存。如果它们不适合,可能会导致它将 RDD 分页到磁盘,从而导致时间变慢。通过指定拆分大小,它将以块的形式计算行数,然后丢弃它们而不是分页到磁盘。

您可以在此处查看如何设置拆分大小的示例。

于 2015-07-23T11:52:58.263 回答