cygwin下hadoop搭建

今天尝试了一下cygwin下的hadoop搭建,网上有很多文档(建议参考:http://space.itpub.net/?uid-26812308-action-viewspace-itemid-748143),但是实际尝试时依然踩了很多坑,标记一下备忘:

1. Hadoop版本选择。虽然现在Hadoop已经发布到1.0以上版本,但是如果希望在cygwin下部署伪分布式的map reduce,建议采用0.20.2,因为更高版本存在两个重要bug:
https://issues.apache.org/jira/browse/HADOOP-7682
https://issues.apache.org/jira/browse/HADOOP-8274

这两个bug到1.0.4版本为止没有fix,这两个bug主要是因为cygwin对windows路径映射以及符号链接作了比较trick的处理,但java api并未考虑这些特性(虽然网上有一些号称能修复bug的hadoop-core的jar包,但其实只是修复了bug7682,能让hdfs可以正常使用,但是会造成map reduce程序出错)。如果非要在官方修复这两个问题前尝试新版本的hadoop,建议参考:
http://en.wikisource.org/wiki/User:Fkorning/Code/Hadoop-on-Cygwin#root_Group

2. sshd的安装,windows7以上的系统一定要选择使用新的privilege user,建议使用sshd缺省提供的cyg_server作用户名,不要使用LocalSystem中现有的用户名称,因为sshd需要为运行sshd的服务指定几项特殊权限,可以用下面的命令比较一下:
editrights -l -u 用户名

3. 如果需要重新安装sshd服务,可以用
sc delete sshd
或者
cygrunsrv -R sshd

但是注意:如果运行命令时windows打开了services.msc或者其他服务查看界面,应该先关闭窗口,重新打开后才可以看见服务被删除,否则服务只是被标记删除。

4. 使用ssh-host-config重新配置安装好服务,使用下面命令可以启动服务(或者在控制界面中启动):
net start sshd
或者:
cygrunsrv -S sshd

5. 如果启动服务失败,提示:cygrunsrv: Error starting a service: StartService:  Win32 error 1069
建议尝试下面几种解决方法:
  a. 执行 mkpasswd > /etc/passwd 以及 mkgroup > /etc/group,更新cygwin的用户与组权限表。
  b. 如果上面的方法不能奏效,使用passwd重新设置cyg_server(假定没修过Privilege User名称)密码。
  c. 如果仍然不行,可以删除/var/empty目录,重新执行ssh-host-config,纠正/var/empty目录权限。

6. 如果想hadoop以伪分布式启动,需要为本机ssh客户端配置信任关系,方法参考网上文档。

7. 启动hdfs前记得先格式化namenode:
hadoop namenode -format

8. 如果dfs.name.dir与dfs.data.dir分别位于两个不同的tmp目录下(这是由于namenode是在cygwin下用$USER启动的,而datanode是hadoop通过ssh,使用cyg_server启动),可以通过conf/hadoop.env中配置:
export HADOOP_IDENT_STRING=当前cygwin登录用户名

另外,虽然我们为hadoop配置的目录是/tmp/hadoop-用户名,但是在cygwin下,有些数据会被写入到cygwin安装盘(假定cygwin安装在C:\cygwin下)所在的根目录的tmp目录下,这也是cygwin与java对posix路径名处理不一致导致,由于有些数据写在C:\cygwin\tmp下,有些写在了C:\tmp下(这些数据本来应该写在一起),会导致hdfs启动失败,为了解决这个问题,建议通过windows的cmd模式在cygwin的安装盘下建立一个ntfs的符号链接,如:
mklink -D C:\tmp C:\cygwin\tmp
 上面的命令会让C:下的tmp指向cygwin目录下的tmp目录,这样无论写哪个目录都最终写到同一个位置(其实ntfs已经很完美地支持符号连接与硬连接了,不知道cygwin为什么不用操作系统本身的功能,非要采用自定义的lnk文件,导致了bug8274)。

9. eclipse运行wordcount提示找不到chmod的解决方案:在系统PATH环境变量中添加C:\cygwin\bin,然后重启eclipse。

你可能感兴趣的:(cygwin下hadoop搭建)