【发布时间】:2013-09-08 21:58:25
【问题描述】:
我是 Hadoop 新手,尝试在我的 Windows 7 机器上运行它时遇到了问题。特别是我对运行 Hadoop 2.1.0 很感兴趣,因为它的release notes 提到支持在 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' 文件夹中)
【问题讨论】:
-
@mamdouh alramadan 谢谢你的建议。我可能会切换到带有 Hadoop 的某种 Linux 风格。但是现在我所有的环境都是基于 Windows 的,并且在主机操作系统中的虚拟机中拥有带有大数据文件的 HDFS 分区似乎并不... 优雅对我来说。