XGBoost是不支持分布式计算的,所以为了让我们的代码可以运行在Spark的集群中,这里我们引入了XGBoost4J,这是一个Java版本。下面我们就来看看如何安装并使用XGBoost4J。
注:XGBoost4J是我们编译后产生的一个jar包,我们会使用这个jar包中的API进行开发。编译此jar包坑很多,这里有几点需要注意。使用Maven在Linux环境(与Spark环境相同的操作系统)下进行编译,切记不要用IDE在MacOS或Windows环境中编译jar包,编译后因为jni的问题,在Spark的集群模式下无法运行,或运行中断。XGBoost Client
这篇文章我们主要测试下,之前部署好的XGBoost。
我们使用Jupyter编写代码,使用单机模式在Spark中运行。
1 | import xgboost as xgb |
XGBoost 部署
“GBDT和XGBoost在竞赛和工业界使用都非常频繁,能有效的应用到分类、回归、排序问题,虽然使用起来不难,但是要能完整的理解还是有一点麻烦的。本文尝试一步一步梳理GB、GBDT、XGBoost,它们之间有非常紧密的联系,GBDT是以决策树(CART)为基学习器的GB算法,XGBoost扩展和改进了GDBT,XGBoost算法更快,准确率也相对高一些。”,上面这句话引用自《一步一步理解GB、GBDT、XGBoost》,个人觉的很好的对比了几种算法的不同,更好的理解XGBoost,有兴趣的同学可以看看。
经测试用GBDT(Gradient Boosting Decision Tree)在Spark上需要10小时才能训练出的数据量,XGBoost仅仅只用了一半的集群资源,10分钟就搞定了。真实速度惊人,为了进一步发挥Spark的潜能,这篇文章我们讲讲如何把XGBoost部署在分布式环境中。
因为Jupyter安装在node0中,所以我们在node0节点上安装XGBoost。root用户登录此节点。
CSV导入HBase
大数据分析中,都会用到csv数据文件,这篇文章我们讲讲如何将csv中的数据导入到hbase中,方便数据的查看,计算。也方便在后续的程序中可以直接从数据库中读取数据。
下面的程序实现了如下功能:
- 将csv文件从本地上传到hdfs文件系统中。
- 在hbase中创建表。
- 把hdfs中的csv数据导入新建的表中。
- 执行每一步,打印出提示信息。
统计HBase表纪录数
我们知道所有HBase中的表数据,都存放在分布式文件系统上,所以要获得到一张表中到底有多少条记录,跟传统关系型数据库是不一样的,这篇文章我们来说说如何获得。
我们依然使用Jupyter Notebook,用程序的方式获取结果。
1 | import os |
Word Count
Word Count程序就像初学每种语言时要写的Hello World一样。他可以用来统计大段文章(可能是一本朗文字典那么厚的书)中相同单词出现的次数。当然除了统计相同词数量外,我们经常拿它来统计网站中大量的PV,UV。
所有的Spark程序可以在local模式下运行,也可以在cluster模式下运行。因为是第一次应用,我们会分别讲解这两种模式。以后的程序基本都是运行在集群模式。
Spark程序可以使用Python,Scala,Java,R编写,推荐程度Python最高,R最低。按道理说整个Spark都是Scala开发的,使用Scala是最好的选择,的确是这样的。但是由于Python在整个机器学习领域的热度越来越热,为了方便大家之后开发其他程序(比如模式识别,语音识别等等),这里推荐使用Python,当然其他语言版本我们会大概讲下,本文我们看看Python,Scala,Java三种语言分别是如何实现World Count程序的,废话不多说,下面上主菜…
Hadoop 附录
Quick Start
环境变量
以下是各个节点的环境变量配置(/etc/profile)
节点node0
1 | export JAVA_HOME=/opt/jdk1.8.0_65 |