H2O-3机器学习平台源码编译的各种坑

H2O-3机器学习平台是一个非常适合非专业人士学习机器学习的平台,自带WebUI,效果还是蛮不错的,官方也提供了jar包,一条命令就能直接运行,非常方便,但最近有源码编译的需求,实际操作过程中,发现,想要编译它的源码,真的比登天还难!

主要是因为,github的源码可以说是日更,成百上千的分支看的人眼花缭乱,而且编译说明文档是世纪更,可当前主线的代码完全对不上。

照着它的编译说明文档操作,绝对掉坑里爬不出来。在此记录一下我的具体编译流程:

一、虚拟机部署Centos7系统

下载Centos7镜像文件,使用版本“CentOS-7-x86_64-DVD-2009”,下载地址:https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso

虚拟机安装centos7过程不在叙述,可参考:

VMware ESXI centos7虚机搭建详解(避坑必看)_esxi安装iso虚机-CSDN博客

虚拟机安装Centos7系统实操教程 详尽步骤 vmware ESXi亲测通过 - 运维全实践 - 博客园 (cnblogs.com)注意安装过程中,软件选择“基础设施服务器”

二、部署H2O-3环境

官方使用了jdk-7u79版本,编译会出现“PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target”错误,所以弃用。

完整环境部署代码如下:

cd /opt
sudo wget https://packages.baidu.com/app/jdk-8/jdk-8u121-linux-x64.tar.gzsudo tar xzf jdk-8u121-linux-x64.tar.gz
cd jdk-8u121-linux-x64sudo alternatives --install /usr/bin/java java /opt/jdk1.8.0_121/bin/java 2
sudo alternatives --install /usr/bin/jar jar /opt/jdk1.8.0_121/bin/jar 2
sudo alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_121/bin/javac 2
sudo alternatives --set jar /opt/jdk1.8.0_121/bin/jar
sudo alternatives --set javac /opt/jdk1.8.0_121/bin/javaccd /optsudo wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm
sudo rpm -ivh epel-release-7-14.noarch.rpmsudo echo "multilib_policy=best" >> /etc/yum.conf
sudo yum -y updatesudo yum -y install R R-devel git python-pip openssl-devel libxml2-devel libcurl-devel gcc gcc-c++ make openssl-devel kernel-devel texlive texinfo texlive-latex-fonts libX11-devel mesa-libGL-devel mesa-libGL nodejs npm python-devel numpy scipy python-pandasyum install python3-pip
pip3 install --upgrade pip
pip3 install scikit-learn grip tabulate statsmodels wheelmkdir ~/Rlibrary
export JAVA_HOME=/opt/jdk1.8.0_121
export JRE_HOME=/opt/jdk1.8.0_121/jre
export PATH=$PATH:/opt/jdk1.8.0_121/bin:/opt/jdk1.8.0_121/jre/bin
export R_LIBS_USER=~/Rlibrary# install local R packages
R -e 'install.packages(c("RCurl","jsonlite","statmod","devtools","roxygen2","testthat"), dependencies=TRUE, repos="http://cran.rstudio.com/")'cd
git clone https://github.com/h2oai/h2o-3.git
cd h2o-3

注意: h2oai的代码更新频率非常高,基于我编译时的版本拉了一个fork,如果你从官方拉的源代码编译时有问题,可以用我当前使用的代码:

git clone https://github.com/mogu1990/h2o-3.git

三、修改H2O-3代码

第一处:h2o-3/h2o-r/scripts/package_version_check_update.R

将文件末尾的代码:

dcf.file <- seek.files(c("h2o-3-DESCRIPTION.template","h2o-3-DESCRIPTION"))repos <- c(repos.dcf(dcf.file), "http://s3.amazonaws.com/h2o-r/cran-dev")
pkgs <- packages.dcf(dcf.file, which = "all")# try on windows/macosx
ans <- pkgs_check_update(pkgs, check_only=check_only, repos=repos) #, force_install="data.table") # allows to be fully up to dateif (!interactive()) {expect TRUEstatus <- if (isTRUE(ans)) 0 else 1q("no", status=0)
}

修改为:

#dcf.file <- seek.files(c("h2o-3-DESCRIPTION.template","h2o-3-DESCRIPTION"))#repos <- c(repos.dcf(dcf.file), "http://s3.amazonaws.com/h2o-r/cran-dev")
#pkgs <- packages.dcf(dcf.file, which = "all")# try on windows/macosx
#ans <- pkgs_check_update(pkgs, check_only=check_only, repos=repos) #, force_install="data.table") # allows to be fully up to dateif (!interactive()) {# expect TRUE#status <- if (isTRUE(ans)) 0 else 1q("no", status=0)
}

