Windows构建/安装错误的Hadoop

时间:2015-07-08 14:39:54

标签: windows hadoop msbuild building

我正在尝试在Windows x64(8.1和Server 2012 R2)上安装Apache Hadoop 2.7.1,但我的目标是失败:

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

过去几天,我认为我遵循了所有教程的步骤,例如HadoopOnWindowsthis one。我做了所有先决条件,但正如我用Google搜索,我的问题的相关问题如下:

  • 设置MSBuild.exe的路径,如: C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319;
  • 路径
  • 将路径设置为CMake
  • 安装Microsoft SDK 7.1并使用其Microsoft SDK 7.1 CMD运行
  • 尝试使用Visual构建: hadoop-common \ src \ main \ winutils \ libwinutils.sln hadoop-common \ src \ main \ winutils \ winutils.sln Studio 2013,但由于编译错误,构建失败。 Visual Studio 2010甚至不想打开它们。我不知道如何纠正编译错误(如果这是问题)

其他人,类似问题
我关注的一些类似主题包括:onetwothreefour。我主要尝试了所有的建议,但它仍然存在。

错误

    [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的共同项目\ Hadoop的公里\下载
C:\ Hadoop的2.7.1-SRC \ Hadoop的HDFS项目\ Hadoop的HDFS-httpfs \下载
并从文件中删除:
C:\ Hadoop的2.7.1-SRC \ Hadoop的共同项目\ Hadoop的公里\目标\ antrun \集结main.xml中
C:\ Hadoop的2.7.1-SRC \ Hadoop的HDFS项目\ Hadoop的HDFS-httpfs \目标\ antrun \集结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 中设置了代理,并根据@tiho的相同答案中的建议将PATH设置为MAVEN_OPTS。这是问题吗?除了那里建议的选项,我还在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] ------------------------------------------------

4 个答案:

答案 0 :(得分:8)

我已经设法使用Visual Studio 2015社区版构建它。

以下是我如何构建它:

我的环境

这是我的购物清单:

  
      
  • Windows 10
  •   
  • JDK 1.8.0_51
  •   
  • Maven 3.3.3
  •   
  • Findbugs 1.3.9(我没有用过这个)
  •   
  • ProtocolBuffer 2.5.0(我没有选择最新最好的 - 它必须是2.5.0)
  •   
  • CMake 3.3.0
  •   
  • Visual Studio 2015社区版
  •   
  • GnuWin32 0.6.3 - 安装有点痛苦但是cygwin
  • 也是如此   
  • zlib 1.2.8
  •   
  • 互联网连接
  •   

Windows系统环境变量

  
      
  • JAVA_HOME =“C:\ Program Files \ Java \ jdk1.8.0_51”
  •   
  • MAVEN_HOME = C:\ Apache的行家-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的位置,在构建过程中需要它。

Protoc Buffers 2.5.0

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

我不能100%确定为这个win64版本安装win32组件的效果。但: “Hadoop 0.23+要求协议缓冲区JAR(protobufs.jar)位于客户端和服务器的类路径上;需要本机二进制文件来编译此版本和更高版本的Hadoop。” - http://wiki.apache.org/hadoop/ProtocolBuffers

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

如果以任何方式使用它来编译本机代码,我们可能会遗漏一些指针。我会尽可能地回到这里。

调整Hadoop来源

嗯,这是允许构建执行的必要条件。它不应该影响构建本身的质量,但是请记住,结果是一个非官方的,不受支持的,使用你自己的风险hadoop,用于开发环境。

迁移VS项目

需要使用Visual Studio 2015打开以下文件:

\ Hadoop的共同项目\ Hadoop的共同\ SRC \主\ winutils \ winutils.vcxproj \ Hadoop的共同项目\ Hadoop的共同\ SRC \主\天然\ native.vcxproj

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

为hdfs启用cmake VS 2015项目生成

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

  

&lt; condition property =“generator”value =“Visual Studio 10”else =“Visual Studio 14 2015 Win64”&gt;

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

构建

您应该尝试在Windows上找到“VS2015的开发命令提示符”。我仍然想知道这有什么特别之处,但事实是它只适用于那个。

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

  

设置Platform = x64

     

设置ZLIB_HOME = C:\ zlib \ include(与官方说明不同,这应该指向include文件夹)。

最后建立它

转到hadoop源文件夹并发出:

  

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

下一步是什么?

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

我会尝试在我的博客上保留二进制文件的链接:

  

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

答案 1 :(得分:4)

我花了一整天来设法构建它......微软显然有很多向后兼容的问题。如果Hadoop转向更新的工具链,这将有所帮助。

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

  1. 卸载Visual Studio 2013(我建议卸载任何Visual Studio&gt; = 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
  7. 我在我的PATH(在Windows SDK shell中)添加了我的Git安装(对于GNU工具)的bin文件夹,CMake的bin文件夹以及包含protoc.exe的文件夹。此外(但大多数人不应该需要它),我不得不设置Maven使用我的HTTP代理,首先编辑Maven的文档中指出的settings.xml,还要定义环境变量{{1 ,否则在构建期间的某个时刻会出现超时。

    请注意,我在构建期间发现了大量警告:我怀疑其中一些警告是由使用Java SDK 1.8而不是1.7引起的。然而,在终于看到MAVEN_OPTS=-Dmy.proxy.host -Dhttp.proxyPort=my.proxy.port之后,我并不想再尝试使用1.7。

答案 2 :(得分:1)

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

这是我的设置,如下所示:

  1. Windows 10
  2. Visual Studio 2017社区版本
  3. Maven 3.5.0
  4. JDK 1.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多个小时来解决所有问题,希望我的解决方案也能帮助其他人。

答案 3 :(得分:0)

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

我使用了“ VS 2017的x64本机工具命令提示符”。

所以,这是我的步骤

1.阅读“ \ hadoop-3.1.2-src \ Building.txt”的“在Windows上构建”部分。

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

2.将源放置在短路径中,以免出现“命令行太长”错误。

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

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

使用本机工具时,.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 Studio\2017\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.运行“ VS 2017 x64本机工具命令提示符”

从“ VS 2017的x64本机工具命令提示符”中导航到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分钟。

就这样,伙计们!