SnappyData Spark Scall java.sql.BatchUpdateException
Posted
技术标签:
【中文标题】SnappyData Spark Scall java.sql.BatchUpdateException【英文标题】: 【发布时间】:2017-07-11 21:47:42 【问题描述】:所以,我有大约 35 GB 的 zip 文件,每个包含 15 个 csv 文件,我创建了一个 scala 脚本来处理每个 zip 文件和每个 zip 文件中的每个 csv 文件。
问题在于,在处理了一些文件后,脚本会出现此错误
错误执行程序:阶段 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 和 spark 缺乏了解)已使用的内存已满......我的问题......我如何增加大小使用的内存?或者如何清空内存中的数据并将其保存在磁盘中?
我可以关闭已开始的会话并释放内存吗? 我不得不重新启动服务器,删除已处理的文件,然后我可以继续导入,但在其他一些文件之后......再次......同样的异常
我的 csv 文件很大...最大的文件大约为 1 GB,但这种异常不仅发生在大文件中,而且在累积多个文件时...直到达到某个大小...所以我在哪里更改它内存使用大小?
我有 12GB 内存...
【问题讨论】:
【参考方案1】:您可以使用 RDD 持久性并存储到磁盘/内存或组合:https://spark.apache.org/docs/2.1.0/programming-guide.html#rdd-persistence
另外,请尝试在读取文件时添加大量分区:sc.textFile(path, 200000)
【讨论】:
【参考方案2】:我认为您的可用内存不足。异常消息具有误导性。如果您的机器上只有 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)
如果您认为您有足够的内存,请加载完整数据。
希望能成功。
【讨论】:
嗨,谢谢,是的,我知道我的数据不适合内存,总量约为 300+ GB...所以这里的问题是如何首先增加内存来处理每个 csv (大于 1 GB)没有任何问题并将数据存储在磁盘中或与内存结合。我找到了有关 RDD 持久性的信息,我想这是我的解决方案的一部分,但是如何/在哪里配置它?并感谢我已经在配置它们的提示......以及......测试......【参考方案3】:BatchUpdateException 告诉我您正在创建 Snappy 表并在其中插入数据。此外,在大多数情况下,BatchUpdateException 意味着内存不足(异常消息需要更好)。所以,我相信你对记忆的看法可能是对的。为了释放内存,您必须删除您创建的表。有关内存大小和表大小的信息,您可能需要阅读以下文档:
http://snappydatainc.github.io/snappydata/best_practices/capacity_planning/#memory-management-heap-and-off-heap
http://snappydatainc.github.io/snappydata/best_practices/capacity_planning/#table-memory-requirements
此外,如果您有大量无法放入内存的数据,您可以将其溢出到磁盘。关于溢出配置,请参阅以下文档:
http://snappydatainc.github.io/snappydata/best_practices/design_schema/#overflow-configuration
希望对您有所帮助。
【讨论】:
以上是关于SnappyData Spark Scall java.sql.BatchUpdateException的主要内容,如果未能解决你的问题,请参考以下文章
Snappydata 存储与来自现有 spark 安装的 hive 元存储
关于使用 snappydata/bin> ./spark-shell.sh 脚本启动定位器的问题
SnappyData snappy-sql PUT INTO 导致错误:spark.sql.execution.id 已设置