[工作笔记]在 32bit Windows 7上编译Single Node Hadoop
更新于2018.8.9
因工作需要在自己的笔记本上安装一个单节点Hadoop用于调试, 而公司只提供了一个32位Windows 7笔记本, 因此本文提供了本人在此环境下搭载Hadoop的踩坑记录。因公司电脑的管理员权限是临时申请的,权限有限,并且访问外网需要通过公司的代理服务器,所以遇到的问题还是很多的,希望能帮助到有类似问题的朋友,也欢迎大神拍砖,只要能进步,从不怕被喷。
首先参考了Hadoop官方文档:
https://wiki.apache.org/hadoop/Hadoop2OnWindows
和:
https://svn.apache.org/viewvc/hadoop/common/branches/branch-2/BUILDING.txt?view=markup
这里吐槽下:既然从2.2版本开始官方支持了Windows,说明的确有好多在Windows上运行Hadoop的需求,那为啥文档不跟上,这里的版本号还是2016年更新的
1. 准备需要的内容
因为要模拟的集群上Hadoop版本为2.7.7,所以以下以Hadoop 2.7.7
为例:
- hadoop-2.7.7-src.tar.gz 和 hadoop-2.7.7.tar.gz
地址:http://mirrors.ibiblio.org/apache/hadoop/common/hadoop-2.7.7/
注意这里两个压缩包都要下载,因为我们要在windows下从源码编译Hadoop,并替换里面自带的用于Unix的文件。
- JDK 8
地址:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
注意选择对应系统版本的JDK
- Maven 3.5.4
地址:https://maven.apache.org/download.cgi
- ProtocolBuffer 2.5.0
地址:https://github.com/google/protobuf/releases
在这里一定要找到protoc-2.5.0-win32.zip
不要下载更高版本的,不然会报错
- CMake
地址:https://cmake.org/download/
- Windows SDK v7.1
地址:https://www.microsoft.com/en-us/download/details.aspx?id=8442
- Cygwin 或者 Gnuwin
地址:https://cygwin.com/install.html
这里用的是cygwin,不过没有影响,目的只是使用sh等unix命令行工具
2. 安装工具
大部分工具直接解压缩就好了,这里说明本人在安装中遇到的问题。
- JDK
安装完成后,在系统环境变量中添加JAVA_HOME
环境变量:右键单击计算机,属性,高级系统设置,环境变量,在下方系统变量上新建,名称为JAVA_HOME,值为JDK安装的根目录,如图。
同时,在上方用户路径中,添加JDK根目录/bin,注意与其它已添加的路径用分号隔开。环境变量的设置都是如此,下面将不再重复。
Cygwin
没什么特殊的,安装完成后,需要将Cygwin根目录/bin添加至用户路径。否则windows命令行会找不到sh.exe等文件。Windows SDK
这个安装还是很容易出现问题的,笔者一共碰到两个问题,分享给大家:
问题1:.Net框架版本不对
原因是安装了开发版的.net 4.0,删掉后重新安装微软官方版本即可。
问题2:
A problem occurred while installing selected Windows SDK components.
Installation of the "Microsoft Windows SDK for Windows 7" product has reported the following error: Please refer to Samples\Setup\HTML\ConfigDetails.htm document for further information.
Please attempt to resolve the problem and then start Windows SDK setup again. If you continue to have problems with this issue, please visit the SDK team support page at http://go.microsoft.com/fwlink/?LinkId=130245.
笔者出现这个原因是因为安装了新版本的 Visual C ++ 2010 Redistributable
将所有2010版本的Visual C++卸载之后,重新安装即可。
- ProtocolBuffer
同样,解压缩后需要将protoc.exe所在目录添加到用户路径,这里注意,如果你下载的版本不是2.5.0才会有bin文件夹,所以如果你看到了bin文件夹,说明下载的版本不正确。
3. 编译Hadoop二进制文件
在windows上编译Hadoop真的是个力气活- -,尤其是在公司网络环境中,大概全程花了笔者一下午,当然其中主要因素是本人对这个行业不熟悉哈哈哈。所以,如下步骤中有可能会有非必要的步骤,或者有更好的解决方法,有兴趣的可以试试,记得留言告诉我。
添加环境变量
在系统变量中,添加变量Platform,值为Win32(64位系统应该是x64,可以在上面的官方文档连接中找到)重新编译Hadoop二进制文件
解压缩hadoop-2.7.7-src.tar.gz
打开winsdk的command prompt (不要用cmd)- 安装winsdk后,开始菜单里面找。
编译的命令为(在解压缩后的Hadoop src根目录下)
$ mvn package -Pdist,native-win -DskipTests -Dtar
这个过程耗时很长,而且如果途中遇到问题会直接终止进程,这样就需要重来,所以,在尝试变异之前最好先排查可能出现的问题,笔者遇到的问题及解决方法如下:
问题1:
Unresolveable build extension:
Plugin org.apache.felix:maven-bundle-plugin:2.3.7 or one of its dependencies could not be resolved
这个是因为Maven无法连接到互联网,Maven在第一次编译时需要访问外网下载文件,笔者公司的网络需要走代理才能访问外网,于是修改Maven配置文件Maven根目录/conf/settings.xml
<proxies>
<proxy>
<active>true</active>
<protocol>https</protocol>
<username>用户名</username>
<password>密码</password>
<host>代理服务器地址u</host>
<port>代理端口</port>
</proxy>
</proxies>
之后该问题解决。
问题2
java.io.IOException: Cannot run program “”: CreateProcess error=2, The system cannot find the file specified
笔者在这里遇到的问题是cygwin下面bin目录没有添加到用户变量中, 看来跟着官方文档走也要自己动动脑子。不用cygwin的话装它干嘛?
添加cygwin根目录/bin
到用户变量后,该问题解决。
问题3
Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.8.1:jar (module-javadocs) on project hadoop-annotations: MavenReportException: Error while creating archive
看起来是java 8的问题,我找到的解决方法是修改编译命令
mvn package -Dmaven.javadoc.skip=true -Pdist,native-win -DskipTests -Dtar
之后,该问题解决。
JIRA链接:
https://issues.apache.org/jira/browse/HADOOP-11449
问题4
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
这个就头疼了,我都已经设置了代理,你还是找不到包,我估计是Maven在执行到这里已经跑到不知道哪个程序里面去了。这里我决定用一个比较笨的办法解决它:
这里我缺少的包为apache-tomcat-6.0.48.tar.gz
,那我就手动下载这个包,并且放到下面两个目录(没有就自己创建):
\hadoop-2.7.7-src\hadoop-hdfs-project\hadoop-hdfs-httpfs\downloads
\hadoop-2.7.7-src\hadoop-common-project\hadoop-kms\downloads
还不够!因为运行过程中会清除掉文件夹里内容,修改下面两个文件
\hadoop-2.7.7-src\hadoop-common-project\hadoop-kms\pom.xml
\hadoop-2.7.7-src\hadoop-hdfs-project\hadoop-hdfs-httpfs\pom.xml
并注释掉(或删除)这段代码(两个文件里都有)
<mkdir dir="downloads"/>
<get
src="${tomcat.download.url}"
dest="downloads/apache-tomcat-${tomcat.version}.tar.gz" verbose="true" skipexisting="true"/>
最后。。终于成功了。。如果在Linux下一次成功估计根本不会这么高兴
4. 完成安装
这是最后一步拉,应该不会有什么特别的问题了。胜利在望!
首先, 解压缩hadoop-2.7.7.tar.gz
,这就是运行Hadoop的地方啦,放在一个尽量短且路径中没有奇怪符号的文件中比较合适,我用的是d://hadoop-2.7.7/
。
注意,windows中解压缩tar.gz文件可以用7zip,这里需要管理员权限,因为解压缩过程中会设置两个symlink,否则无法正常运行。
之后,将在上一步编译好的文件覆盖d://hadoop-2.7.7/bin
文件中内容,上一步编译的文件在\hadoop-2.7.7-src\hadoop-dist\target\hadoop-2.7.7\bin
中。
最后,设置Hadoop环境变量:
添加系统变量HADOOP_HOME,值为解压好的hadoop根目录,我的是d://hadoop-2.7.7/
添加替换后的bin文件夹至用户变量hadoop-2.7.7\bin
到这里就全部安装好了,接下来就是设置各种conf/xxxx-site.xml
中的属性啦,这个有很多教程,根据自己的情况设置,随便贴个别人的连接:
https://www.cnblogs.com/harvey888/articles/6275778.html
测试
以上全部搞好后打开命令行,执行
$ hdfs namenode -format
然后转换到hadoop的sbin目录:
$ cd d://hadoop-2.7.7/sbin
开启所有进程
$ start-all.cmd
之后,将开启4个command窗口,分别代表namenode, Yarn resource manager, datanode, Yarn nodemanager.
如果四个窗口都持续运行不报错,说明成功,可以连接到hdfs web UI试验,默认url为http://127.0.0.1/50070/
看见hdfs的web界面宣告万事OK。
结语
本人刚刚从业大数据,(说不定还没)入门水平,希望能帮助到同样的朋友们,工作过程中遇到所有问题基本都要google,查document,上stackoverflow问。还好本人移居海外多年,英语倒是没什么问题,许多问题都能很快在英文文档中找到解决方法。所以,虽然水平不行,但翻译水平还是可以的,有什么中文文档解决不了的问题,可以喊我帮你查阅英文的官方文档,相信自己会在这个过程中不停进步。