在windows10下编译Hadoop-2.7.2源码

1. 编译hadoop-2.7.2的目的

编译hadoop源代码,意义在于当我们使用eclipse进行hadoop开发时,可以直接在本地运行,而无需打包成jar,然后再提交到hadoop服务器进行运行。当然,这还需要一个可以支持hadoop对应版本的eclipse插件,即hadoop-eclipse-2.x.x.jar

如果在linux系统上,其实很容易,没有那么多磕磕盼盼。在windows系统上编译,需要安装的程序或者工具比较多。但是总结起来,就那么几个,能够通过ant,maven构建java项目,能够通过gcc编译c++项目。这其中还需要依赖protobuf库。

我当前的环境是:

windows版本:windows 10教育版

Hadoop2.7.2

2. 准备工作

  1. 下载hadoop-2.7.2-src.zip,对此版本的Hadoop进行编译得到最终的jar,好在

  2. 解压hadoop-2.7.2-src.zip

    加压后的目录结构如下:在这里插入图片描述

  3. 查看上面的BUILDING.txt,了解构建的详情

    编译的说明在BUILDING.txt文件中,通过搜索windows找到windows编译的说明。

在这里插入图片描述
根据需要安装如下这些库

Building on Windows

----------------------------------------------------------------------------------
Requirements:

* Windows System
* JDK 1.7+
* Maven 3.0 or later
* Findbugs 1.3.9 (if running findbugs)
* ProtocolBuffer 2.5.0
* CMake 2.6 or newer
* Windows SDK 7.1 or Visual Studio 2010 Professional
* Windows SDK 8.1 (if building CPU rate control for the container executor)
* zlib headers (if building native code bindings for zlib)
* Internet connection for first build (to fetch all Maven and Hadoop dependencies)
* Unix command-line tools from GnuWin32: sh, mkdir, rm, cp, tar, gzip. These
  tools must be present on your PATH.
  
Unix command-line tools are also included with the Windows Git package which
can be downloaded from http://git-scm.com/download/win.

If using Visual Studio, it must be Visual Studio 2010 Professional (not 2012).
Do not use Visual Studio Express.  It does not support compiling for 64-bit,
which is problematic if running a 64-bit system.  The Windows SDK 7.1 is free to
download here:

http://www.microsoft.com/en-us/download/details.aspx?id=8279

根据BUILDING.txt中所述,在windows10中使用如下的库:

在这里插入图片描述

	 # 新增环境变量
	 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_261
	 HADOOP_HOME=D:\software\hadoop-2.7.2
	 ANT_HOME=C:\Users\sjl\Downloads\apache-ant-1.9.15
	 CYGWIN64_HOME=C:\cygwin64
	 OPENSLL_HOME=C:\Program Files\OpenSSL-Win64
	 Platform=x64
	 ZLIB_HOME=D:\Program Files\zlib127-dll\include
	 MAVEN_HOME=D:\Program Files\apache-maven-3.6.3-bin\apache-maven-3.6.3
	
	# 在系统环境变量Path中添加
	%JAVA_HOME%\bin
	%CYGWIN64_HOME%\bin
	%MAVEN_HOME%\bin
	%JAVA_HOME%\jre\bin
	%HADOOP_HOME%\bin
	C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\
	D:\Program Files\findbugs-1.3.9\bin
	D:\Program Files\protobuf-2.5.0\src
	%ANT_HOME%\bin
	C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin
	%OPENSSL_HOME%\bin
	%CYGWIN64_HOME%\bin

cmd中验证:

	ant -v
	mvn -v
	protoc --version
	java -version
	findbugs -version
	cmake -version

当这些库都准备好之后,就可以开始编译了。

3. 编译

在这里插入图片描述

通过开始> Visual Studio 2019>Developer Command Prompt for VS2019

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>d:
D:\>cd hadoop-2.7.2-src
D:\hadoop-2.7.2-src>ls
BUILDING.txt  dev-support            hadoop-dist               hadoop-minicluster   hadoop-yarn-project
LICENSE.txt   hadoop-assemblies      hadoop-hdfs-project       hadoop-project       pom.xml
NOTICE.txt    hadoop-client          hadoop-mapreduce-project  hadoop-project-dist
README.txt    hadoop-common-project  hadoop-maven-plugins      hadoop-tools
# 注意,一定要进入hadoop-2.7.2-src根目录,要有pom.xml才能进行编译
mvn clean package -Pdist -DskipTests
或者
mvn package -Pdist,native,docs -DskipTests -Dtar
# 如果编译失败,修改配置或安装所需库之后,在重复执行上面的mvn。

如果编译中没啥问题的话,就会出现如下结果:

在这里插入图片描述

