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。我完成了所有先决条件,但正如我在谷歌上搜索的那样,与我的问题相关的如下:
- 将路径设置为 MSBuild.exe,如:C:\Windows\Microsoft.NET\Framework64\v4.0.30319; in Path
- 将路径设置为 CMake
- 安装 Microsoft SDK 7.1 和 运行 及其 Microsoft SDK 7.1 CMD
- 尝试构建:hadoop-common\src\main\winutils\libwinutils.sln 和 hadoop-common\src\main\winutils\winutils.sln 与 Visual Studio 2013 年,但由于编译错误导致构建失败。 Visual Studio2010连打开都不想打开。我不知道如何纠正编译错误(以防这是问题所在)
其他人,类似问题
我正在关注的一些类似主题是: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,但我还没有尝试过):
- 卸载 Visual Studio 2013(我建议卸载任何 Visual Studio >= 2010)——这是为了消除错误
MSBUILD : Configuration error MSB4146: Cannot evaluate the property expression "$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V120\'))"
- 卸载 Visual Studio C++ 2010 Redistributable (x64 + x86) -- 避免 Error when installing windows SDK 7.1
- 完全卸载 .NET Framework 4.5 -- 以避免 Failure during conversion to COFF: file invalid or corrupt
- 重启
- 安装 .NET Framework 4.0
- 安装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。
这是我的设置:
- Windows 10
- Visual Studio 2017 社区版
- 行家 3.5.0
- JDK1.8.0_144
- Cmake 3.10.0-rc1
- ProtocolBuffer 2.5.0
- 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 2017
,cd
到 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 分钟。
就这些了,伙计们!
我正在尝试在 Windows x64(8.1 和 Server 2012 R2)上安装 Apache Hadoop 2.7.1,但我没有达到目标:
[INFO] Apache Hadoop Common ............................... FAILURE [ 37.925 s]
在过去的日子里,我想我遵循了所有教程的步骤,例如HadoopOnWindows, or this one。我完成了所有先决条件,但正如我在谷歌上搜索的那样,与我的问题相关的如下:
- 将路径设置为 MSBuild.exe,如:C:\Windows\Microsoft.NET\Framework64\v4.0.30319; in Path
- 将路径设置为 CMake
- 安装 Microsoft SDK 7.1 和 运行 及其 Microsoft SDK 7.1 CMD
- 尝试构建:hadoop-common\src\main\winutils\libwinutils.sln 和 hadoop-common\src\main\winutils\winutils.sln 与 Visual Studio 2013 年,但由于编译错误导致构建失败。 Visual Studio2010连打开都不想打开。我不知道如何纠正编译错误(以防这是问题所在)
其他人,类似问题
我正在关注的一些类似主题是: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.
更新 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,但我还没有尝试过):
- 卸载 Visual Studio 2013(我建议卸载任何 Visual Studio >= 2010)——这是为了消除错误
MSBUILD : Configuration error MSB4146: Cannot evaluate the property expression "$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V120\'))"
- 卸载 Visual Studio C++ 2010 Redistributable (x64 + x86) -- 避免 Error when installing windows SDK 7.1
- 完全卸载 .NET Framework 4.5 -- 以避免 Failure during conversion to COFF: file invalid or corrupt
- 重启
- 安装 .NET Framework 4.0
- 安装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。
这是我的设置:
- Windows 10
- Visual Studio 2017 社区版
- 行家 3.5.0
- JDK1.8.0_144
- Cmake 3.10.0-rc1
- ProtocolBuffer 2.5.0
- 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 2017
,cd
到 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\
文件夹
使用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 分钟。
就这些了,伙计们!