有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaApacheSpark只需5到6分钟就可以从Cassandra简单计算出10亿行

我正在使用Spark Cassandra连接器。 从Cassandra表中获取数据需要5-6分钟。在Spark中,我在日志中看到了许多任务和执行者。原因可能是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());
}

共 (2) 个答案

  1. # 1 楼答案

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

    Hear就是一个例子:

    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());
    }
    
  2. # 2 楼答案

    为了加快速度,你可以试着点燃火花。卡桑德拉。输入分裂创建SparkConf时的大小(单位:mb)

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

    您可以看到如何设置分割大小here的示例