gpt4 book ai didi

apache-spark - 为什么我收到错误 : "Size exceed Integer.MAX_VALUE" when using spark+cassandra?

转载 作者:行者123 更新时间:2023-12-01 16:15:06 27 4
gpt4 key购买 nike

我有 7 个 cassandra 节点(5 个节点,32 核、32G 内存,4 个节点,4 核、64G 内存),并在该集群上部署了 Spark Worker,Spark 的 Master 位于第 8 个节点。我用了spark-cassandra-connector对于他们来说。现在我的 cassandra 拥有近 10 亿条记录和 30 个字段,我编写的 scala 包含以下代码片段:

def startOneCache(): DataFrame = {
val conf = new SparkConf(true)
.set("spark.cassandra.connection.host", "192.168.0.184")
.set("spark.cassandra.auth.username", "username")
.set("spark.cassandra.auth.password", "password")
.set("spark.driver.maxResultSize", "4G")
.set("spark.executor.memory", "12G")
.set("spark.cassandra.input.split.size_in_mb","64")

val sc = new SparkContext("spark://192.168.0.131:7077", "statistics", conf)
val cc = new CassandraSQLContext(sc)
val rdd: DataFrame = cc.sql("select user_id,col1,col2,col3,col4,col5,col6
,col7,col8 from user_center.users").limit(100000192)
val rdd_cache: DataFrame = rdd.cache()

rdd_cache.count()
return rdd_cache
}

在spark的master中,我使用spark-submit来运行上面的代码,当执行语句:rdd_cache.count()时,我得到了一个ERROR 在一个工作节点:192.168.0.185:

16/03/08 15:38:57 INFO ShuffleBlockFetcherIterator: Started 4 remote fetches in 221 ms
16/03/08 15:43:49 WARN MemoryStore: Not enough space to cache rdd_6_0 in memory! (computed 4.6 GB so far)
16/03/08 15:43:49 INFO MemoryStore: Memory use = 61.9 KB (blocks) + 4.6 GB (scratch space shared across 1 tasks(s)) = 4.6 GB. Storage limit = 6.2 GB.
16/03/08 15:43:49 WARN CacheManager: Persisting partition rdd_6_0 to disk instead.
16/03/08 16:13:11 ERROR Executor: Managed memory leak detected; size = 4194304 bytes, TID = 24002
16/03/08 16:13:11 ERROR Executor: Exception in task 0.0 in stage 1.0 (TID 24002)
java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE

我只是认为最终错误Size超出Integer.MAX_VALUE是由警告引起的:16/03/08 15:43:49 WARN MemoryStore:没有足够的空间来缓存rdd_6_0内存! (到目前为止计算出 4.6 GB) 之前,但我不知道为什么,或者我是否应该设置大于 .set("spark.executor.memory", "12G") code> ,我应该怎么做才能纠正这个问题?

最佳答案

No Spark shuffle block can be greater than 2 GB.

Spark uses ByteBuffer as abstraction for storing blocks and its size is limited by Integer.MAX_VALUE (2 billions).

分区数量较少可能导致洗牌 block 大小较高。要解决此问题,请尝试使用 rdd.repartition() 增加分区数量。或rdd.coalesce()或。

如果这没有帮助,则意味着至少有一个分区仍然太大,您可能需要使用一些更复杂的方法来使其更小 - 例如使用随机性来均衡各个分区之间 RDD 数据的分布分区。

关于apache-spark - 为什么我收到错误 : "Size exceed Integer.MAX_VALUE" when using spark+cassandra?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35863441/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com