首页 > 解决方案 > R 遇到致命错误并终止;在我导出 500GB 数据并且从那时起无法读取任何文件之后

问题描述

我试图处理一批 Himawari-8 数据并将它们导出到我想要的 tif 文件中。我使用的代码如下:

library(raster)
library(ncdf4)
library(rgdal)
library(DoParallel)
library(foreach)

lst <- list.files(path="D:\\0619\\",pattern='nc$',full.names=TRUE)
detectCores()

usecores <- detectCores-10
cl <- makeCluster(usecores)
registerDoParallel(cl)

foreach(i =1:143) %dopar% {
  library(raster)                                                                                                                                                                                                                                                                                                     
  library(ncdf4) 
  library(rgdal)
  nc<-nc_open(lst[3])
  r1<-raster(lst[i],
             var='albedo_01')
  r2<-raster(lst[i],
             var='albedo_02')
  r3<-raster(lst[i],
             var='albedo_03')
  r4<-raster(lst[i],
             var='albedo_04')
  
  rg <-0.6321*r2+0.2928*r3+0.0715*r4
  rr <- brick(r3,rg,r1)
  name <- strsplit(lst[i],"\\_")
  tifname <- paste("H8_VIS_",name[[1]][3], "_",name[[1]][4],"_FLDK",sep="")
  rw <- writeRaster(rr,filename = paste("E:\\H8_VIS_data\\20190619\\", tifname, ".tif", sep=""),
                    format = 'GTiff')
}
stopCluster(cl)

此代码适用于我的 PC 并导出近 500GB 数据。一天,出错了,报错

R encoutered a fatal error
The session was terminated

我寻找解决方案,尝试卸载 R 和 RStudio,删除我能找到的所有 R 文件,重新启动 PC 并在 conda 中安装 R & RStudio。然后,它适用于一口井。在我处理两个 H-8 netcdf 数据(每个 600MB)之后。R再次崩溃并报告了同样的错误。################################################# ##################

我认为这是我的 PC 没有足够的 RAM,所以我在一台非常高性能的计算机上运行它。导出大约500GB数据后,R报错:

error in unserialize(socklist[[n]]): error reading from connection

然后我停止并行运行代码,导出两个结果后,R崩溃并显示

R encoutered a fatal error
The session was terminated

而且这台高性能计算机上的 R 不能再工作了。我用过gc(),还是不行。我认为在我的数据处理过程中,一些垃圾存储在某个地方,它们超过了 R 的存储。

请告诉我如何解决这个问题。非常感谢!

#######

我只是发现,从一个文件中读取光栅不会终止。

r1 <- raster("D:/0619/h8_201906190000.nc",var = 'albedo_1')

从列表中读取文件时将终止。(我这次没有要求并行化,只是因为这两个代码而爆炸。)

list <- list.files(path="D:\\0619\\",pattern='nc$',full.names=TRUE)
r1 <- raster(list[1],var = 'albedo_1')

标签: rparallel-processingramterminate

解决方案


推荐阅读