我是 Hadoop 新手,尝试在我的 Windows 7 机器上运行它时遇到了问题。特别是我对运行 Hadoop 2.1.0 很感兴趣,因为它的发行说明提到支持在 Windows 上运行。我知道我可以尝试使用 Cygwin 在 Windows 上运行 1.x 版本,甚至可以使用 Cloudera 等准备好的 VM,但这些选项在某些方面对我来说不太方便。
在检查了来自http://apache-mirror.rbc.ru/pub/apache/hadoop/common/hadoop-2.1.0-beta/的压缩包后,我发现确实有一些 *.cmd 脚本可以在没有 Cygwin 的情况下运行. 当我格式化 HDFS 分区时一切正常,但是当我尝试运行 hdfs namenode 守护程序时,我遇到了两个错误:首先,非致命的,是找不到 winutils.exe(它确实不存在于下载的 tarball 中)。我在 Apache Hadoop 源代码树中找到了该组件的源代码,并使用 Microsoft SDK 和 MSbuild 对其进行了编译。由于详细的错误消息,很清楚将可执行文件放在哪里以满足 Hadoop。但是第二个致命错误没有包含足够的信息让我解决:
13/09/05 10:20:09 FATAL namenode.NameNode: Exception in namenode join
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native Method)
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:423)
at org.apache.hadoop.fs.FileUtil.canWrite(FileUtil.java:952)
at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:451)
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverStorageDirs(FSImage.java:282)
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:200)
...
13/09/05 10:20:09 INFO util.ExitUtil: Exiting with status 1
看起来应该编译其他东西。我将尝试使用 Maven 从源代码构建 Hadoop,但没有更简单的方法吗?是不是有一些我不知道的选项可以禁用本机代码并使该 tarball 在 Windows 上可用?
谢谢你。
更新。确实是的。“自制”包包含一些额外的文件,最重要的是 winutils.exe 和 hadoop.dll。有了这个文件namenode和datanode成功启动。我认为这个问题可以结束了。我没有删除它以防有人面临同样的困难。
更新 2. 要构建“自制”包,我执行了以下操作:
- 得到资源,并解压它们。
- 仔细阅读 BUILDING.txt。
- 安装的依赖项:
3a)Windows SDK 7.1
3b)Maven(我使用 3.0.5)3c)JDK(我使用 1.7.25)
3d)ProtocolBuffer(我使用 2.5.0 - http://protobuf.googlecode.com/files/ protoc-2.5.0-win32.zip )。只需将编译器(protoc.exe)放入某些 PATH 文件夹就足够了。
3e) 一套UNIX命令行工具(我安装了Cygwin) - 启动 Windows SDK 的命令行。开始 | 所有程序 | 微软视窗 SDK v7.1 | ... 命令提示符(我修改了此快捷方式,在命令行中添加选项 /release 以构建本机代码的发布版本)。所有接下来的步骤都是从 SDK 命令行窗口内部进行的)
设置环境:
设置 JAVA_HOME={path_to_JDK_root}
似乎 JAVA_HOME不能包含空格!
set PATH={path_to_maven_bin};%PATH%
set Platform=x64
set PATH={path_to_cygwin_bin};%PATH%
set PATH={path_to_protoc.exe};%PATH%
- 将 dir 更改为源根文件夹(BUILDING.txt 警告路径长度存在一些限制,因此源根目录应该有短名称 - 我使用 D:\hds)
冉建设过程:
mvn 包 -Pdist -DskipTests
您可以尝试不使用“skipTests”,但在我的机器上,一些测试失败并且构建被终止。它可能与 BUILDING .txt 中提到的符号链接问题有关。8. 在 hadoop-dist\target\hadoop-2.1.0-beta 中选择结果(windows 可执行文件和 dll 在 'bin' 文件夹中)