XGBoost是不支持分布式计算的,所以为了让我们的代码可以运行在Spark的集群中,这里我们引入了XGBoost4J,这是一个Java版本。下面我们就来看看如何安装并使用XGBoost4J。
注:XGBoost4J是我们编译后产生的一个jar包,我们会使用这个jar包中的API进行开发。编译此jar包坑很多,这里有几点需要注意。使用Maven在Linux环境(与Spark环境相同的操作系统)下进行编译,切记不要用IDE在MacOS或Windows环境中编译jar包,编译后因为jni的问题,在Spark的集群模式下无法运行,或运行中断。Quick Start
Maven
下载
这里我依然选择node0节点,进行编译。下载Naven的安装包(注意不要下载源码包),并解压在/opt目录下。本文所使用的版本是3.5.2
环境变量
1 | export MAVEN_HOME=/opt/apache-maven-3.5.2 |
国内镜像
打开conf/settings.xml的mirrirs标签中,添加如下配置:
1 | <mirror> |
本地仓库位置
conf/settings.xml
1 | <localRepository>/home/test/.m2/repository</localRepository> |
本文未设置,所以仓库默认位置为/root/.m2/repository。
注:推荐大家设置此参数,默认存放位置是/当前用户/.m2/repository,所以当你使用不同的用户时,本地仓库也会发生变化,这样导致副本数增多,所以指定一个任意用户都可访问的路径作为本地仓库。测试
1 | mvn -v |
打印出版本信息后,说明安装成功。
打包XGBoost4J
1 | cd /opt/xgboost-packages/xgboost/jvm-packages |
进入该文件夹,执行编译命令:
1 | mvn package |
编译过程会等上一段时间,它会一边编译一边测试。这段时间可以看场电影…
编译结束后,在jvm-packages/xgboost4j-spark/target中生成两个jar包,这里我们使用xgboost4j-spark-0.7-jar-with-dependencies.jar。也许你编译出的版本会有不同,但没有关系。
本地仓库安装
将刚才编译好的jar包,安装在本地仓库,方便调用。
1 | mvn -DskipTests install |
Scala
创建工程
手动创建一个简单的Maven工程,groupId,artifactId可自行定义,本文定义:
1 | groupId = org.test.mvn |
工程结构如下:
xgb4j_scala
|— pom.xml
|— target
|— src
|— test
|— main
|— resources
|— scala
|— org.test.mvn
|— App.scala
编写对象类
在org.test.mvn包中创建App对象类,代码如下:
1 | package org.test.mvn |
配置pom
1 | <?xml version="1.0" encoding="utf-8"?> |
使用mvn package,打包项目。
完成后,在target文件夹中生成xgb4j-0.0.1-jar-with-dependencies.jar
集群测试
命令行提交
删除输出文件夹
1
$HADOOP_HOME/bin/hadoop fs -rm -R /hfile/out/xgb4j
运行spark job
1
$SPARK_HOME/bin/spark-submit --master yarn --deploy-mode cluster --class org.vys.mvn.App $JN_HOME/Lib/xgb4j-0.0.1-jar-with-dependencies.jar
将结果取回本地
1
$HADOOP_HOME/bin/hadoop fs -get /hfile/out/xgb4j $JN_HOME/Lib
Jupyter Notebook
1 | import os |
本系列文章《目录》