Apache Spark 需要 5 到 6 分钟才能从 Cassandra 简单地计算 10 亿行
Apache Spark taking 5 to 6 minutes for simple count of 1 billon rows from Cassandra
我正在使用 Spark Cassandra 连接器。
从 Cassandra table 获取数据需要 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());
}
为了加快速度,您可以尝试在创建 SparkConf 时设置 spark.cassandra.input.split.size_in_mb。
可能是执行程序试图一次将所有行读入内存。如果它们不适合,可能会导致将 RDD 分页到磁盘,从而导致时间变慢。通过指定分割大小,它会以块的形式计算行数,然后丢弃它们而不是分页到磁盘。
您可以查看如何设置拆分大小的示例 here。
在 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());
}
我正在使用 Spark Cassandra 连接器。 从 Cassandra table 获取数据需要 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());
}
为了加快速度,您可以尝试在创建 SparkConf 时设置 spark.cassandra.input.split.size_in_mb。
可能是执行程序试图一次将所有行读入内存。如果它们不适合,可能会导致将 RDD 分页到磁盘,从而导致时间变慢。通过指定分割大小,它会以块的形式计算行数,然后丢弃它们而不是分页到磁盘。
您可以查看如何设置拆分大小的示例 here。
在 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());
}