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

How to stop h2o from saving massive .ERR, .OUT and other log files to the local drive

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

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

但您可以自己控制更多。您可以在命令行上使用 java 手动启动 H2O,然后使用 h2o.init().

从 R 连接
java -Xmx5g -jar h2o.jar

在此示例中,我使用 5 GB 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 &

在火花中遇到这个 shell 运行 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)

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