我正在使用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());
}
答案 0 :(得分:8)
在谷歌搜索后,我喜欢最新的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());
}
答案 1 :(得分:6)
为了加快速度,您可以在创建SparkConf时尝试设置spark.cassandra.input.split.size_in_mb。
可能是执行程序试图一次将所有行读入内存。如果它们都不合适,可能会导致它将RDD分页到磁盘,导致时间过长。通过指定拆分大小,它将计算块中的行,然后丢弃它们而不是分页到磁盘。
您可以看到如何设置拆分大小here的示例。