Pay*_*yf1 3 java hadoop mapreduce apache-spark
我在Virtualbox上有一个带有3个从属服务器的Spark独立集群。我的代码是在Java上进行的,并且可以与我的小型输入数据集(它们的输入总计大约100MB)一起正常工作。
我将虚拟机的RAM设置为16GB,但是当我对大型输入文件(约2GB)运行代码时,在我的减速部分中进行了数小时的处理后,我得到此错误:
Job aborted due to stage failure: Total size of serialized results of 4 tasks (4.3GB) is bigger than spark.driver.maxResultSize`
Run Code Online (Sandbox Code Playgroud)
我编辑了,spark-defaults.conf并为分配了更高的金额(2GB和4GB)spark.driver.maxResultSize。它没有帮助,并且出现了相同的错误。
不,我正在尝试8GB的内存,spark.driver.maxResultSize而我spark.driver.memory也和RAM大小(16GB)相同。但是我得到这个错误:
TaskResultLost (result lost from block manager)
Run Code Online (Sandbox Code Playgroud)
对此有何评论?我还附有一张图片。
我不知道问题是否是由的大尺寸引起的,maxResultSize或者这与代码中的RDD集合有关。我还提供了代码的映射器部分,以更好地理解。
JavaRDD<Boolean[][][]> fragPQ = uData.map(new Function<String, Boolean[][][]>() {
public Boolean[][][] call(String s) {
Boolean[][][] PQArr = new Boolean[2][][];
PQArr[0] = new Boolean[11000][];
PQArr[1] = new Boolean[11000][];
for (int i = 0; i < 11000; i++) {
PQArr[0][i] = new Boolean[11000];
PQArr[1][i] = new Boolean[11000];
for (int j = 0; j < 11000; j++) {
PQArr[0][i][j] = true;
PQArr[1][i][j] = true;
Run Code Online (Sandbox Code Playgroud)
通常,此错误表明您正在收集/将大量数据带入驱动程序。永远不要这样做。您需要重新考虑您的应用程序逻辑。
另外,您无需修改spark-defaults.conf即可设置属性。相反,您可以通过或中的--conf选项指定此类特定于应用程序的属性,具体取决于运行作业的方式。spark-shellspark-submit
解决了:
通过增加主 RAM 大小解决了该问题。我研究了我的案例,发现根据我的设计,分配 32GB RAM 就足够了。现在,通过这样做,我的程序运行良好并且可以正确计算所有内容。
| 归档时间: |
|
| 查看次数: |
2227 次 |
| 最近记录: |