getting busypoolexception com.datastax.spark.connector.writer.queryexecutor,我怎么了?

pexxcrt2  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(269)

我使用的是spark-sql-2.4.1、spark-cassandra-connector 2.11-2.4.1以及java8和apache cassandra 3.0版本。
我有我的spark提交或spark集群环境,可以加载20亿条记录。

--executor-cores 3 
--executor-memory 9g 
--num-executors 5 
--driver-cores 2 
--driver-memory 4g

使用以下配置

cassandra.concurrent.writes=1500
cassandra.output.batch.size.rows=10
cassandra.output.batch.size.bytes=2048
cassandra.output.batch.grouping.key=partition 
cassandra.output.consistency.level=LOCAL_QUORUM
cassandra.output.batch.grouping.buffer.size=3000
cassandra.output.throughput_mb_per_sec=128

这项工作大约需要2个小时,时间真的很长
当我检查日志时,会看到warn com.datastax.spark.connector.writer.queryexecutor-busypoolexception
如何解决这个问题?

nvbavucw

nvbavucw1#

您的值不正确 cassandra.concurrent.writes -这意味着您要同时发送1500个并发批处理。但默认情况下,java驱动程序允许1024个同时请求。通常,如果此参数的值太高,可能会导致节点过载,从而导致任务重试。
另外,其他设置也不正确-如果您指定 cassandra.output.batch.size.rows ,则其值将覆盖 cassandra.output.batch.size.bytes . 有关更多详细信息,请参阅spark cassandra连接器参考的相应部分。
性能调优的一个方面是拥有正确数量的spark分区,这样就可以获得良好的并行性——但这实际上取决于您的代码、cassandra集群中有多少节点等。
p、 另外,请注意,配置参数应该从 spark.cassandra. ,不是简单的 cassandra. -如果在此窗体中指定了这些参数,则将忽略这些参数并使用默认值。

相关问题