编译好的jar包路径为:D:\hadoop-2.7.2-src\hadoop-dist\target\hadoop-2.7.2

4. 问题总结

通常在编译过程中都会出现点问题,现总结如下:

问题1:

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.3.1:exec (compile-ms-winutils) on project hadoop-common: Command execution failed.: Cannot run program "msbuild" (in directory "D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common"): CreateProcess error=2, 系统找不到指定的文件。 -> [Help 1]

msbuild是微软的一个编译工具,这里提示找不到msbuild,因此可能是没有安装msbuild或没有配置到环境变量中。下面这样是不行的,还会报其他的错,正确的方式是需要下载Visual Studio,并将msbuild的路径(如,C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin)加入到系统环境变量Path中。

# 因为这个目录下有msbuild.exe文件
C:\Windows\Microsoft.NET\Framework\v4.0.30319

问题2:

[INFO] --- exec-maven-plugin:1.3.1:exec (compile-ms-winutils) @ hadoop-common ---
在此解决方案中一次生成一个项目。若要启用并行生成,请添加“/m”开关。
生成启动时间为 2021/6/18 12:06:02。
节点 1 上的项目“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.sln”(默认目标)。
ValidateSolutionConfiguration:
  正在生成解决方案配置“Release|x64”。
项目“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.sln”(1)正在节点 1 上生成“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.vcxproj.
metaproj”(2) (默认目标)。
项目“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.vcxproj.metaproj”(2)正在节点 1 上生成“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\libw
inutils.vcxproj”(3) (默认目标)。
D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\libwinutils.vcxproj(44,3): error MSB4019: 未找到导入的项目“D:\Microsoft.Cpp.Default.props”。请确认 <Import> 声明中的路径正确,且磁
盘上存在该文件。
已完成生成项目“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\libwinutils.vcxproj”(默认目标)的操作 - 失败。
已完成生成项目“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.vcxproj.metaproj”(默认目标)的操作 - 失败。
已完成生成项目“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.sln”(默认目标)的操作 - 失败。

生成失败。

“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.sln”(默认目标) (1) ->
“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.vcxproj.metaproj”(默认目标) (2) ->
“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\libwinutils.vcxproj”(默认目标) (3) ->
  D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\libwinutils.vcxproj(44,3): error MSB4019: 未找到导入的项目“D:\Microsoft.Cpp.Default.props”。请确认 <Import> 声明中的路径正确,且
磁盘上存在该文件。

    0 个警告
    1 个错误

已用时间 00:00:00.74

解决办法是:

Visual Studio分别打开如下这两个文件,项目 > 重定目标解决方案 > 确定。目的是将项目信息升级到你的Visual Studio的版本。

D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.sln

D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\native\native.sln

在这里插入图片描述
在这里插入图片描述

Visual Studio的输出可以到,通过升级将某些文件中的v100,修改为v142了。

在这里插入图片描述

weinutils.sln也是类似处理。

在这里插入图片描述

问题3:

严重性	代码	说明	项目	文件	行	禁止显示状态
错误		CMake Error at C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY
  OPENSSL_INCLUDE_DIR)		C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake	230	

提示没有找到openssl

解决办法是:在window10中安装openssl,并在系统环境变量中Path中配置openssl的路径。

