在分布式cassandra DSE spark集群上执行作业

时间:2018-03-15 11:56:25

标签: scala apache-spark cassandra datastax-enterprise

我有三个节点Cassandra DSE集群和数据库模式,RF = 3。现在我正在创建一个要在DSE spark上执行的scala应用程序。 Scala代码如下: -

package com.spark

import com.datastax.spark.connector._
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.sql._
import org.apache.spark.sql.SQLContext

object sample {
def main(args: Array[String]) {
val conf = new SparkConf()
  .setMaster("local")
  .setAppName("testing")
  .set("spark.cassandra.connection.host", "192.168.0.40")
  .set("spark.driver.allowMultipleContexts", "true")
  .set("spark.executor.memory", "1g")
  .set("spark.driver.memory", "1g")
  .set("spark.driver.maxResultSize", "500M")
  .set("spark.executor.heartbeatInterval", "30s")
  .set("spark.submit.deployMode", "cluster")

val sc = new SparkContext(conf)
val lRDD = sc.cassandraTable("dbname", "tablename")
lRDD.collect.foreach(println)
}}

我正在使用

运行脚本
dse> bin/dse spark-submit --class com.spark.sample --total-executor-cores 4 /home/db-svr/sample.jar

所以,现在我想从1个节点执行我的spark应用程序,但是系统应该在内部对3个节点进行处理,并且我想监视它,以便我可以共同利用3个节点的RAM和处理器。我怎么能这样做?

此外,此当前脚本需要花费大量时间才能生成结果(表大小为100万行,每行128字节)。是否有我缺少的性能调整参数?

1 个答案:

答案 0 :(得分:2)

您可能想要改变一些事情。停止在多台机器上运行的主要原因是

.setMaster("local")

它指示应用程序不应该使用分布式资源管理器,而应该在应用程序进程中本地运行所有内容。使用DSE,您应该关注relevant documentation或从Spark Build Examples开始。

此外,你很可能永远不想设置

.set("spark.driver.allowMultipleContexts", "true")

在一个JVM中有多个Spark上下文会出现问题,通常意味着事情没有正确设置。