使用YARN运行分布式xgboost的问题

时间:2016-11-18 19:38:47

标签: amazon-web-services hadoop xgboost

我在YARN上关于xgboost分布式模式的教程遇到了一些问题。

我按照他们的指示行事,但有些问题我无法解决。

我正在使用Hadoop 2.6.0(看起来配置正确)运行2个EC2实例。

当我使用以下命令运行他们的演示时:

cd xgboost/demo/distributed-training
# Use dmlc-submit to submit the job.
../../dmlc-core/tracker/dmlc-submit --cluster=yarn --num-workers=2 --worker-cores=2\
../../xgboost mushroom.aws.conf nthread=2\
data=s3://${BUCKET}/xgb-demo/train\
eval[test]=s3://${BUCKET}/xgb-demo/test\
model_dir=s3://${BUCKET}/xgb-demo/model

我从Hadoop容器中收到以下错误:

Traceback (most recent call last):
 File "./launcher.py", line 82, in <module>
 main()
 File "./launcher.py", line 77, in main
 ret = subprocess.call(args=sys.argv[1:], env=env)
 File "/usr/lib/python2.7/subprocess.py", line 523, in call
 return Popen(*popenargs, **kwargs).wait()
 File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
  errread, errwrite)
 File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

显然,似乎subprocess函数无法找到某些文件。所以我试着看看python试图调用什么。 subrpocess的两个参数是:

['../../xgboost', './mushroom.aws.conf', 'nthread=1', 'data=s3://awstest.xgboost/xgb-demo/train', 'eval[test]=s3://awstest.xgboost/xgb-demo/test', 'model_dir=s3://awstest.xgboost/xgb-demo/model']

和环境词典。环境字典调用${PYTHONPATH}变量,但它似乎是空的,或者至少当我从终端回显它时它是空的。

你有什么问题的线索吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

我在您的代码中看到的主要问题是您使用的是相对路径。 dmlc-submit命令不会在它将使用的每个节点中设置当前目录。 这导致python子进程告诉你它找不到../.../xgboost二进制文件,因为路径不一样。

我使用绝对路径来克服这个问题。

答案 1 :(得分:0)

问题中的问题是由xgboost构建失败引起的。

之后我开始出现以下错误

what(): [19:15:47] src/io/s3_filesys.cc:779: Check failed: curl_easy_perform(curl) == CURLE_OK Aborted (core dumped)

最后一个错误来自S3存储桶没有有效的SSL证书这一事实,因此我修改了s3_filesys.cc来源,将所有https替换为http