我正在使用datastax-4.6。我创建了一个cassandra表并存储了2crore记录。我试图使用scala读取数据。代码适用于少数记录,但当我尝试检索所有2crore记录时,它会显示以下错误。
**WARN BlockManagerMasterActor: Removing BlockManager BlockManagerId(1, 172.20.98.17, 34224, 0) with no recent heart beats: 140948ms exceeds 45000ms
15/05/15 19:34:06 ERROR ConnectionManager: Corresponding SendingConnection to ConnectionManagerId(C15759,34224) not found**
任何帮助?
答案 0 :(得分:3)
此问题通常与GC pressure
相关联增加spark.storage.blockManagerHeartBeatMs,以便Spark等待GC暂停结束。
SPARK-734建议设置-Dspark.worker.timeout=30000 -Dspark.akka.timeout=30000 -Dspark.storage.blockManagerHeartBeatMs=30000 -Dspark.akka.retry.wait=30000 -Dspark.akka.frameSize=10000
spark.cassandra.input.split.size - 将允许您更改cassandra读取的并行化级别。更大的分割大小意味着更多数据必须同时驻留在内存中。
spark.storage.memoryFraction和spark.shuffle.memoryFraction - RDD将占用的堆的数量(与shuffle内存和spark开销相反)。如果您没有进行任何改组,可以增加此值。数据库人员说,这个尺寸与你的oldgen一样大。
spark.executor.memory - 显然这取决于你的硬件。根据DataBricks,您最多可以达到55GB。确保为C *以及操作系统和操作系统页面缓存留下足够的RAM。请记住,较长的GC暂停会发生在更大的堆上。
出于好奇,您是否经常使用Spark解压缩整个C *表?用例是什么?