0

我正在运行Sparkling water超过36 个 Spark executors。由于 Yarn 的调度,一些 executor 会先发制人,稍后再回来。总体而言,大部分时间有36 个执行者,但并非总是如此。

到目前为止,我的经验是,一旦有1 个执行程序失败,整个H2o实例就会停止,即使丢失的执行程序稍后恢复运行。我想知道这是否是Sparkling-water行为方式?还是需要开启一些抢占能力?

有人对此有所了解吗?

4

1 回答 1

0

[概括]

您所看到的是苏打水的行为方式。


[ 细节... ]

YARN 上的苏打水可以通过两种不同的方式运行:

  • 默认方式,其中 H2O 节点嵌入在 Spark 执行器中,并且有一个(Spark)YARN 作业,

  • 外部 H2O 集群方式,其中 Spark 集群和 H2O 集群是单独的 YARN 作业(在这种模式下运行需要更多设置;如果您以这种方式运行,您会知道)

H2O 节点不支持弹性云形成行为。也就是说,一旦 H2O 集群形成,新节点可能不会加入集群(它们被拒绝),现有节点可能不会离开集群(集群变得不可用)。

因此,必须为运行 H2O 节点的队列禁用 YARN 抢占。默认情况下,这意味着整个 Spark 作业必须在禁用 YARN 抢占(并且 Spark dynamicAllocation 禁用)的情况下运行。对于外部 H2O 集群方式,这意味着 H2O 集群必须在禁用抢占的 YARN 队列中运行。

其他可能有帮助的信息:

  • 如果您刚开始使用苏打水(或一般的 H2O)解决新问题,请选择少量大内存节点而不是大量小内存节点;这样出错的事情会更少,

  • 更具体地说,如果您尝试使用 36 个执行器运行,每个执行器具有 1 GB 的执行器内存,那么这是一个非常糟糕的配置;从 4 个执行程序 x 10 GB 开始,

  • 一般来说,您根本不想使用小于 5 GB 的执行程序启动 Sparkling Water,并且内存越多越好,

  • 如果以默认方式运行,不要将执行器核心数设置得太小;机器学习需要大量的 CPU。

于 2017-11-09T12:16:02.573 回答