Windows 构建部署 hadoop 2.7.3 环境 (一) single node

零  开篇词

为什么要搭建windows下的hadoop环境?对于我而言,家中有数台PC,服务器,甚至还有树莓派等设备,操作系统也是五花八门,由于windows的机器是付费正版化的,所以为了保护投资而不统一安装Linux。顺带说一句其实对于专业人员来说,windows近些年的产品如windows7, windows10,以及windows server 2008和之后的版本也还是不错的,没有什么大问题。通过查阅hadoop的官方文档,了解到最新的版本hadoop可以支持windows并且不再需要cygwin,也就是windows也可以在产品中使用。通过官方的手册的指导,经过50+小时漫长难熬的夜晚的探索之后,终于跑出了第一个demo,在此记录下构建的过程和遇到的坑,以减少后来人再掉坑里的可能。

本文描述如何通过源代码在windows10下构建部署hadoop以及使用single node运行第一个demo。

一 参考资料和准备工作

预备知识

  • 了解电脑常识,比如知道电脑是开着还是关着,知道怎么打开电脑,知道电脑用的是什么操作系统
  • 最好有c/c++开发背景,最起码知道怎么安装visual stdio 编译环境,会在windows下编译c/c++代码
  • 有java开发背景,最好了解JDK如何 安装
  • 听说过maven
  • 有一颗强大的心脏,快速稳定的网络,时间选择在二半夜夜深人静的时候,开始之前焚香沐浴更衣,过程中随时默念阿弥陀佛,收好手边容易伤人伤己的物品,保护好电脑。

参考资料

Hadoop是Apache基金会下的一个项目,项目地址:http://hadoop.apache.org/ 点左下角的Document 选择版本即可看到对应版本的文档

  • Hadoop 2.7.3版本文档在这里:http://hadoop.apache.org/docs/r2.7.3/
  • Hadoop 2.x 在windows下的编译的wiki地址:https://wiki.apache.org/hadoop/Hadoop2OnWindows
  • Hadoop源代码下有个BUILDING.txt的文档 里面有如何在windows下编译的描述

有了以上的资料,如果英文还不错的朋友可以点击右上角了。还想继续的朋友,Let’s go!

准备工作

( 可选)整理磁盘空间,整理出一个比较大的盘符,将来HDFS将在这个盘符下安家(本文以E盘为例)

安装visual stdio 2010 professional 版本编译器或者下载WINDOWS SDK 7.1 (免费哒)

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

或者(windows 8.1 SDK)

http://msdn.microsoft.com/en-us/windows/bg162891.aspx

 

注意:如果使用visaul stdio 构建Hadoop,不要选择express版本的,据文档说法不支持x64的编译。如果选择使用windows SDK 尽量选择7.1版本的SDK,否则可能会有版本问题,作者在最开始时尝试使用vs2015 communication的编译器,多次修改工程的版本之后最终放弃了,安装了vs2010试用版之后才成功

由于我的电脑是windows 10 多次测试windows sdk 后发现windows 10 已经不再包含编译工具了,Hadoop不支持使用visual stdio 2015版编译工具于是只能安装visual stdio 2010 旗舰版(试用装哈,用完了再卸载)

安装Java开发环境

jdk 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/index.html ,本文选择安装当前的最新版本jdk 8u112 64位版本,如果你的操作系统是32位的请选择x86版本下载

4

 

5

下载完之后安装,选好路径一路下一步即可(选两次路径,第一次是jdk过一会又弹出个窗口是选jre路径), 本文jdk 安装到的d:\dev_tools\java\jdk_8u112下 jre 安装到的d:\dev_tools\java\jre_8u112下

安装完成之后配置环境变量, 此电脑->右键->属性  左边选择高级系统设置 点击最下面的环境变量。环境变量有两个,本文描述修改下面那个系统变量。

