Windows构建/安装错误的Hadoop

Cri*_*tea 9 windows msbuild hadoop building

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

    [INFO] Apache Hadoop Common ............................... FAILURE [ 37.925 s]
Run Code Online (Sandbox Code Playgroud)

在过去的几天里,我想我遵循了所有教程的步骤,比如HadoopOnWindows,或者这个.我做了所有先决条件,但正如我用Google搜索,我的问题的相关问题如下:

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

其他人,类似的问题
我遵循的一些类似主题是:,,,.我主要尝试了所有的建议,但它仍然打破了.

错误

    [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
Run Code Online (Sandbox Code Playgroud)

帮助
我不知道接下来该做什么,我觉得我尝试了一切.请帮我解决此错误并继续在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
Run Code Online (Sandbox Code Playgroud)

更新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.
Run Code Online (Sandbox Code Playgroud)

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

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
并从中删除files:
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"/>
Run Code Online (Sandbox Code Playgroud)

请注意,我也使用代理,我在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] ------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

Rom*_*res 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系统环境Path变量中:

;%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-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上找到"VS2015的开发命令提示符".我仍然想知道这有什么特别之处,但事实是它只适用于此.

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

设置Platform = x64

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

最后建立它

转到hadoop源文件夹并发出:

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

接下来是什么?

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

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

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


tih*_*iho 4

我花了一整天的时间来构建它......微软显然在向后兼容性方面存在很多问题。如果 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

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

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