对于本文件或 H2O-3 文档中未解答的任何问题,请使用:
H2O 是一个用于分布式、可扩展机器学习的内存平台。 H2O 使用熟悉的界面,如 R、Python、Scala、Java、JSON 和 Flow 笔记本/Web 界面,并与 Hadoop 和 Spark 等大数据技术无缝协作。 H2O 提供了许多流行算法的实现,例如广义线性模型 (GLM)、梯度提升机(包括 XGBoost)、随机森林、深度神经网络、堆叠集成、朴素贝叶斯、广义加性模型 (GAM)、Cox 比例风险、K-意味着,PCA,Word2Vec,以及全自动机器学习算法(H2O AutoML)。
H2O 是可扩展的,因此开发人员可以添加他们选择的数据转换和自定义算法,并通过所有这些客户端访问它们。 H2O 模型可以下载并加载到 H2O 内存中进行评分,或导出为 POJO 或 MOJO 格式,以便在生产中实现极快的评分。更多信息可以在 H2O 用户指南中找到。
H2O-3(此存储库)是 H2O 的第三个化身,也是 H2O-2 的后继者。
虽然本自述文件的大部分内容是为自己构建的开发人员编写的,但大多数 H2O 用户只是下载并使用预构建的版本。如果您是 Python 或 R 用户,安装 H2O 最简单的方法是通过 PyPI 或 Anaconda(对于 Python)或 CRAN(对于 R):
pip install h2o
install.packages( " h2o " )
如需最新的稳定版、夜间版本、Hadoop(或 Spark / Sparkling Water)版本或独立的 H2O jar,请访问:https://h2o.ai/download
有关下载和安装 H2O 的更多信息,请参阅 H2O 用户指南。
大多数人会与三到四个主要开源资源进行交互: GitHub (您已经找到了)、 GitHub issues (用于错误报告和问题跟踪)、用于 H2O 代码/软件特定问题的Stack Overflow和h2ostream (Google Group) /电子邮件讨论论坛)针对不适合 Stack Overflow 的问题。还有一个Gitter H2O 开发者聊天组,但出于存档目的并最大限度地提高可访问性,我们更希望在 Stack Overflow 上进行标准 H2O 问答。
您可以在我们的 GitHub 存储库中浏览并创建新问题:https://github.com/h2oai/h2o-3
Issues
选项卡GitHub
GitHub issues——在此处提交错误报告/跟踪问题
Stack Overflow——在这里询问所有代码/软件问题
交叉验证(Stack Exchange)——在这里提出算法/理论问题
h2ostream Google Group——在这里提出与代码无关的问题
Gitter H2O 开发者聊天
文档
下载(预构建包)
网站
Twitter——关注我们以获取更新和 H2O 新闻!
很棒的 H2O——与我们分享您以 H2O 为动力的创作
每个夜间构建都会将 R、Python、Java 和 Scala 工件发布到特定于构建的存储库。特别是,您可以在 maven/repo 目录中找到 Java 工件。
以下是使用 h2o-3 作为依赖项的 gradle 构建文件的示例片段。将 x、y、z 和 nnnn 替换为有效数字。
// h2o-3 dependency information
def h2oBranch = 'master'
def h2oBuildNumber = 'nnnn'
def h2oProjectVersion = "x.y.z.${h2oBuildNumber}"
repositories {
// h2o-3 dependencies
maven {
url "https://s3.amazonaws.com/h2o-release/h2o-3/${h2oBranch}/${h2oBuildNumber}/maven/repo/"
}
}
dependencies {
compile "ai.h2o:h2o-core:${h2oProjectVersion}"
compile "ai.h2o:h2o-algos:${h2oProjectVersion}"
compile "ai.h2o:h2o-web:${h2oProjectVersion}"
compile "ai.h2o:h2o-app:${h2oProjectVersion}"
}
有关安装夜间构建工件的信息,请参阅最新的 H2O-3 前沿夜间构建页面。
请参阅 h2o-droplets GitHub 存储库,了解如何将 Java 工件与 gradle 结合使用的工作示例。
注意:稳定的 H2O-3 工件会定期发布到 Maven Central(单击此处进行搜索),但可能会大大落后于 H2O-3 Bleeding Edge 夜间构建。
开始 H2O 开发需要 JDK 1.8+、Node.js、Gradle、Python 和 R。我们使用 Gradle 包装器(称为gradlew
)来确保在您的开发目录中安装最新的本地版本的 Gradle 和其他依赖项。
构建h2o
需要正确设置包含所需包的 R 环境和包含以下包的 Python 环境:
grip
tabulate
requests
wheel
要安装这些软件包,您可以使用 pip 或 conda。如果您在Windows上安装这些软件包时遇到问题,请按照本指南的 Windows 上的安装部分进行操作。
(注:建议使用VirtualEnv等虚拟环境来安装所有软件包。)
要从存储库构建 H2O,请执行以下步骤。
# Build H2O
git clone https://github.com/h2oai/h2o-3.git
cd h2o-3
./gradlew build -x test
You may encounter problems: e.g. npm missing. Install it:
brew install npm
# Start H2O
java -jar build/h2o.jar
# Point browser to http://localhost:54321
git clone https://github.com/h2oai/h2o-3.git
cd h2o-3
./gradlew syncSmalldata
./gradlew syncRPackages
./gradlew build
注意事项:
- 运行测试会启动五个测试 JVM,这些 JVM 形成一个 H2O 集群,并且需要至少 8GB RAM(最好是 16GB RAM)。
- Windows、OS X 和 Linux 支持运行
./gradlew syncRPackages
,强烈建议但不是必需的。./gradlew syncRPackages
确保一个完整且一致的环境,其中包含测试和构建所需的预先批准的软件包版本。这些包可以手动安装,但我们建议设置 ENV 变量并使用./gradlew syncRPackages
。要设置 ENV 变量,请使用以下格式(其中 `${WORKSPACE} 可以是任何路径):mkdir -p ${WORKSPACE}/Rlibrary export R_LIBS_USER=${WORKSPACE}/Rlibrary
git pull
./gradlew syncSmalldata
./gradlew syncRPackages
./gradlew clean
./gradlew build
我们建议在每次git pull
之后使用./gradlew clean
。
通过在 gradle build 命令行末尾添加-x test
来跳过测试。测试通常在具有 4 个 CPU(8 个超线程)和 16 GB RAM 的 Macbook Pro 笔记本电脑上运行 7-10 分钟。
每次拉取后不需要同步小数据,但如果测试由于丢失数据文件而失败,请尝试./gradlew syncSmalldata
作为第一个故障排除步骤。同步smalldata 会将数据文件从AWS S3 下载到工作区中的smalldata 目录。同步是增量的。不要签入这些文件。 Smalldata 目录位于 .gitignore 中。如果您不运行任何测试,则不需要smalldata 目录。
Windows、OS X 和 Linux 支持运行./gradlew syncRPackages
,强烈建议但不是必需的。 ./gradlew syncRPackages
确保一个完整且一致的环境,其中包含测试和构建所需的预先批准的软件包版本。这些包可以手动安装,但我们建议设置 ENV 变量并使用./gradlew syncRPackages
。要设置 ENV 变量,请使用以下格式(其中${WORKSPACE}
可以是任何路径):
mkdir -p ${WORKSPACE}/Rlibrary
export R_LIBS_USER=${WORKSPACE}/Rlibrary
./gradlew clean && ./gradlew build -x test && (export DO_FAST=1; ./gradlew dist)
open target/docs-website/h2o-docs/index.html
git 存储库的根目录包含一个 Makefile,其中包含开发中使用的频繁构建目标的便捷快捷方式。要构建h2o.jar
同时跳过测试以及构建替代程序集,请执行
make
要使用最小程序集构建h2o.jar
,请运行
make minimal
最小组装非常适合 H2O 机器学习算法的开发。它不会捆绑一些重量级依赖项(如 Hadoop),并且使用它可以节省构建时间以及从 Maven 存储库下载大型库的需要。
从命令行,使用which python
(或sudo which python
)验证python
是否正在使用新安装的包。使用 WinPython 路径更新环境变量。
pip install grip tabulate wheel
安装 Java 1.8+ 并将相应目录C:Program FilesJavajdk1.7.0_65bin
和 java.exe 添加到环境变量中的 PATH 中。要确保命令提示符检测到正确的 Java 版本,请运行:
javac -version
CLASSPATH变量还需要设置为JDK的lib子文件夹:
CLASSPATH=/<path>/<to>/<jdk>/lib
安装 Node.js 并添加安装目录C:Program Filesnodejs
,如果尚未预先添加,则该目录必须将 node.exe 和 npm.cmd 包含到 PATH 中。
安装 R 并将 bin 目录添加到您的 PATH(如果尚未包含)。
安装以下 R 包:
要从 R 会话中安装这些包:
pkgs <- c( " RCurl " , " jsonlite " , " statmod " , " devtools " , " roxygen2 " , " testthat " )
for ( pkg in pkgs ) {
if ( ! ( pkg %in% rownames(installed.packages()))) install.packages( pkg )
}
请注意,安装RCurl R 软件包需要 libcurl。
请注意,此包不涵盖运行测试,它们仅用于构建 H2O。
最后,安装 Rtools,它是一个命令行工具集合,用于促进 Windows 上的 R 开发。
注意:在 Rtools 安装过程中,请勿安装 Cygwin.dll。
注意:在安装 Cygwin 期间,取消选择 Python 软件包以避免与 Python.org 软件包发生冲突。
如果 Cygwin 已安装,请删除 Python 包或确保 Native Python 在 PATH 变量中位于 Cygwin 之前。
如果您还没有 Git 客户端,请安装一个。默认的可以在这里找到:http://git-scm.com/downloads。确保在安装之前启用命令提示符支持。
下载并更新 h2o-3 源代码:
git clone https://github.com/h2oai/h2o-3
cd h2o-3
./gradlew.bat build
如果遇到错误,请使用
--stacktrace
再次运行以获取有关缺少依赖项的更多说明。
如果您没有 Homebrew,我们建议您安装它。它使 OS X 的包管理变得容易。
安装 Java 1.8+。要确保命令提示符检测到正确的 Java 版本,请运行:
javac -version
使用自制程序:
brew install node
否则,请从 NodeJS 网站安装。
安装 R 并将 bin 目录添加到您的 PATH(如果尚未包含)。
安装以下 R 包:
要从 R 会话中安装这些包:
pkgs <- c( " RCurl " , " jsonlite " , " statmod " , " devtools " , " roxygen2 " , " testthat " )
for ( pkg in pkgs ) {
if ( ! ( pkg %in% rownames(installed.packages()))) install.packages( pkg )
}
请注意,安装RCurl R 软件包需要 libcurl。
请注意,此包不涵盖运行测试,它们仅用于构建 H2O。
安装Python:
brew install python
安装 pip 包管理器:
sudo easy_install pip
接下来安装所需的包:
sudo pip install wheel requests tabulate
OS X 应该已经安装了 Git。下载并更新 h2o-3 源代码:
git clone https://github.com/h2oai/h2o-3
cd h2o-3
./gradlew build
注意:在普通机器上,可能需要很长时间(大约一个小时)才能运行所有测试。
如果遇到错误,请使用
--stacktrace
再次运行以获取有关缺少依赖项的更多说明。
curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -
sudo apt-get install -y nodejs
安装 Java 8。安装说明可以在此处找到 JDK 安装。要确保命令提示符检测到正确的 Java 版本,请运行:
javac -version
安装说明可在此处找到 R 安装。单击“下载 Linux 版 R”。单击“ubuntu”。请按照给定的说明进行操作。
要安装所需的软件包,请按照与上述 OS X 相同的说明进行操作。
注意:如果该过程无法在 Linux 上安装 RStudio Server,请运行以下命令之一:
sudo apt-get install libcurl4-openssl-dev
或者
sudo apt-get install libcurl4-gnutls-dev
如果您还没有 Git 客户端:
sudo apt-get install git
下载并更新 h2o-3 源代码:
git clone https://github.com/h2oai/h2o-3
cd h2o-3
./gradlew build
如果遇到错误,请使用
--stacktrace
再次运行以获取有关缺少依赖项的更多说明。
确保您没有以 root 身份运行,因为
bower
会拒绝这样的运行。
curl -sL https://deb.nodesource.com/setup_16.x | sudo bash -
sudo apt-get install -y nodejs
cd /opt
sudo wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz"
sudo tar xzf jdk-7u79-linux-x64.tar.gz
cd jdk1.7.0_79
sudo alternatives --install /usr/bin/java java /opt/jdk1.7.0_79/bin/java 2
sudo alternatives --install /usr/bin/jar jar /opt/jdk1.7.0_79/bin/jar 2
sudo alternatives --install /usr/bin/javac javac /opt/jdk1.7.0_79/bin/javac 2
sudo alternatives --set jar /opt/jdk1.7.0_79/bin/jar
sudo alternatives --set javac /opt/jdk1.7.0_79/bin/javac
cd /opt
sudo wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
sudo rpm -ivh epel-release-7-5.noarch.rpm
sudo echo "multilib_policy=best" >> /etc/yum.conf
sudo yum -y update
sudo 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-pandas
sudo pip install scikit-learn grip tabulate statsmodels wheel
mkdir ~/Rlibrary
export JAVA_HOME=/opt/jdk1.7.0_79
export JRE_HOME=/opt/jdk1.7.0_79/jre
export PATH=$PATH:/opt/jdk1.7.0_79/bin:/opt/jdk1.7.0_79/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
# Build H2O
./gradlew syncSmalldata
./gradlew syncRPackages
./gradlew build -x test
要在本地启动 H2O 集群,请在命令行上执行以下命令:
java -jar build/h2o.jar
H2O 用户指南中提供了可用的启动 JVM 和 H2O 选项(例如-Xmx
、 -nthreads
、 -ip
)的列表。
下载页面上提供了预构建的 H2O-on-Hadoop zip 文件。每个 Hadoop 发行版本在 h2o-3 中都有一个单独的 zip 文件。
要自己构建支持 Hadoop 的 H2O,请首先安装适用于 python 的 sphinx: pip install sphinx
然后从顶级 h2o-3 目录中输入以下内容来启动构建:
export BUILD_HADOOP=1;
./gradlew build -x test;
./gradlew dist;
这将创建一个名为“target”的目录并在其中生成 zip 文件。请注意,当用户名是jenkins
时, BUILD_HADOOP
是默认行为(参考settings.gradle
);否则您必须请求它,如上所示。
要仅为选定的发行版构建 zip 文件,请将H2O_TARGET
环境变量与BUILD_HADOOP
一起使用,例如:
export BUILD_HADOOP=1;
export H2O_TARGET=hdp2.5,hdp2.6
./gradlew build -x test;
./gradlew dist;
在h2o-hadoop
目录中,每个 Hadoop 版本都有一个驱动程序的构建目录和 fatjar 的程序集目录。
您需要:
h2o-hadoop
中添加新的驱动程序目录和程序集目录(每个目录都有一个build.gradle
文件)h2o-3/settings.gradle
make-dist.sh
中的HADOOP_VERSIONS
h2o-dist/buildinfo.json
列表中Hadoop 通过其 Java API 支持安全的用户模拟。经过 kerberos 身份验证的用户可以代理任何符合 NameNode 的 core-site.xml 文件中输入的指定条件的用户名。这种模拟仅适用于与 Hadoop API 或支持它的 Hadoop 相关服务的 API 的交互(这与切换到原始计算机上的该用户不同)。
设置安全用户模拟(对于 h2o):
hadoop.proxyuser.<proxyusername>.hosts
:允许代理用户代表有效用户执行模拟操作的主机hadoop.proxyuser.<proxyusername>.groups
:被模拟用户必须属于的组才能模拟与该代理用户一起使用hadoop.proxyuser.<proxyusername>.users
:允许代理用户模拟的用户<property> <name>hadoop.proxyuser.myproxyuser.hosts</name> <value>host1,host2</value> </property> <property> <name>hadoop.proxyuser.myproxyuser.groups</name> <value>group1,group2</value> </property> <property> <name>hadoop.proxyuser.myproxyuser.users</name> <value>user1,user2</value> </property>
可以在 hdfs 审核日志中查看模拟的 HDFS 操作(“auth:PROXY”应出现在适用的条目中的ugi=
字段中)。同样,YARN 应在资源管理器 UI 中的某处显示“auth:PROXY”。
要使用 h2o 的 Hadoop 驱动程序进行安全模拟:
在尝试此操作之前,请参阅下面的冒充风险
使用 h2odriver 时(例如,使用hadoop jar ...
),除了任何其他参数外,还指定-principal <proxy user kerberos principal>
、 -keytab <proxy user keytab path>
和-run_as_user <hadoop username to impersonate>
。需要论证。如果配置成功,代理用户将登录并模拟-run_as_user
,只要用户或组配置属性(上面配置)允许该用户;这是由 HDFS 和 YARN 强制执行的,而不是 h2o 的代码。驱动程序有效地将其安全上下文设置为模拟用户,因此所有支持的 Hadoop 操作都将以该用户身份执行(例如 YARN、HDFS API 支持安全模拟用户,但其他可能不支持)。
hadoop.proxyuser.<proxyusername>.hosts
属性。su
)hadoop.proxyuser.<proxyusername>.{hosts,groups,users}
属性设置为“*”可能会大大增加安全风险。 $ git diff
diff --git a/h2o-app/build.gradle b/h2o-app/build.gradle
index af3b929..097af85 100644
--- a/h2o-app/build.gradle
+++ b/h2o-app/build.gradle
@@ -8,5 +8,6 @@ dependencies {
compile project(":h2o-algos")
compile project(":h2o-core")
compile project(":h2o-genmodel")
+ compile project(":h2o-persist-hdfs")
}
diff --git a/h2o-persist-hdfs/build.gradle b/h2o-persist-hdfs/build.gradle
index 41b96b2..6368ea9 100644
--- a/h2o-persist-hdfs/build.gradle
+++ b/h2o-persist-hdfs/build.gradle
@@ -2,5 +2,6 @@ description = "H2O Persist HDFS"
dependencies {
compile project(":h2o-core")
- compile("org.apache.hadoop:hadoop-client:2.0.0-cdh4.3.0")
+ compile("org.apache.hadoop:hadoop-client:2.4.1-mapr-1408")
+ compile("org.json:org.json:chargebee-1.0")
}
Sparkling Water 结合了两种开源技术:Apache Spark 和 H2O 机器学习平台。它使 H2O 的高级算法库(包括深度学习、GLM、GBM、K-Means 和分布式随机森林)可从 Spark 工作流程访问。 Spark 用户可以从任一平台中选择最佳功能来满足他们的机器学习需求。用户可以将Spark的RDD API和Spark MLLib与H2O的机器学习算法结合起来,或者独立于Spark使用H2O进行模型构建过程并在Spark中对结果进行后处理。
苏打水资源:
H2O 的主要文档是 H2O 用户指南。请访问 http://docs.h2o.ai 了解 H2O 项目文档的顶级介绍。
要生成 REST API 文档,请使用以下命令:
cd ~/h2o-3
cd py
python ./generate_rest_api_docs.py # to generate Markdown only
python ./generate_rest_api_docs.py --generate_html --github_user GITHUB_USER --github_password GITHUB_PASSWORD # to generate Markdown and HTML
生成的文档的默认位置是build/docs/REST
。
如果构建失败,请尝试gradlew clean
,然后尝试git clean -f
。
夜间构建页面上提供了每个前沿夜间构建的文档。
如果您在出版物中使用 H2O 作为工作流程的一部分,请使用以下 BibTex 条目引用您的 H2O 资源:
@Manual{h2o_package_or_module,
title = {package_or_module_title},
author = {H2O.ai},
year = {year},
month = {month},
note = {version_information},
url = {resource_url},
}
格式化 H2O 软件引用示例:
H2O 算法手册可在文档主页上找到。
@Manual{h2o_booklet_name,
title = {booklet_title},
author = {list_of_authors},
year = {year},
month = {month},
url = {link_url},
}
格式化小册子引用示例:
Arora, A.、Candel, A.、Lanford, J.、LeDell, E. 和 Parmar, V.(2016 年 10 月)。使用 H2O 进行深度学习。 http://docs.h2o.ai/h2o/latest-stable/h2o-docs/booklets/DeepLearningBooklet.pdf。
Click, C.、Lanford, J.、Malohlava, M.、Parmar, V. 和 Roark, H.(2016 年 10 月)。使用 H2O 的梯度增强模型。 http://docs.h2o.ai/h2o/latest-stable/h2o-docs/booklets/GBMBooklet.pdf。
多年来,H2O.ai(公司)和更大的开源社区内的大量贡献者共同构建了 H2O。您可以通过回答 Stack Overflow 问题或提交错误报告来开始为 H2O 做出贡献。请加入我们!
SriSatish Ambati
Cliff Click
Tom Kraljevic
Tomas Nykodym
Michal Malohlava
Kevin Normoyle
Spencer Aiello
Anqi Fu
Nidhi Mehta
Arno Candel
Josephine Wang
Amy Wang
Max Schloemer
Ray Peck
Prithvi Prabhu
Brandon Hill
Jeff Gambera
Ariel Rao
Viraj Parmar
Kendall Harris
Anand Avati
Jessica Lanford
Alex Tellez
Allison Washburn
Amy Wang
Erik Eckstrand
Neeraja Madabhushi
Sebastian Vidrio
Ben Sabrin
Matt Dowle
Mark Landry
Erin LeDell
Andrey Spiridonov
Oleg Rogynskyy
Nick Martin
Nancy Jordan
Nishant Kalonia
Nadine Hussami
Jeff Cramer
Stacie Spreitzer
Vinod Iyengar
Charlene Windom
Parag Sanghavi
Navdeep Gill
Lauren DiPerna
Anmol Bal
Mark Chan
Nick Karpov
Avni Wadhwa
Ashrith Barthur
Karen Hayrapetyan
Jo-fai Chow
Dmitry Larko
Branden Murray
Jakub Hava
Wen Phan
Magnus Stensmo
Pasha Stetsenko
Angela Bartz
Mateusz Dymczyk
Micah Stubbs
Ivy Wang
Terone Ward
Leland Wilkinson
Wendy Wong
Nikhil Shekhar
Pavel Pscheidl
Michal Kurka
Veronika Maurerova
Jan Sterba
Jan Jendrusak
Sebastien Poirier
Tomáš Frýda
Ard Kelmendi
Yuliia Syzon
Adam Valenta
Marek Novotny
Zuzana Olajcova
科学顾问委员会
Stephen Boyd
Rob Tibshirani
Trevor Hastie
系统、数据、文件系统和 Hadoop
Doug Lea
Chris Pouliot
Dhruba Borthakur
Jishnu Bhattacharjee, Nexus Venture Partners
Anand Babu Periasamy
Anand Rajaraman
Ash Bhardwaj
Rakesh Mathur
Michael Marks
Egbert Bierman
Rajesh Ambati