1.配置JAVA_HOME ,选择下边的那个新建, 在弹出的框中 上面输入JAVA_HOME, 下面输入刚才jdk的安装路径。本文是 d:\dev_tools\java\jdk_8u112 。

2.配置JRE_HOME ,还是点下边的新建,弹出的框里上面 写JRE_HOME 下面写jre路径,本文为 d:\dev_tools\java\jre_8u112下 (后文简化描述此过程为添加xxx环境变量xxx)

3.添加CLASS_PATH环境变量 .;%JAVA_HOME%\lib\tools.jar; %JAVA_HOME%\lib\dt.jar   (注意前面的.;不能漏掉)

4.在系统环境变量中找到path变量,选中第一个,在右边点击新建,输入%JAVA_HOME%\bin  (如果是windows7版本,在path的value最前边添加 %JAVA_HOME%\bin;    注意不要漏掉最后的分号)

ok 测试一下java环境,打开cmd (一定是现在打开,环境变量修改后重启cmd才会生效)输入javac -version 看一下jdk的版本是不是javac 1.8.0_112

7

然后输入java -version 看看版本是不是1.8.0_112的

8

如果一样   jdk 环境部署完成

安装maven

maven的下载地址是http://maven.apache.org/download.cgi   选择bin版本的下载

9

下载下来解压出来,本文解压到的d:\dev_tools\apache-maven-3.3.9  (在这个目录下能看到bin,以后解压缩的说明类似,不再另行描述),然后编辑path系统环境变量,在path系统环境变量最后添加一条d:\dev_tools\apache-maven-3.3.9\bin(方法参考jdk配置path的方法) 确定。

ok 重新打开cmd 测试maven ,在cmd中输入 mvn  ,如果出现如下构建错误说明安装成功

10

