Windows7上构建并安装Hadoop 2.7.3

构建Hadoop Windows版本

不要尝试从Cygwin中运行安装。Cygwin既不是必须的也不被支持的。

选择Java版本并设置JAVA_HOME

Hadoop开发者已经测试了Oracle JDK 1.7和1.6,并且已知可以正常工作的版本。

确保设置了JAVA_HOME,并且不包含任何空字符。

获取Hadoop源代码

下载Hadoop 2.7.3源代码。下载地址:http://hadoop.apache.org/releases.html

安装依赖并配置构建环境

请阅读我的另外一篇博文:Windows7搭建Hadoop-2.7.3源码阅读环境问题解决列表。我环境及依赖列表如下:

  • Windows 7
  • java version 1.7.0_80
  • Apache Maven 3.2.3
  • ProtocolBuffer 2.5.0
  • cmake version 3.7.2 win64 x64
  • Windows SDK 7.1

构建并拷贝打包文件

在源代码根目录下运行下面的命令构建二进制发布代码。

1
mvn package -Pdist,native-win -DskipTests -Dtar

注意这个命令像BUILDING.txt文档中要求的必须从Windows SDK command prompt窗口运行。成功构建后会在hadoop-dist\target\目录下生成一个hadoop.tar.gz二进制包。

Hadoop版本号会出现在包文件名中。构建不同的版本则报名也会不一样。

安装

选择一个安装的目标目录。用c:\deploy作为示例。解压tar.gz文件(hadoop-2.7.3.tar.gz)到c:\deploy下。这将生成一个如下结构的目录。如果安装一个多节点的集群,那么在每台节点上重复该步骤。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C:\deploy>dir
Volume in drive C has no label.
Volume Serial Number is 9D1F-7BAC

Directory of C:\deploy

01/18/2014 08:11 AM <DIR> .
01/18/2014 08:11 AM <DIR> ..
01/18/2014 08:28 AM <DIR> bin
01/18/2014 08:28 AM <DIR> etc
01/18/2014 08:28 AM <DIR> include
01/18/2014 08:28 AM <DIR> libexec
01/18/2014 08:28 AM <DIR> sbin
01/18/2014 08:28 AM <DIR> share
0 File(s) 0 bytes

启动一个单节点(伪分布式)集群

HDFS配置示例

在可以启动Hadoop守护进程之前,需要编辑几个配置文件。配置文件模板可以在c:\deploy\etc\hadoop下找到,假设你的安装目录是c:\deploy

首先编辑文件hadoop-env.cmd,在文件末尾添加下面的内容:

1
2
3
4
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,并确保文件有下面的配置:

1
2
3
4
5
6
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://0.0.0.0:19000</value>
</property>
</configuration>

编辑或创建文件hdfs-site.xml,并添加下面的配置:

1
2
3
4
5
6
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

最后,编辑或创建文件slaves,并确保有下面的配置:

1
localhost

按照默认配置HDFS元数据及数据文件放在当前磁盘的\tmp目录下。在上面的示例中这个目录是c:\tmp。作为第一次测试安装可以保留默认配置。

YARN配置示例

编辑或创建%HADOOP_PREFIX%\etc\hadoop下的文件mapred-site.xml,并添加下面的配置,用你的Windows用户名替换%USERNAME%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<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>

最后,编辑或创建文件yarn-site.xml,并添加下面的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<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>

初始化环境变量

运行c:\deploy\etc\hadoop\hadoop-env.cmd设置启动脚本及守护进程使用的环境变量。

格式化文件系统

用下面的命令格式化文件系统:

1
%HADOOP_PREFIX%\bin\hdfs namenode -format

这个命令将打印文件系统的参数。查找下面的两个字符串确保格式化名称执行成功。

1
2
14/01/18 08:36:23 INFO namenode.FSImage: Saving image file \tmp\hadoop-username\dfs\name\current\fsimage.ckpt_0000000000000000000 using no compression
14/01/18 08:36:23 INFO namenode.FSImage: Image file \tmp\hadoop-username\dfs\name\current\fsimage.ckpt_0000000000000000000 of size 200 bytes saved in 0 seconds.

启动HDFS守护进程

运行下面的命令在本机启动NameNode和DataNode。

1
%HADOOP_PREFIX%\sbin\start-dfs.cmd

为了验证HDFS守护进程已经运行,试着拷贝一个文件到HDFS。

1
2
3
4
5
6
7
C:\deploy>%HADOOP_PREFIX%\bin\hdfs dfs -put myfile.txt /

C:\deploy>%HADOOP_PREFIX%\bin\hdfs dfs -ls /
Found 1 items
drwxr-xr-x - username supergroup 4640 2014-01-18 08:40 /myfile.txt

C:\deploy>

启动YARN守护进程并运行一个YARN任务

最后,启动YARN守护进程。

1
%HADOOP_PREFIX%\sbin\start-yarn.cmd

集群应该已经启动并运行了。为了验证,我们可以在刚拷贝到HDFS上的文件上运行一个wordcount的示例任务。

1
%HADOOP_PREFIX%\bin\yarn jar %HADOOP_PREFIX%\share\hadoop\mapreduce\hadoop-mapreduce-examples-2.5.0.jar wordcount /myfile.txt /out

远程调试

现在可以在自己的个人电脑上跟踪Hadoop源代码,并远程调试本机上的Hadoop。具体做法阅读我的另外一篇博文:调试Hadoop源代码