Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 火花池选项_Apache Spark_Cassandra_Spark Cassandra Connector - Fatal编程技术网

Apache spark 火花池选项

Apache spark 火花池选项,apache-spark,cassandra,spark-cassandra-connector,Apache Spark,Cassandra,Spark Cassandra Connector,我很难理解如何使用池选项的设置,也无法判断它们是否从该来源工作: SparkSession val会考虑集群中的池选项吗 我的Scala代码: package com.zeropoints.processing import org.apache.spark.SparkContext import org.apache.spark.SparkConf import org.apache.spark.sql.SparkSession import com.datastax.spark.conne

我很难理解如何使用池选项的设置,也无法判断它们是否从该来源工作:

SparkSession val会考虑集群中的池选项吗

我的Scala代码:

package com.zeropoints.processing

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
import com.datastax.spark.connector._
import com.datastax.driver.core.Cluster
import com.datastax.driver.core.PoolingOptions
import com.datastax.driver.core.HostDistance

//This object provides the main entry point into spark processing
object main {

  var appName = "Processing" 

  lazy val sparkconf:SparkConf = new SparkConf(true).setAppName(appName)

  lazy val poolingOptions:PoolingOptions = new PoolingOptions()

  lazy val cluster:Cluster = Cluster.builder().withPoolingOptions(poolingOptions).build()

  lazy val spark:SparkSession = SparkSession.builder().config(sparkconf).getOrCreate

  lazy val sc:SparkContext = spark.sparkContext

  def main(args: Array[String]) {
    //Set pooling stuff
    poolingOptions.setConnectionsPerHost(HostDistance.LOCAL, 6, 60)

    //DF and RDDs tasks...
    spark.sql("select * from data.raw").groupBy("key1,key2").agg(sum("views")).
        write.format("org.apache.spark.sql.cassandra").options(Map( "table" -> "summary", "keyspace" -> "data")).
        mode(org.apache.spark.sql.SaveMode.Append).save()

    //..more stuff
  }

}

不,Spark Connector不会考虑您的池配置-它以不同的方式工作,特别是当您考虑在分布式环境中执行代码时-您的
setConnectionsPerHost
仅在驱动程序中执行,不会影响执行者

正确的方法是通过Spark配置参数指定必要的设置。文档具有和
连接。每个执行器的连接\u max
可能是您所需要的。您还可以编写自己的类来实现trait
CassandraConnectionFactory
,并提供
createCluster
函数的实现。然后可以将该类名指定为
connection.factory
配置参数


但主要的问题是——你真的需要调整这些选项吗?你认为处理速度慢吗?Java驱动程序文档建议每个主机有一个连接,以避免给Cassandra带来额外的负载。

完全同意,增加每个主机的连接不太可能提高性能。在测试中,我发现通过增加值,您可以获得一些吞吐量改进,但通常只有在完全停止加载时,即使这样,改进也非常有限。我将研究更新datastax驱动程序文档以使其更加清晰。好的,看起来您的Spark代码正在到达默认限制为256个机上请求的“远程DC”。您可以尝试将
connection.local\u dc
参数设置为您的“本地”Casasndra数据中心的名称-在某些情况下,驱动程序无法猜到您的代码位于何处。很抱歉,回复太晚。我将尝试设置它,看看它是如何进行的。谢谢你的帮助