目的就是关闭它的R包更新检测,因为代码里请求的“http://s3.amazonaws.com/h2o-r/cran-dev”压根就打不开!!!让人震惊。

第二处:h2o-3/h2o-bindings/build.gradle

将第13、14行代码:

pythonexe = findProperty("pythonExec") ?: "python"
pipexe = findProperty("pipExec") ?: "pip"

改为:

pythonexe = findProperty("pythonExec") ?: "python3"
pipexe = findProperty("pipExec") ?: "pip3"

这是因为,它最开始用的python2.7版本,但现在python2.7已经不支持更新,很多包用不成,所以要换成python3和pip3。

第三处:h2o-3/h2o-py/build.gradle

和第二处同理,第11、12行,改成

pythonexe = findProperty("pythonExec") ?: "python3"
pipexe = findProperty("pipExec") ?: "pip3"

第四处:h2o-3/h2o-py-cloud-extensions/build.gradle

和第二处同理,第9、10行,改成

pythonexe = findProperty("pythonExec") ?: "python3"
pipexe = findProperty("pipExec") ?: "pip3"

第五处:h2o-3-master/h2o-py-mlflow-flavor/build.gradle

和第二处同理,第9、10行,改成

pythonexe = findProperty("pythonExec") ?: "python3"
pipexe = findProperty("pipExec") ?: "pip3"

第二处到第五处的修改实际上都是把python换成python3,pip换成pip3,有个取巧的办法,就是把python的软链接指向python3,pip的软链接指向pip3,就免的修改第2-第5处。

三、开始编译

官方文档说要执行:

./gradlew syncSmalldata
./gradlew syncRPackages --info
./gradlew build -x test --info

实际发现,./gradlew syncSmalldata不用执行,因为它是下载了一堆的csv文件用来测试的,下载的具慢,不要执行。所以我们应该这么执行:

./gradlew syncRPackages --info

先执行R包的同步更新,如果不修改第一处,这里绝对报错,执行成功后再执行:

./gradlew build -x test --info

这里千万要把-x test加上,如果不加,默认就要进行测试校验,问题一大堆,绝对编译失败。

编译成功后,bulid目录下会生成h2o.jar文件。使用命令

java -jar h2o.jar

即可启动服务,不报错的情况下,浏览器访问http://ip:54321即可打开web界面。

为啥访问不到?记着关闭centos7的防火墙!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/307999.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机毕业设计】日用百货交易网站——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

Chatgpt掘金之旅—有爱AI商业实战篇|播客剧本写作|(十三)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业播客剧本写作服务有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。…

4、jvm-垃圾收集算法与垃圾收集器

垃圾收集算法 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法&#xff0c;这种算法没有什么新的思想&#xff0c;只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代&#xff0c;这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。 比如…

最新Zibll子比主题V7.1版本源码 全新推出开心版

源码下载地址&#xff1a;Zibll子比主题V7.1.zip

JavaEE实验三:3.5学生信息查询系统(动态Sql)

题目要求: 使用动态SQL进行条件查询、更新以及复杂查询操作。本实验要求利用本章所学知识完成一个学生信息系统&#xff0c;该系统要求实现3个以下功能: 1、多条件查询&#xff1a; 当用户输入的学生姓名不为空&#xff0c;则根据学生姓名进行学生信息的查询&#xff1b; 当用户…

搭建基于Hexo的个人博客,以及git相关命令

全文写完之后的总结 测试命令 hexo clean hexo g hexo s 上传到服务器命令 hexo clean hexo g hexo d 上传到服务器&#xff08;如果上一个命令用不了&#xff09;&#xff0c;也要先hexo clean,hexo g git init git add . git commit -m "first commit" git p…

jenkins下载安装(mac)

下载官网 具体 直接命令安装 Sample commands: Install the latest LTS version: brew install jenkins-ltsStart the Jenkins service: brew services start jenkins-ltsRestart the Jenkins service: brew services restart jenkins-ltsUpdate the Jenkins version: brew u…

在Linux上利用mingw-w64生成exe文件

一、概要 1、elf与exe 在Linux上用gcc直接编译出来的可执行文件是elf格式的&#xff0c;在Windows上是不能运行的 Windows上可执行文件的格式是exe 利用mingw-w64可以在Linux上生成exe格式的可执行文件&#xff0c;将该exe文件拷贝到Windows上就可以运行 2、程序要留给用户…

