xgboost on yarn and xgboost4j-spark部署

参考:

http://blog.csdn.net/u010306433/article/details/51403894

 

注意点:

1.各个软件的版本(gcc/cmake)

2.选择相同版本hadoop源码,且libhdfs 要自己编译,参数加上 cmake -DGENERATED_JAVAH=/opt/jdk1.8.0_60 -DJAVA_HOME=/opt/jdk1.8.0_60 即可

3.xgboost编译:

config.mk文件中修改:

USE_HDFS = 1

HADOOP_HOME=/export/App/hadoop-2.7.4

HDFS_LIB_PATH=/data1/user/software/hadoop-2.7.4-src/hadoop-hdfs-project/hadoop-hdfs/src/target/usr/local/lib (新编译的libhdfs文件)

xgboost/dmlc-core/make 下面的config.mk配置也要修改:USE_HDFS = 1

4.环境变量:

export HADOOP_HOME=/export/App/hadoop-2.7.4

export LD_LIBRARY_PATH=/data1/user/software/hadoop-2.7.4-src/hadoop-hdfs-project/hadoop-hdfs/src/target/usr/local/lib:$LD_LIBRARY_PATH

export CLASSPATH=$CLASSPATH:`hadoop classpath --glob` #防止出现之类的错误(src/io/hdfs_filesys.cc:95: Failed to load HDFS-configuration xgboost读取不到hadoop本地的包)

5.运行例子:

(1).xgboost/tests/distributed目录下的bash文件可以测试是否和hdfs是通的

(2).到demo/distributed-training目录下:

../../dmlc-core/tracker/dmlc-submit --cluster=yarn --num-workers=2 ../../xgboost mushroom.hdfs.conf nthread=2\ data=hdfs://A03-R07-I25-28.JD.LOCAL:9000/data/xgboostyarn/input/agaricus.txt.train eval[test]=hdfs://A03-R07-I25-28.JD.LOCAL:9000/data/xgboostyarn/output/agaricus.txt.test model_dir=hdfs://A03-R07-I25-28.JD.LOCAL:9000/data/model3

mushroom.hdfs.conf 是xgboost有关参数的文件

注意hdfs的路径

 

 

 

http://dmlc.ml/2016/03/14/xgboost4j-portable-distributed-xgboost-in-spark-flink-and-dataflow.html

xgboost4j基于rabit通信

安装

git clone --recursive https://github.com/dmlc/xgboost

checkout 到release_0.72的分支下

cd jvm-package 下

更改pom.xml文件

添加:


    ml.dmlc
    xgboost4j
    0.72


  GitHub Repo
  GitHub Repo
  https://raw.githubusercontent.com/CodingCat/xgboost/maven-repo/
并修改create_jni.py 文件修改 USE_HDFS 为ON

保持有外网环境(或者无外网,拷贝用户目录下的.m2/repository(已经编译通过)文件到无外网的服务器上)

其他依赖cmake 3.5.2、 有hadoop环境、mvn3.5.4、scala 2.11.8、jdk1.8、spark2.1.0、 g++-4.8.5

在jvm-package下执行mvn clean packages

编译成功会生成jvm-packages/xgboost4j-spark/target/xgboost4j-spark-0.72.jar 和jvm-packages/xgboost4j/target/xgboost4j-0.72.jar

测试运行

拷贝以上两个文件到服务器上

spark-shell --master yarn --driver-memory 16G --executor-memory 4G --num-executors 24 --jars /home/bi_polaris/yujunjun/test/xgboost4j-spark-0.72.jar,/home/bi_polaris/yujunjun/test/xgboost4j-0.72.jar 2>log

启动 然后测试 xgboost4j-example里面的测试脚本即可

本地开发环境

安装到mvn仓库

安装scala/java的jvm版xgboost:

$ cd jvm-packages/xgboost4j

$ mvn install:install-file -Dfile=target/xgboost4j-0.72.jar -DgroupId=ml.dmlc -DartifactId=xgboost4j -Dversion=0.72 -Dpackaging=jar

安装spark版的xgboost:

$ cd jvm-packages/xgboost4j-spark

$ mvn install:install-file -Dfile=target/xgboost4j-spark-0.72.jar -DgroupId=ml.dmlc -DartifactId=xgboost4j-spark -Dversion=0.72 -Dpackaging=jar

Maven pom.xml file:

<dependency>

<groupId>ml.dmlcgroupId>

<artifactId>xgboost4j-sparkartifactId>

<version>0.72version>

dependency>

 

Spark code,参考https://github.com/dmlc/xgboost/tree/master/jvm-packages/下examples,分别有RDD版本和DataFrame版本:

import ml.dmlc.xgboost4j.scala.spark.XGBoost

 

注意点:

参数nWorker设置的问题,而nWorker的说明如下:

the number of xgboost workers, 0 by default which means that the number of workers equals to the partition number of trainingData RDD

从train中可以看到,nWorker首先要大于0,把train数据集coalesce为nWorker的数目(前提是数据集partition数目大于nworker数目)否则后多一步repartition:

if (numWorkers != trainingData.partitions.length) {

logger.info(s"repartitioning training set to $numWorkers partitions")

trainingData.repartition(numWorkers)

else {

trainingData

}

在设置nWorker的时候,数值要小于executors的数量。

 

你可能感兴趣的:(数据挖掘)