在运行需要访问群集的多个R程序(接近20个)的同时设置H2O群集

时间:2020-01-01 11:55:13

标签: r h2o

我必须使用不同的参数并行(通过批处理)运行相同的R脚本。 R脚本可构建H2O模型并为其评分。在这种情况下,我应该

  1. 为R脚本的每个批处理运行设置单个群集吗?

(OR)

  1. 创建一个通用集群并设置脚本以使用它吗?

我希望使用后一种解决方案,但是我不确定如何对这么多批处理自动进行初始化和关闭H2O集群。第一批必须创建集群(H2O.init(),最后一批必须关闭集群)

2 个答案:

答案 0 :(得分:2)

在每个R会话中设置单个h2o群集是理想的选择。

使用h2o::h2o.init()启动h2o集群时,请确保为每个R会话(每个脚本运行自己的R会话)指定不同的名称:

  • ip / port(本地主机下尚未使用的端口)
  • name(通过top / htop在终端上查看其进度/使用情况)

根据需要更改其他选项。每个R会话都知道它正在运行的h2o群集,h2o::h2o.shutdown()仅会关闭特定的h2o群集。

答案 1 :(得分:1)

设置单个群集,并让所有脚本都使用它是推荐的方法,因为它效率更高。每个群集都有内存开销,因此,您的20个单独的群集将很浪费(甚至在所有脚本都需要使用的静态数据表存在的情况下,这也会造成更多浪费)。您还必须猜测要给每个的正确数量。

另一方面,如果您的20个脚本都将引用一个特定的表,例如加载它们自己的数据,并通常假定它们是唯一运行的脚本,您会遇到一个问题:您需要修改脚本以使其表现良好,或者在各自的ip /端口上运行它们。

我不确定如何对这么多批次的H2O集群进行自动化初始化和关闭。第一批必须创建集群(H2O.init(),最后一批必须关闭集群)

Start H2O from the commandline,然后再运行第一个脚本,并在所有脚本完成后手动将其杀死。通过这种方式,每个脚本在执行h2o.init()调用时都会发现它已经在运行。

如果必须完全自动化,请确保首先运行启动命令,但是您需要某种类型的观察程序脚本来通知所有其他进程何时完成。 (我倾向于在cron作业中同时使用psgrep;当然,还有更复杂的方法。)