数据结构——单链表(C语言版)

文章目录 一、链表的概念及结构二、单链表的实现SList.h链表的打印申请新的结点链表的尾插链表的头插链表的尾删链表的头删链表的查找在指定位置之前插入数据在指定位置之后插入数据删除pos结点删除pos之后的结点销毁链表 三、完整源代码SList.hSList.ctest.c 一、链表的概念及…

PVE下安装配置openwrt和ikuai

开端 openwrt 和 ikuai 是比较出名的软路由系统。我最早接触软路由还是因为我的一个学长要改自己家里的网络&#xff0c;使用软路由去控制网络。我听说后便来了兴致&#xff0c;也在我家搞了一套软路由系统。现在我已经做完了&#xff0c;就想着写个文章记录一下。 软路由简介…

Flutter中间镂空的二维码扫描控件

1、UI效果图&#xff1a; 2、中间镂空UI&#xff1a; class CenterTransparentMask extends CustomClipper<Path> {final double? width;CenterTransparentMask({this.width});overridePath getClip(Size size) {final path Path()..addRect(Rect.fromLTWH(0, 0, size…

Navicat Premium 16 for Mac/Win:数据库管理的全能之选

在数字化时代&#xff0c;数据库管理已成为各行各业不可或缺的一环。而Navicat Premium 16作为一款功能强大的数据库管理软件&#xff0c;无疑为数据库管理员和开发者提供了高效、便捷的解决方案。 Navicat Premium 16支持多种主流数据库系统&#xff0c;无论是MySQL、Postgre…

MyBatis批量插入的五种方式

MyBatis批量插入的五种方式: 一、准备工作 1、导入pom.xml依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MySQL驱动依赖 --…

R:普通分组柱状图

输入文件实例&#xff08;存为csv格式&#xff09; library(ggplot2) library(ggbreak)# 从CSV文件中读取数据 setwd("C:/Users/fordata/Desktop/研究生/第二个想法(16s肠型&#xff0b;宏基因组功能)/第二篇病毒组/result/otherDB") data <- read.csv("feta…

UI自动化测试案例

备注:本文为博主原创文章,未经博主允许禁止转载。如有问题,欢迎指正。 个人笔记(整理不易,有帮助,收藏+点赞+评论,爱你们!!!你的支持是我写作的动力) 笔记目录:笔记本~笔记目录_airtest和selenium那个好用-CSDN博客 个人随笔:工作总结随笔_8、以前工作中都接触过哪…

工厂方法模式:解锁灵活的对象创建策略

在软件设计中&#xff0c;工厂方法模式是一种非常实用的创建型设计模式&#xff0c;它不仅提升了系统的灵活性&#xff0c;还简化了对象的创建过程。本文将详细探讨工厂方法模式的核心概念、实现方式、应用场景以及与其他设计模式的对比&#xff0c;旨在提供一份全面且实用的指…

K8s 命令行工具

文章目录 K8s 命令行工具kubectl 工具在任意节点使用kubectl方式创建对象命令显示和查找资源更新资源修补资源编辑资源Scale 资源删除资源查看pod信息节点相关操作 K8s 命令行工具 在搭建集群的时候&#xff0c;我们通过yum 下载了kubeadm kubelet kubectl 三个命令行工具&…

通过本机调试远端路由器非直连路由

实验目的&#xff1a;如图拓扑&#xff0c;通过本机电脑发&#xff0c;telnet调试远程AR4设备。 重点1&#xff1a;通过ospf路由协议配置拓扑网络&#xff0c;知识点&#xff1a;ospf配置路由器协议语法格式&#xff0c;area区域的定义&#xff0c;区域内网络的配置&#xff0…

量子信息产业生态研究(一):关于《量子技术公司营销指南(2023)》的讨论

写在前面。量子行业媒体量子内参&#xff08;Quantum Insider&#xff09;编制的《量子技术公司营销指南》是一本实用的英文手册&#xff0c;它旨在帮助量子科技公司建立有效的营销策略&#xff0c;同时了解如何将自己定位成各自的行业专家。本文对这篇指南的主要内容进行了翻译…

4. Django 探究FBV视图

4. 探究FBV视图 视图(Views)是Django的MTV架构模式的V部分, 主要负责处理用户请求和生成相应的响应内容, 然后在页面或其他类型文档中显示. 也可以理解为视图是MVC架构里面的C部分(控制器), 主要处理功能和业务上的逻辑. 我们习惯使用视图函数处理HTTP请求, 即在视图里定义def…