Hadoop+;windows上的HBase群集:未找到winutils

Hadoop+;windows上的HBase群集:未找到winutils,windows,hadoop,cygwin,hbase,cluster-computing,Windows,Hadoop,Cygwin,Hbase,Cluster Computing,我正在尝试在Windows上使用Hadoop 2.20和HBase 0.98建立一个完全分布式的4节点开发集群。我已经在Windows上成功构建了Hadoop,最近还在Windows上构建了HBase 我们已经成功地运行了Hadoop安装指南中的wordcount示例,以及自定义WebHDFS作业。由于目前还不支持在Windows上完全分发的HBase,我正在cygwin下运行HBase 尝试从我的主机(./bin/start hbase.sh)启动hbase时,出现以下错误: 2014-04-

我正在尝试在Windows上使用Hadoop 2.20和HBase 0.98建立一个完全分布式的4节点开发集群。我已经在Windows上成功构建了Hadoop,最近还在Windows上构建了HBase

我们已经成功地运行了Hadoop安装指南中的wordcount示例,以及自定义WebHDFS作业。由于目前还不支持在Windows上完全分发的HBase,我正在cygwin下运行HBase

尝试从我的主机(./bin/start hbase.sh)启动hbase时,出现以下错误:

2014-04-17 16:22:08,599 ERROR [main] util.Shell: Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
    at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:278)
    at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:300)
    at org.apache.hadoop.util.Shell.<clinit>(Shell.java:293)
    at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:76)
    at org.apache.hadoop.conf.Configuration.getStrings(Configuration.java:1514)
    at org.apache.hadoop.hbase.zookeeper.ZKConfig.makeZKProps(ZKConfig.java:113)
    at org.apache.hadoop.hbase.zookeeper.ZKServerTool.main(ZKServerTool.java:46)
2014-04-17 16:22:08599错误[main]util.Shell:未能在hadoop二进制路径中找到winutils二进制文件
java.io.IOException:在Hadoop二进制文件中找不到可执行文件null\bin\winutils.exe。
位于org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:278)
位于org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:300)
位于org.apache.hadoop.util.Shell(Shell.java:293)
位于org.apache.hadoop.util.StringUtils。(StringUtils.java:76)
位于org.apache.hadoop.conf.Configuration.getStrings(Configuration.java:1514)
位于org.apache.hadoop.hbase.zookeeper.ZKConfig.makeZKProps(ZKConfig.java:113)
位于org.apache.hadoop.hbase.zookeeper.ZKServerTool.main(ZKServerTool.java:46)
查看Shell.java源代码,此处设置为null的似乎是HADOOP_HOME环境变量。在D:/hadoop下使用hadoop,在C:/cygwin/root/usr/local/HBase下使用cygwin root下的HBase,cygwin$hadoop\u HOME变量是/cygdrive/D/hadoop/,Windows系统环境变量%hadoop\u HOME%是D:\hadoop。在我看来,对于这两个变量,应该正确地找到变量

也可能相关:我正在运行Windows Server 2012 x64


编辑:我已经验证了在D:\hadoop\bin\中确实有一个winutils.exe。

我们找到了它。因此,在Hadoop的Shell.java中,您会发现有两个选项可以通信Hadoop路径

// first check the Dflag hadoop.home.dir with JVM scope
String home = System.getProperty("hadoop.home.dir");

// fall back to the system/user-global env variable
if (home == null) {
  home = System.getenv("HADOOP_HOME");
}
经过反复试验,我们发现在HBase选项(HBase的HBase-env.sh,HBase_OPTS变量)中,您需要将此选项添加到Hadoop的Windows(!)路径中。在我们的例子中,我们需要添加
-Dhadoop.home.dir=D:/hadoop

祝其他偶然发现这一点的人好运;)