问题4:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (pre-dist) on project hadoop-project-dist: An Ant BuildException has occured: Execute failed: java.io.IOException: Cannot run program "sh" (in directory "D:
\gitCode\JDHadoop-2.7.1\hadoop-project-dist\target"): CreateProcess error=2, ?????????
[ERROR] around Ant part ...<exec dir="D:\gitCode\JDHadoop-2.7.1\hadoop-project-dist\target" executable="sh" failοnerrοr="true">... @ 41:103 in D:\gitCode\JDHadoop-2.7.1\hadoop-project-dist\target\antrun\build-main.xml
[ERROR] -> [Help 1]

解决办法是:安装cygwin64,并配置环境变量。

问题5:

项目“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.vcxproj.metaproj”(2)正在节点 1 上生成“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\libwinutils.
vcxproj”(3) (默认目标)。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(439,5): error MSB8020: 无法找到 Visual Studio 2010 的生成工具(平台工具集 =“v100”)。若要使用 v100
生成工具进行生成,请安装 Visual Studio 2010 生成工具。或者,可以升级到当前 Visual Studio 工具,方式是通过选择“项目”菜单或右键单击该解决方案,然后选择“重定解决方案目标”。 [D:\hadoop-2.7.2-src\hadoop-common-projec
t\hadoop-common\src\main\winutils\libwinutils.vcxproj]
已完成生成项目“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\libwinutils.vcxproj”(默认目标)的操作 - 失败。
已完成生成项目“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.vcxproj.metaproj”(默认目标)的操作 - 失败。
已完成生成项目“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.sln”(默认目标)的操作 - 失败。

生成失败。

“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.sln”(默认目标) (1) ->
“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\winutils.vcxproj.metaproj”(默认目标) (2) ->
“D:\hadoop-2.7.2-src\hadoop-common-project\hadoop-common\src\main\winutils\libwinutils.vcxproj”(默认目标) (3) ->
(PrepareForBuild 目标) ->
  C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(439,5): error MSB8020: 无法找到 Visual Studio 2010 的生成工具(平台工具集 =“v100”)。若要使用 v100
 生成工具进行生成,请安装 Visual Studio 2010 生成工具。或者,可以升级到当前 Visual Studio 工具,方式是通过选择“项目”菜单或右键单击该解决方案,然后选择“重定解决方案目标”。 [D:\hadoop-2.7.2-src\hadoop-common-proje
ct\hadoop-common\src\main\winutils\libwinutils.vcxproj]

    0 个警告
    1 个错误

已用时间 00:00:00.58

这是因为在Hadoop-2.7.2-src/BUILDING.txt中要求的是Visual Studio 2010,而当前使用的是Visual Studio 2019,因此在构建时系统没找到Visual Studio 2010

解决办法是:

修改D:\hadoop-2.7.2-src\hadoop-hdfs-project\hadoop-hdfs\pom.xml中,搜索Visual Studio,修改Visual Studio 2010为你所使用的版本。如我修改前后分别为:

# 修改前
	<condition property="generator" value="Visual Studio 10" else="Visual Studio 10 Win64">
# 修改后
	<condition property="generator" value="Visual Studio 16 2019" else="Visual Studio 16 2019">

如果修改后的版本不对的话,在终端中会提示Visual Studio的正确版本是哪些的,选择对应的字符串填到上面的位置就行 。

可参考win7通过源码编译hadoop-2.7.0

问题6:

错误 MSB4019 Microsoft.Cpp.Default.props

参看vs2019 错误 MSB4019 Microsoft.Cpp.Default.props

这个错误原因是msbuild没有安装好,或在安装Visual Studio时没有安装C++组件,或者配置在系统环境变量Path中的路径有问题,需要修改为Visual Studio下的正确路径,如:

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NqPi7W6D-1624180519613)(Hadoop.assets/2020101215410911.png)]

找到自己的原因,然后解决。

从错误编译走向成功编译的过程很枯燥,如果心烦了,就冥想一会而,或出去走走,散去负能量,撸起袖子加油干。

5. 参考

[1] win7通过源码编译hadoop-2.7.0
[2] Win10-x64编译Hadoop2.7.3
[3] Windows 源码编译Hadoop 2.7.4生成X64
[4] Win10x64编译Hadoop2.7.4源码包
[5] Hadoop源代码在Windows下面的编译
[6] vs2019 错误 MSB4019 Microsoft.Cpp.Default.props

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hadoop是一个开源的、可拓展的分布式计算平台,能够对大规模数据进行存储和处理。Hadoop 2.7.2是Hadoop的一个版本,它提供了更高的可靠性、可伸缩性和性能。 Hadoop 2.7.2的下载过程相对简单。首先,在Hadoop的官方网站上找到2.7.2版本的下载页面。在下载页面中,选择适合你操作系统的二进制版本,比如可以有Linux、Windows等。然后,点击下载按钮开始下载。 下载完成后,解压缩下载文件。这时可以得到一个包含Hadoop所有相关文件和文件夹的目录。进入这个目录,可以看到一些核心的文件夹,例如bin、conf、lib等。bin文件夹中包含了一些Hadoop的使用工具和脚本,conf文件夹包含了Hadoop的配置文件,而lib文件夹包含了Hadoop所需的库文件。 在下载完成后,还需要进行一些配置才能使用Hadoop。首先,在conf文件夹中找到hadoop-env.sh文件,根据自己的系统环境配置一些相关的变量,例如JAVA_HOME。然后,编辑core-site.xml和hdfs-site.xml配置文件,指定Hadoop的一些关键参数,比如文件系统的URI和数据存储路径等。 完成配置后,就可以启动Hadoop集群了。在命令行中进入bin目录,运行start-all.sh脚本,启动Hadoop的各个组件,例如HDFS和YARN。启动完成后,可以使用Hadoop的命令行工具或编写代码进行数据的存储和处理了。 总的来说,下载Hadoop 2.7.2只需要几个简单的步骤,但在配置和使用时可能需要一些额外的学习和实践。通过合理的配置和灵活的应用,Hadoop可以帮助我们处理大规模的数据,并发挥出其分布式计算的优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值