构建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:\deployset HADOOP_CONF_DIR=%HADOOP_PREFIX%\etc\hadoopset 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,并确保有下面的配置:
按照默认配置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源代码 。