Apache spark 火花池选项
我很难理解如何使用池选项的设置,也无法判断它们是否从该来源工作: SparkSession val会考虑集群中的池选项吗 我的Scala代码: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
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
可能是您所需要的。您还可以编写自己的类来实现traitCassandraConnectionFactory
,并提供createCluster
函数的实现。然后可以将该类名指定为connection.factory
配置参数
但主要的问题是——你真的需要调整这些选项吗?你认为处理速度慢吗?Java驱动程序文档建议每个主机有一个连接,以避免给Cassandra带来额外的负载。完全同意,增加每个主机的连接不太可能提高性能。在测试中,我发现通过增加值,您可以获得一些吞吐量改进,但通常只有在完全停止加载时,即使这样,改进也非常有限。我将研究更新datastax驱动程序文档以使其更加清晰。好的,看起来您的Spark代码正在到达默认限制为256个机上请求的“远程DC”。您可以尝试将
connection.local\u dc
参数设置为您的“本地”Casasndra数据中心的名称-在某些情况下,驱动程序无法猜到您的代码位于何处。很抱歉,回复太晚。我将尝试设置它,看看它是如何进行的。谢谢你的帮助