Windows 上的 Hadoop+HBase 集群:找不到 winutils

Wim*_*ckx 3 windows cygwin hadoop hbase cluster-computing

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

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

尝试从我的 master (./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)
Run Code Online (Sandbox Code Playgroud)

查看Shell.java源码,这里设置为null的,好像是HADOOP_HOME环境变量。使用 D:/hadoop 下的 hadoop,C:/cygwin/root/usr/local/hbase 下 cygwin root 下的 HBase,cygwin $HADOOP_HOME 变量为 /cygdrive/d/hadoop/,Windows 系统环境变量 %HADOOP_HOME%是 D:\hadoop 。在我看来,对于这两个变量,应该正确找到变量...

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

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

Wim*_*ckx 6

我们已经找到了。因此,在 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");
}
Run Code Online (Sandbox Code Playgroud)

经过反复试验,我们发现在 HBase 选项(HBase 的 hbase-env.sh、HBASE_OPTS 变量)中,您需要将 Windows(!) 路径添加到 Hadoop 中。在我们的例子中,我们需要添加-Dhadoop.home.dir=D:/hadoop.

祝其他碰巧遇到这个的人好运;)。