更改maven源使用阿里云的源(未验证 资料来自http://www.oschina.net/question/106571_49365 )

修改maven根目录下的conf文件夹中的setting.xml文件,内容如下:

<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>

配置本地Tomcat下载路径

     由于hadoop在构建过程中会去下载一个很古老的tomcat版本 tomcat6.0.44 看样子apache已经阻止用户下载了,所以这个时候我们要利用迅雷,和nginx本地伪造一个下载路径。首先打开迅雷,新建个下载任务http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.44/apache-tomcat-6.0.44.tar.gz    利用迅雷下载好这个包先放着。

去 nginx官网下载一个最新windows版的nginx  我下载的地址是http://nginx.org/download/nginx-1.11.6.zip   下载完后解压到本地,例如d:\nginx  , 在安装目录下的html目录内依次创建如下目录,dist/tomcat/tomcat-6/v6.0.44/bin ,然后将刚才下载的tomcat拷贝到新建的目录最里层(注意tomcat从下载到移动不要修改名字),运行下边的nginx.exe   ,有个窗口一闪而过,不管他,如果有防火墙提示,允许即可。

使用管理员权限打开notepad++  然后打开用notepad++打开文件 c:\windows\system32\drivers\etc\hosts     在文件的末尾加一行:

127.0.0.1      archive.apache.org

(保存时有可能提示权限不足,是否使用administrator权限一路点yes,完了再保存一次即可) 打开浏览器输入以下测试地址,http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.44/bin/apache-tomcat-6.0.44.tar.gz  如果浏览器提示下载,那么 这就算成功了

安装CMake

cmake下载地址  https://cmake.org/download/    在页面上选择自己对应平台的包下载即可,本文选择Windows win64-x64 Installer 版本下载 ,安装时注意选择第三个页面上的 add CMake to the system PATH for all users 。 第四个页面选择安装路径, next之后点install。

ok 测试一下 重新打开cmd 输入cmake 如果出现cmake提示信息则说明ok了

12

安装Git

git负责在hadoop编译的过程中提供一些shell命令支持, git下载地址https://git-scm.com/download/win

根据自己的操作系统位数选择32-bit Git for Windows Setup 或者 64-bit Git for Windows Setup.  本文选择64位

下载完后安装,设置好路径后一路下一步即可 安装完成在path系统环境变量下增加一行 git的安装目录下的bin的路径,如d:\dev_tools\git\bin 。确定后简单验证一下, 重新打开cmd, 输入sh,如果有反应说明安装ok

下载zlib 1.2.8

zlib下载地址:http://zlib.net/zlib-1.2.8.tar.gz  。下载之后先解压出来,比如d:\dld\hadoop\zlib 然后需要先编译一下 ,点击开始  ->全部 -> microsoft visual stdio 2010   -> microsoft visual stdio x64 win64 命令提示。  ( 如果是32位系统选择 “visual stdio 命令提示(2010) “) 。

输入命令 编译zlib

cd d:\dld\hadoop\zlib

nmake /f win32\makefile.msc

nmake /f  win32\makefile.msc

ok  如果成功的话 如下图:

13

好了  关掉窗口

下载ProtocolBuffer 2.5.0

protocol buffer 下载地址在 https://github.com/google/protobuf/releases/download/v2.5.0/protoc-2.5.0-win32.zip
下载完成后解压缩出来,然后将解压后的目录添加到path中(就是包含解出来的exe的那个目录)

 

下载hadoop2.7.3 源代码

http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3-src.tar.gz

下载之后解压出来 如d:\hadoop   (目录尽可能短), 重新打开visual stdio 命令提示符 (参考以上zlib打开的方式)

cd  d:\hadoop

ok 准备工作就绪,不要关闭窗口,后面要用到

二 Hadoop构建过程

在之前打开的命令窗口中输入命令

如果要编译64位版本,输入
set Platform=x64
如果要编译32位版本,输入
set Platform=Win32
(注意大小写是区分的)

set ZLIB_HOME=D:\dld\hadoop\zlib       (注意替换为自己的zlib目录)

mvn package -Pdist,native-win -DskipTests -Dtar          (注意标点符号都是英文半角)

正常情况下界面上会有一堆的download, 好了  去吃个宵夜 ,休息一下,同时 在心中不断默念阿弥陀佛,正常情况下不出错需要2个小时以上,如果发现download卡死住不动,按住ctrl + c结束任务重新输入上面最后一条命令,如果命令行窗口关闭了重新打开 则上面三条命令都需要依次输入

14

由于网络不是那么流畅,两天之后终于成功

15

在hadoop源代码目录下 hadoop-dist\target 目录下生成了hadoop-2.7.3.tar.gz 文件  这个就是我们构建出来的二进制文件。

三 部署及运行第一个程序

将上述生成的文件解压出来,路径尽可能短。例如,我们解压到d:\hadoop下,这样我们的d:\hadoop下就有bin, etc, sbin等文件。

3.1 配置HDFS

编辑d:\hadoop\etc\hadoop\hadoop-env.cmd 文件 ,在文件最后加入以下配置:

set HADOOP_PREFIX=c:\deploy
set HADOOP_CONF_DIR=%HADOOP_PREFIX%\etc\hadoop
set YARN_CONF_DIR=%HADOOP_CONF_DIR%
set PATH=%PATH%;%HADOOP_PREFIX%\bin

编辑或者创建core-site.xml文件,确认有如下节点,没有就自己补齐(一般都是没有的,只有最外层的configuration节点, 那你就往里面补property节点就行了,后面都一样)

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://0.0.0.0:19000</value>
</property>
</configuration>

编辑或者创建hdfs-site.xml文件,确认如下节点的配置,没有就自己补齐

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

然后看一下slaves文件里面有没有 localhost 这一行,没有就补上

 

3.2 配置YARN

在 etc\hadoop 下编辑或创建配置文件mapred-site.xml,添加或补全以下节点,替换 %USERNAME% 为你的windows用户名

<configuration>

<property>
<name>mapreduce.job.user.name</name>
<value>%USERNAME%</value>
</property>

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

<property>
<name>yarn.apps.stagingDir</name>
<value>/user/%USERNAME%/staging</value>
</property>

<property>
<name>mapreduce.jobtracker.address</name>
<value>local</value>
</property>

</configuration>

最后,在 etc\hadoop 下编辑或创建配置文件 yarn-site.xml ,添加或补全以下节点

<configuration>
<property>
<name>yarn.server.resourcemanager.address</name>
<value>0.0.0.0:8020</value>
</property>

<property>
<name>yarn.server.resourcemanager.application.expiry.interval</name>
<value>60000</value>
</property>

<property>
<name>yarn.server.nodemanager.address</name>
<value>0.0.0.0:45454</value>
</property>

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>

<property>
<name>yarn.server.nodemanager.remote-app-log-dir</name>
<value>/app-logs</value>
</property>

<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/dep/logs/userlogs</value>
</property>

<property>
<name>yarn.server.mapreduce-appmanager.attempt-listener.bindAddress</name>
<value>0.0.0.0</value>
</property>

<property>
<name>yarn.server.mapreduce-appmanager.client-service.bindAddress</name>
<value>0.0.0.0</value>
</property>

<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>

<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>-1</value>
</property>

<property>
<name>yarn.application.classpath</name>
<value>%HADOOP_CONF_DIR%,%HADOOP_COMMON_HOME%/share/hadoop/common/*,%HADOOP_COMMON_HOME%/share/hadoop/common/lib/*,%HADOOP_HDFS_HOME%/share/hadoop/hdfs/*,%HADOOP_HDFS_HOME%/share/hadoop/hdfs/lib/*,%HADOOP_MAPRED_HOME%/share/hadoop/mapreduce/*,%HADOOP_MAPRED_HOME%/share/hadoop/mapreduce/lib/*,%HADOOP_YARN_HOME%/share/hadoop/yarn/*,%HADOOP_YARN_HOME%/share/hadoop/yarn/lib/*</value>
</property>
</configuration>

3.3 启动程序

1.点击开始->查找->cmd (不要 敲回车)   在显示出来的命令窗口图标上点击右键-> 以管理员身份运行

16

2.进入之前为hadoop准备的盘符,或者空间稍大的磁盘分区 例如输入:

d:

3.设置hadoop运行的相关环境变量

d:\hadoop\etc\hadoop\hadoop-env.cmd

4.格式化文件系统

%HADOOP_PREFIX%\bin\hdfs namenode -format

正常的话你会看到如下信息

17

5.启动HDFS

%HADOOP_PREFIX%\sbin\start-dfs.cmd

会弹出两个命令行窗口,一个namenode   一个datenode,如果两个窗口都没有error报错信息那就ok了,把弹出的两个窗口最小化, 我们测试一下hdfs, 我们在d:\下新建个文本文件 result.txt , 然后在命令行窗口输入:

%HADOOP_PREFIX%\bin\hdfs dfs -put d:\result.txt /
%HADOOP_PREFIX%\bin\hdfs dfs -ls /

如果能看到类似下图则说明hdfs正常

 

18

启动YARN,在命令行窗口输入:

%HADOOP_PREFIX%\sbin\start-yarn.cmd

又会弹出两个命令行窗口,大概看一眼,如果没有error的话就还是最小化,回到最开始的命令行中, 输入命令

%HADOOP_PREFIX%\bin\yarn jar %HADOOP_PREFIX%\share\hadoop\mapreduce\hadoop-mapreduce-examples-2.7.3.jar wordcount /result.txt /out

(hadoop-mapreduce-examples-2.7.3.jar 后面的2.7.3是跟随主版本号的,如果找不到这个文件可以去该目录下看看是不是版本号不对)

如果一切成功你会看到下图

19

 

恭喜恭喜,庆祝一下吧!

此条目发表在hadoop分类目录。将固定链接加入收藏夹。