所以,我有大约35 GB的zip文件,每个包含15个csv文件,我创建了一个scala脚本,每个zip文件处理每个zip文件和每个csv文件。
问题是,经过一定数量的文件后,脚本会发出此错误
ERROR执行程序:阶段114.0中的任务0.0中的异常(TID 3145) java.io.IOException:java.sql.BatchUpdateException:(Server = localhost / 127.0.0.1 [1528] Thread = pool-3-thread-63)XCL54.T:[0]插入键[7243901,7243902,
字符串继续显示未插入的所有键(记录)。
所以我发现显然(我说的显然是因为我对scala和snappy以及火花缺乏了解)已经使用的内存已满...我的问题...如何增加大小使用的内存?或者如何清空内存中的数据并将其保存在磁盘中?
我是否可以关闭会话并以此方式释放内存? 我不得不重新启动服务器,删除处理的文件,然后我可以继续导入但是在其他一些文件之后......再次......同样的异常
我的csv文件很大......最大的一个是大约1 GB但是这个异常不仅发生在大文件上,而且在累积多个文件时......直到达到某个大小...所以我在哪里更改内存使用大小?
我有12GB内存......
答案 0 :(得分:1)
您可以使用RDD持久性并存储到磁盘/内存或组合:https://spark.apache.org/docs/2.1.0/programming-guide.html#rdd-persistence
此外,尝试在阅读文件时添加大量分区:sc.textFile(path, 200000)
答案 1 :(得分:1)
我认为你的可用内存不足了。异常消息具有误导性。如果您的机器上只有12GB的内存,我想知道您的数据是否合适。 我要做的是首先弄清楚你需要的记忆力。
1. Copy conf/servers.template to conf/servers file
2) Change this file with something like this: localhost -heap-size=3g
-memory-size=6g //this essentially allocates 3g in your server for computations (spark, etc) and allocates 6g of off-heap memory for your data (column tables only).
3) start your cluster using snappy-start-all.sh
4) Load some subset of your data (I doubt you have enough memory)
5) Check the memory used in the SnappyData Pulse UI (localhost:5050)
如果您认为自己有足够的内存,请加载完整的数据。
希望能够解决问题。
答案 2 :(得分:1)
BatchUpdateException告诉我您正在创建Snappy表并在其中插入数据。此外,大多数情况下BatchUpdateException意味着内存不足(异常消息需要更好)。所以,我相信你对记忆的看法是正确的。要释放内存,您必须删除您创建的表。有关内存大小和表大小调整的信息,您可能需要阅读以下文档:
此外,如果您有大量数据无法容纳在内存中,则可以将其溢出到磁盘。请参阅以下有关溢出配置的文档:
http://snappydatainc.github.io/snappydata/best_practices/design_schema/#overflow-configuration
希望它有所帮助。