r-如何阻止h2o将大量.ERR、.OUT和其他日志文件保存到本地驱动器



我目前正在运行一个脚本,其中为蒙特卡洛交叉验证的几次迭代生成了几个h2o-glm和深度学习模型。运行完成后(大约需要半天时间),h2o将大量文件保存到本地驱动器(大小高达8.5GB)。当RStudio或我的计算机重新启动时,这些文件不会被删除(正如我最初所想的那样)。有没有办法阻止h2o保存这些文件?

从R用h2o.init()启动H2O时,stdout和stderr文件应保存到临时目录中(请参阅R的tempdir()以查看路径)。当R会话退出时,应删除此临时目录。这似乎不适用于RStudio,但如果您在命令行中使用R,它会起作用。我不确定这是一个可以在RStudio中更改的设置,还是一个RStudiobug。

但是你可以控制自己。您可以在命令行上使用java手动启动H2O,然后使用h2o.init()从R连接。

java -Xmx5g -jar h2o.jar

在这个例子中,我用5GB的Java堆内存启动了H2O,但如果数据更大,则应该增加这个内存。然后在R中连接将如下所示:

> h2o.init()
Connection successful!
R is connected to the H2O cluster: 
H2O cluster uptime:         16 hours 34 minutes 
H2O cluster version:        3.15.0.99999 
H2O cluster version age:    17 hours and 25 minutes  
H2O cluster name:           H2O_started_from_R_me_exn817 
H2O cluster total nodes:    1 
H2O cluster total memory:   4.43 GB 
H2O cluster total cores:    8 
H2O cluster allowed cores:  8 
H2O cluster healthy:        TRUE 
H2O Connection ip:          localhost 
H2O Connection port:        54321 
H2O Connection proxy:       NA 
H2O Internal Security:      FALSE 
H2O API Extensions:         XGBoost, Algos, AutoML, Core V3, Core V4 
R Version:                  R version 3.3.2 (2016-10-31) 

因此,如果您想将stdout和stderr重定向到devnull,只需在java命令的末尾添加重定向命令即可启动H2O集群,并再次从R连接到H2O。要重定向stderr和stdout,可以像这样附加> /dev/null 2>&1

java -Xmx5g -jar h2o.jar > /dev/null 2>&1 &

在运行H2O的火花壳中遇到这种情况。shell连接了50个执行器,这导致这些节点上的/tmp目录最终导致存储问题。

当调用h2o.init()时,它会创建jvm。来自h2o的日志记录由这些jvm处理。但是,当shell关闭时,这些jvm会持续存在,并且只在/tmp中永久记录心跳错误。您需要找到与h2o相关联的jvm并将其关闭。我相信在我的情况下,water.H2OApp中的特定进程名称

我发现在运行每个模型后删除这些文件更容易解决这个问题。

unlink(list.files(tempdir(), full.names = TRUE), recursive = TRUE)

这有助于在循环中运行多个模型时删除临时文件。

相关内容

  • 没有找到相关文章

最新更新