Hadoop 2.0及以后的版本可以直接在windows上跑, 不用cygwin了, 凡是讲cygwin的攻略都可以忽略.
关于环境变量: 我实验下来要加的唯一一个环境变量是系统变量里的Path, 往里加上Hadoop的bin目录的路径.
关于winutils: 除了Hadoop安装包和JDK外,还要下载的一个第三方工具是名为winutils的一套类库, 下载地址:
https://github.com/steveloughran/winutils
注意比如你hadoop下载的是2.8版本, 那么这个类库你也要用2.8的. 下载完了把里面所有的dll等文件都覆盖到hadoop目录的bin子目录下去.
关于hadoop的配置: 在hadoop目录下的etc/hadoop下找到大量配置文件, 文件后缀名为sh的是linux环境用的, cmd的就是windows的脚本,先要配置hadcoop-env.cmd: 这个文件唯一要配置的地方是:
set JAVA_HOME=C:\Java\jdk1.8.0_121
尤其要注意的一点是如果你的Java装在Program Files这样带空格的文件夹下的话, 一定要把这个文件夹命名为不带空格的名字, 或者用 "C:\PROGRA~1" 来表示 "C:\Program Files", 否则会报错, 这是一个坑.
4个xml文件的配置:
C:\hadoop\etc\hadoop\core-site.xml (该文件里面都是一些通用配置)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
fs.defaultFS/fs.default.name in core-site.xml is to allow dfs commands without providing full site name in the command. Running hdfs dfs -ls / instead of hdfs dfs -ls hdfs://hdfs/ (缺省根目录名)
在真正的生产环境中建议加一个property: hadoop.tmp.dir, 参考:http://blog.csdn.net/bluetropic/article/details/9493995
C:\hadoop\etc\hadoop\hdfs-site.xml(该文件是一些与hdfs有关的配置项, 这里别忘了预先建立好datanode和namenode两个目录, 本例中他们在hadoop所在盘符下的hadoop/data/dfs/目录下)
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/hadoop/data/dfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/hadoop/data/dfs/datanode</value>
</property>
</configuration>
C:\hadoop\etc\hadoop\mapred-site.xml(mapred-site.xml.template去掉template后缀名而来)
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
C:\hadoop\etc\hadoop\yarn-site.xml
<configuration>
<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>
</configuration>
这里可能会发生端口占用的问题, 比如之前一次运行的hadoop没有退出还占着端口, 可以用netstat 找到占用端口的进程, kill掉, 或者干脆重启电脑.
运行hadoop:
cd X:/hadoop-2.8.0/bin
hadoop namenode -format #一定先要格式化hdfs!!!!!
cd X:/hadoop-2.8.0/sbin
start-dfs.cmd #先启动dfs
start-yarn.cmd #再启动yarn
start-all.cmd #等于上面两条命令的组合
stop-dfs.cmd
stop-yarn.cmd
如果报/tmp下某些文件没有权限, 可以以管理员身份来运行cmd, 去运行上面的脚本.
此外成功运行后可以到两个URL去看Hadoop运行状态:
http://localhost:8088/
http://localhost:50070/