Hadoop on Windows 构建/安装错误

Hadoop on Windows Building/ Installation Error

我正在尝试在 Windows x64(8.1 和 Server 2012 R2)上安装 Apache Hadoop 2.7.1,但我没有达到目标:

    [INFO] Apache Hadoop Common ............................... FAILURE [ 37.925 s]

在过去的日子里,我想我遵循了所有教程的步骤,例如HadoopOnWindows, or this one。我完成了所有先决条件,但正如我在谷歌上搜索的那样,与我的问题相关的如下:

其他人,类似问题
我正在关注的一些类似主题是:one, two, three, four。我主要尝试了所有的建议,但还是坏了。

错误

    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 01:11 min
    [INFO] Finished at: 2015-07-08T15:18:29+02:00
    [INFO] Final Memory: 69M/269M
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.3.1:exec (c
    ompile-ms-winutils) on project hadoop-common: Command execution failed. Process
    exited with an error: 1 (Exit value: 1) -> [Help 1]
    [ERROR]
    [ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit
    ch.
    [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    [ERROR]
    [ERROR] For more information about the errors and possible solutions, please rea
    d the following articles:
    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionE
    xception
    [ERROR]
    [ERROR] After correcting the problems, you can resume the build with the command

    [ERROR]   mvn <goals> -rf :hadoop-common

帮助
我不知道下一步该做什么,我觉得我尝试了一切。请帮助我解决此错误并继续在 Windows.

上安装 Hadoop

更新 1 仔细查看错误堆栈,我发现找不到文件 Microsoft.Cpp.props。此外,整个文件夹 Program Files (x86)/MSBuild 都丢失了。因此,我安装了 Visual Studio 2010 并解决了这个问题。

当然,新的问题又出现了。我可以构建 libwinutils,但不能构建 winutils。我收到许多 LNK2001 错误:

Error   48  error LNK1120: 18 unresolved externals  C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\x64\Release\winutils.exe  winutils
Error   36  error LNK2001: unresolved external symbol BuildServiceSecurityDescriptor    C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils
Error   32  error LNK2001: unresolved external symbol ChownImpl C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils
Error   40  error LNK2001: unresolved external symbol CreateEnvironmentBlock    C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   44  error LNK2001: unresolved external symbol CreateLogonTokenForUser   C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   41  error LNK2001: unresolved external symbol DestroyEnvironmentBlock   C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   37  error LNK2001: unresolved external symbol EnableImpersonatePrivileges   C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils
Error   34  error LNK2001: unresolved external symbol GetSecureJobObjectName    C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils
Error   38  error LNK2001: unresolved external symbol KillTask  C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils
Error   43  error LNK2001: unresolved external symbol LoadUserProfileForLogon   C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   35  error LNK2001: unresolved external symbol LogDebugMessage   C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils
Error   46  error LNK2001: unresolved external symbol LookupKerberosAuthenticationPackageId C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   31  error LNK2001: unresolved external symbol MIDL_user_allocate    C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\hadoopwinutilsvc_s.obj    winutils
Error   30  error LNK2001: unresolved external symbol MIDL_user_free    C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\hadoopwinutilsvc_s.obj    winutils
Error   47  error LNK2001: unresolved external symbol RegisterWithLsa   C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   33  error LNK2001: unresolved external symbol SplitStringIgnoreSpaceW   C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils
Error   42  error LNK2001: unresolved external symbol UnloadProfileForLogon C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   45  error LNK2001: unresolved external symbol UnregisterWithLsa C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\task.obj  winutils
Error   39  error LNK2001: unresolved external symbol wsceConfigRelativePath    C:\hdfs\hadoop-common-project\hadoop-common\src\main\winutils\service.obj   winutils

更新 2 @tiho 的回答解决了上面提到的问题(我非常感谢,因为我已经花了 4 天)。现在,一个全新的问题,目标:

[INFO] Apache Hadoop KMS .................................. FAILURE [  1.531 s]

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (dist) on project hadoop-kms: An Ant BuildException has occured: java.net.UnknownHostException: archive.apache.org
[ERROR] around Ant part ...<get dest="downloads/apache-tomcat-6.0.41.tar.gz" skipexisting="true" verbose="true" src="http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.41/bin/apache tomcat-6.0.41.tar.gz"/>... @ 5:182 in C:\hadoop-2.7.1-src\hadoop-common project\hadoop-kms\target\antrun\build-main.xml: Unknown host archive.apache.org.

我找到了解决上述问题的一个蹩脚的解决方法。我手动下载了它,添加到文件夹中:

C:\hadoop-2.7.1-src\hadoop-common-project\hadoop-kms\downloads
C:\hadoop-2.7.1-src\hadoop-hdfs-project\hadoop-hdfs-httpfs\downloads
并从文件中删除:
C:\hadoop-2.7.1-src\hadoop-common-project\hadoop-kms\target\antrun\build-main.xml
C:\hadoop-2.7.1-src\hadoop-hdfs-project\hadoop-hdfs-httpfs\target\antrun\build-main.xml
以下代码行:

<mkdir dir="downloads"/>
  <get dest="downloads/apache-tomcat-6.0.41.tar.gz" skipexisting="true" verbose="true" src="http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.41/bin/apache-tomcat-6.0.41.tar.gz"/>

注意我也在使用代理,我在settings.xml中设置了代理,并按照相同的建议将PATH设置为MAVEN_OPTS来自@tiho 的回答。这是问题吗?除了那里建议的选项外,我还在 MAVEN_OPTS.

添加了密码和用户名

请注意,我可以使用浏览器访问:http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.41/bin/apache-tomcat-6.0.41.tar.gz

但我还是很好奇如何正确解决这个问题,因为这个问题不断出现,我需要再次做同样的工作。

更新 3 话虽这么说,本周最快乐的时刻:

[INFO] ------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------
[INFO] Total time: 21:05 min
[INFO] Finished at: 2015-07-10T11:33:17+02:00
[INFO] Final Memory: 228M/672M
[INFO] ------------------------------------------------

花了我一整天的时间来设法构建它...Microsoft 显然在向后兼容性方面存在很多问题。如果 Hadoop 迁移到更新的工具链,将会有所帮助。

以下是我必须执行的关键步骤(除了文档中提到的步骤)。这是使用 Windows SDK 编译器而不是 VS 2010(应该可以使用 VS 2010,但我还没有尝试过):

  1. 卸载 Visual Studio 2013(我建议卸载任何 Visual Studio >= 2010)——这是为了消除错误 MSBUILD : Configuration error MSB4146: Cannot evaluate the property expression "$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V120\'))"
  2. 卸载 Visual Studio C++ 2010 Redistributable (x64 + x86) -- 避免 Error when installing windows SDK 7.1
  3. 完全卸载 .NET Framework 4.5 -- 以避免 Failure during conversion to COFF: file invalid or corrupt
  4. 重启
  5. 安装 .NET Framework 4.0
  6. 安装Windows SDK 7.1

我在我的 PATH(在 Windows SDK shell 中)添加了 Git 安装的 bin 文件夹(用于 GNU 工具)、CMake 的 bin 文件夹,以及包含 protoc.exe 的文件夹。此外(但大多数人不需要它),我必须设置 Maven 以使用我的 HTTP 代理,首先按照 Maven 文档中的说明编辑 settings.xml,但也通过定义环境变量 MAVEN_OPTS=-Dmy.proxy.host -Dhttp.proxyPort=my.proxy.port,如否则在构建过程中的某个时刻会超时。

请注意,我在构建过程中注意到了大量警告:我怀疑其中一些是由于使用 Java SDK 1.8 而不是 1.7 引起的。然而,在最终看到 BUILD SUCCESS 之后,我不想再尝试使用 1.7.

我已经成功地使用 Visual Studio 2015 社区版构建了它。

这是我构建它的方式:

我的环境

这是我的购物清单:

  • Windows 10
  • JDK 1.8.0_51
  • Maven 3.3.3
  • Findbugs 1.3.9 (I haven't used this)
  • ProtocolBuffer 2.5.0 (I didn't pick the latest and greatest here - it has to be 2.5.0)
  • CMake 3.3.0
  • Visual Studio 2015 Community Edition
  • GnuWin32 0.6.3 - a bit painful to install but so is cygwin
  • zlib 1.2.8
  • internet connection

Windows 系统环境变量

  • JAVA_HOME = "C:\Program Files\Java\jdk1.8.0_51"
  • MAVEN_HOME=c:\apache-maven-3.3.3

(确保将以上内容指向您的 JDK 版本和 maven 安装)

我将以下内容附加到我的 windows 系统环境路径变量中:

;%MAVEN_HOME%\bin;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;c:\zlib

奇怪的"C:\Windows\Microsoft.NET\Framework64\v4.0.30319"路径是MSBuild.exe的位置,在构建过程中需要。

协议缓冲区 2.5.0

哦不,另一个 unix/linux 只构建?我已经下载了名为 protoc-2.5.0-win32.zip 的 google 包。然后将二进制文件 (protoc.exe) 提取到 c:\windows\system32 - 只是将其放在路径上的一种懒惰方式。

我不能 100% 确定为这个 win64 版本使用 win32 组件的效果。但: "Hadoop 0.23+ requires the protocol buffers JAR (protobufs.jar) to be on the classpath of both clients and servers; the native binaries are required to compile this and later versions of Hadoop." - http://wiki.apache.org/hadoop/ProtocolBuffers.

所以我知道 win32 可执行文件仅在构建过程中使用(等效的 jar 应该打包在构建中)。

如果以任何方式使用它来编译本机代码,我们可能会留下一些乱序的指针。我会在可能的时候回来讨论这个问题。

调整 Hadoop 源代码

好吧,这是允许构建执行所必需的。它不应该影响构建本身的质量,但请记住,结果是一个非官方的、不受支持的、使用风险自负的 hadoop,用于开发环境。

迁移 VS 项目

以下文件需要用Visual Studio2015打开:

\hadoop-common-project\hadoop-common\src\main\winutils\winutils.vcxproj \hadoop-common-project\hadoop-common\src\main\native\native.vcxproj

Visual Studio 会抱怨它们是旧版本。您所要做的就是全部保存并关闭。

为 hdfs 启用 cmake VS 2015 项目生成

在\hadoop-hdfs-project\hadoop-hdfs\pom.xml的第441行,编辑else值如下:

<condition property="generator" value="Visual Studio 10" else="Visual Studio 14 2015 Win64">

("value" 值适用于 win32 - 如果为 win32 构建,您可能需要编辑它)。

建设中

您应该尝试在 windows 上找到 "Development Command Prompt for VS2015"。我仍然想知道这有什么特别之处,但事实是它只适用于此。

更多环境变量 这些应该在命令提示符下完成:

set Platform=x64

set ZLIB_HOME=C:\zlib\include (unlike the official instructions, this should be pointing to the include folder).

终于建成了

转到 hadoop 源文件夹并发出:

mvn package -Pdist,native-win -DskipTests -Dtar

下一步是什么?

按照官方文档配置和启动您的 hadoop 实例,运行。

我将尝试在我的博客上为二进制文件保留 link:

http://kplitzkahran.blogspot.co.uk/2015/08/hadoop-271-for-windows-10-binary-build.html

我在 Windows 10 上用 Visual Studio 2017 成功构建了 Hadoop 3.0.2。

这是我的设置:

  1. Windows 10
  2. Visual Studio 2017 社区版
  3. 行家 3.5.0
  4. JDK1.8.0_144
  5. Cmake 3.10.0-rc1
  6. ProtocolBuffer 2.5.0
  7. Cygwin

首先我在VS 2017中打开这两个解决方案文件并保存。

hadoop-3.0.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.sln

hadoop-3.0.2-src\hadoop-common-project\hadoop-common\src\main\native\native.sln

这会将这两个项目从 VS 2010 迁移到 VS 2017。

其次,我需要更改位于

的 pom 文件的第 141 行
D:\hadoop-3.0.2-src\hadoop-hdfs-project\hadoop-hdfs-native-client\pom.xml

<condition property="generator" value="Visual Studio 10" else="Visual Studio 15 2017 Win64">

这将确保在构建过程中使用 VS 2017。

我也遇到过 MSBuild 抱怨命令太长然后停止工作的问题,我认为这与 Maven 默认存储库位置有关。为了解决这个问题,我添加了以下行

<localRepository>D:/maven_repo</localRepository>

归档

apache-maven-3.5.0\conf\settings.xml

将 Maven 存储库移动到新位置(在本例中 D:/maven_repo)。

最后我打开 x64 Native Tools Command Prompt for VS 2017cd 到 hadoop 源文件夹并发出以下命令:

mvn clean package -Pdist,native-win -DskipTests -Dtar -Dmaven.repo.local=D:\maven_repo

我花了 10 多个小时来解决所有问题,希望我的解决方案也能帮助到其他人。

我想分享我在 Windows 8.1 上构建 Hadoop 3.1.2 的经验。我花了很多时间修复构建错误,但我所需要的只是 Hadoop 源代码根文件夹中 Building.txt 文件中的 'Building on Windows' 部分。

我用了"x64 Native Tools Command Prompt for VS 2017".

所以,这是我的步骤

1. 阅读“\hadoop-3.1.2-src\Building.txt”,第 'Building on Windows' 节。

这实际上可能足以弄清楚您需要做什么,但是对于 VS 2017,该过程有点不同。

2. 将源放入短路径以避免'the command line is too long' 错误。

我使用了d:\hdp\文件夹

3. 如 Building.txt 中所述,使用“\hadoop-3.1.2-src\dev-support\win-paths-eg.cmd”设置环境。

使用Native Tools时,.cmd文件末尾不需要CALL命令,所以注释掉:

@REM CALL "%MSVS%\VC\vcvarsall.bat" %VCVARSPLAT%

我的设置如下所示:

SET Platform=x64
SET VCVARSPLAT=amd64

@REM ******************
@REM Forcibly move the Maven local repo
@REM (use short path to avoid 'the command line is too long' error)

SET MAVEN_OPTS=-Dmaven.repo.local=D:\.m2

@REM *******************************************
@REM
@REM Locations of your bits and pieces
@REM
@REM NOTE: cmake is assumed to already be on the
@REM command path
@REM (it's true when you use Native Tools Command Prompt)

SET MAVEN_HOME=%MAVEN_HOME%
SET JAVA_HOME=%JAVA_HOME%
@REM SET MSVS=C:\Program Files (x86)\Microsoft Visual Studio17\Professional
SET PROTO_BIN=D:\tools\protoc-2.5.0-win32
SET GIT_HOME=C:\Program Files (x86)\Git
set ZLIB_HOME=D:\tools\zlib-1.2.11

SET PATH=%JAVA_HOME%\bin;%MAVEN_HOME%\bin;%PROTO_BIN%;%GIT_HOME%\bin;%PATH%

@REM CALL "%MSVS%\VC\vcvarsall.bat" %VCVARSPLAT%

当然,您需要 Java、Maven、ProtoBuf、Git 和 ZLib 安装在上面列出的路径中。

4. 运行 "x64 Native Tools Command Prompt for VS 2017"

从 "x64 Native Tools Command Prompt for VS 2017" 导航到 Hadoop 的源文件夹,运行 您的 'win-paths-eg.cmd' 并开始使用 Maven 构建:

d:
cd D:\hdp
D:\hdp\dev-support\win-paths-eg.cmd
mvn package -Pdist,native-win -DskipTests -Dtar
5. 等待约 30-40 分钟。

就这些了,伙计们!