在具有特定连接节点url的hadoop集群中启动h2o

时间:2017-12-08 20:59:09

标签: h2o

有没有办法在群集的特定节点上启动h2o实例接口?例如......

使用命令时:

$ hadoop jar h2odriver.jar -nodes 4 -mapperXmx 6g -output hdfsOutputDir

从h2o安装目录中说,在节点172.18.4.62中,我得到(删节)输出:

....
H2O node 172.18.4.65:54321 reports H2O cluster size 1
H2O node 172.18.4.66:54321 reports H2O cluster size 1
H2O node 172.18.4.67:54321 reports H2O cluster size 1
H2O node 172.18.4.63:54321 reports H2O cluster size 1
H2O node 172.18.4.63:54321 reports H2O cluster size 4
H2O node 172.18.4.66:54321 reports H2O cluster size 4
H2O node 172.18.4.67:54321 reports H2O cluster size 4
H2O node 172.18.4.65:54321 reports H2O cluster size 4
H2O cluster (4 nodes) is up
(Note: Use the -disown option to exit the driver after cluster formation)

Open H2O Flow in your web browser: http://172.18.4.65:54321

(Press Ctrl-C to kill the cluster)
Blocking until the H2O cluster shuts down...

从想要连接到h2o实例的python脚本中,我会做类似的事情:

h2o.init(ip="172.18.4.65")

连接到h2o实例。但是,能够控制h2o实例连接所在的地址会更好。

有办法做到这一点吗?这个问题是混淆/错误的吗?我的总体目标是定期运行python脚本,启动h2o集群,在该集群上执行操作然后关闭集群(无法知道用于连接集群的地址意味着脚本永远不会确定哪个要连接的地址)。任何意见,将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

当您在Hadoop上启动H2O群集时,如下所示:

var app = angular.module('myApp', [])
.controller('ControllerA', function($scope) {

   $scope.resultSet = [{id:1401001},{id:1401002},{id:1401003},{id:1401004}]
});

执行命令后,您将得到如下输出:

$ hadoop jar h2odriver.jar -nodes 3 -mapperXmx 10g -output /user/test

如您所见,hadoop运行时选择了回调IP地址。因此,在大多数情况下,通过Hadoop运行时选择IP地址和端口以找到最佳可用,

您还可以看到使用-driverif x.x.x.x -driverport NNNNN以及hadoop命令的选项,但我不确定这是否真的是一个不错的选择。除了我正在启动集群的节点ip之外,我还没有对它进行测试,但它确实可以从它启动命令的IP中运行。

根据我的经验,在Hadoop上启动H2O群集最流行的方法是让Hadoop决定群集,他们只需要解析链接的输出,如下所示:

Determining driver host interface for mapper->driver callback...
    [Possible callback IP address: x.x.x.217]
    [Possible callback IP address: 127.0.0.1]
Using mapper->driver callback IP address and port: x.x.x.217:39562

(You can override these with -driverif and -driverport/-driverportrange.)

解析上面的行以获取要从R / Python API连接的驱动程序的IP地址/端口。