Windows上的Hadoop构build/安装错误

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

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

在过去的日子里,我想我遵循所有的教程,如HadoopOnWindows ,或这一个的步骤 。 我做了所有的先决条件,但是当我Google时,我的问题的相关问题如下:

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

其他类似的问题
我所遵循的一些类似的话题是: 一 , 二 , 三 , 四 。 我主要尝试了所有的build议,但仍然打破。

错误

  [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更仔细地看错误堆栈,我看到没有find文件Microsoft.Cpp.props 。 此外,整个文件夹程序文件(x86)/ MSBuild丢失。 因此,我安装了Visual Studio 2010,并解决了这个问题。

当然会出现新的问题。 我能够构buildlibwinutils ,但不能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. 

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

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中设置了代理,并将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] ------------------------------------------------ 

花了我整整一天的时间来建立它…微软显然有很多向后兼容的问题。 如果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) – 避免在安装Windows SDK 7.1时出错
  3. 完全卸载.NET Framework 4.5 – 以避免在转换为COFF期间失败:文件无效或损坏
  4. 重启
  5. 安装.NET Framework 4.0
  6. 安装Windows SDK 7.1

我添加到我的路径(在Windows SDK外壳)我的Git安装(用于GNU工具)的bin文件夹,CMake的bin文件夹和包含protoc.exe的文件夹。 另外(但大多数人不应该需要它),我必须设置Maven使用我的HTTP代理,首先编辑settings.xml如Maven的文档中所示,但也通过定义环境变量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(我没有用过这个)
  • 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缓冲器2.5.0

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

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

所以我明白win32可执行文件只在构建过程中使用(jar等效应该打包在构建中)。

如果以任何方式使用它来编译本机代码,我们可能会留下一些乱七八糟的指针。 我可以的时候会回来的

调整Hadoop来源

那么,这是必要的,以允许建立执行。 它不应该影响构建本身的质量,但让我们记住,结果是一个非官方的,没有支持的,使用自己的风险hadoop,旨在为发展环境。

迁移VS项目

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

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

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

启用cmake VS 2015项目代hdfs

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

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

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

建设它

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

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

设置Platform = x64

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

最后建设它

转到hadoop源文件夹并发出:

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

接下来是什么?

按照官方文档来配置和启动hadoop实例。

我会尽量保持与我的博客上的二进制文件的链接:

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