实体机:
OS : Win7
Eclipse : eclipse-java-mars-2-win32
内存 : 4G
虚拟机:
VirtualBox_5.0.10.4061_104061_Win.1448355141
ubuntu-14.04.4-desktop-i386.iso (内存:1G, 硬盘:20G)
hadoop : 2.7.2
感谢:
给力量的安装教程 http://www.powerxing.com/install-hadoop/
1. 虚拟机上网
实体机是通过域账户上网,需要在虚拟机 Ubuntu 架设网络代理。
Ubuntu 是通过 NAT 方式和实体机联系,baidu 后找到 ntlmap 做代理,怎么试都不行;后来找到 cntlm 做代理就行了。
建议网络代理设置不好的,可以试试 cntlm。这个和公司的代理服务器设置有关吧。
在 Firefox 中可以测试代理服务器是否能够域账户验证通过。
我是在 Firefox 能够上网后,通过 Ubuntu 网站下载 hadoop, ntlmap, cntlm 等程序安装。
2. 共享目录
按照介绍,可以配置好虚拟机和实体机的共享,但是开机就直接挂载好这个功能没有能够成功,无论是加在 profile, 还是 ~/.bashrc ,都不行。和磁盘分区的挂载有些不同。最后只好在桌面做了个脚本。
3. NameNode 在程序运行后就 down .
我是在一台机器上安装的伪分布 hadoop, 在本地运行程序后,一切都正常。放到 hadoop 分布环境后,运行到中间 map/reduce 步骤就报错误, output 也没有输出,hdfs 进入了 safeMode, console 的提示信息里要求释放资源。并且查看 jps, nameNode 消失了。
最后就加大虚拟机的内存,放大到 virsualBox 允许的大小,大概 1.8G .这样就好了。
4. Eclipse Hadoop Plugin
从网上下的 plugin ,我试验是不行的,按照教程在window端编译, hadoop 编译了两版 2.6.0 和 2.7.2 ,编译都成功了。使用的是 2.6.0 版,但是运行的hadoop是 2.7.2 版,没有问题啊,运气很好,也许以后会遇到问题? ;-)
配置后 eclipse 的 hadoop plugin, 创建 wordCount 工程,到运行时报告错误。
仔细的观察了这个错误的详细信息,看到user=Administrator, access=WRITE。这里的user其实是我当前系统(运行客户端的计算机的操作系统)的用户名,实际期望这里的user=Hadoop(hadoop是我的HADOOP上面的用户名)。
好不容易找到这篇文章:http://www.linuxidc.com/Linux/2014-08/105335p2.htm
解决方案:在系统的环境变量或java JVM变量里面添加HADOOP_USER_NAME,这个值具体等于多少看自己的情况,以后会运行HADOOP上的Linux的用户名。(修改完重启eclipse,不然可能不生效)。
5. 程序运行错误:Exception in thread "main"java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.nativeio.NativeIO$Windows.
http://www.bkjia.com/ASPjc/931209.html
a) 在Hadoop2的bin目录下没有winutils.exe
b) C:\Windows\System32下缺少hadoop.dll,把这个文件拷贝到C:\Windows\System32下面即可。
c) hadoop-2.6.0-src\hadoop-common-project\hadoop-common\src\main\java\org\apache\hadoop\io\nativeio下NativeIO.java 复制到对应的Eclipse的project,然后修改557行为return true.
6. 虚拟机网络设置为桥接模式
按照教程设置,DHCP获取动态IP 方式不行,我这边必须设置成静态IP . 也可能和 DHCP 的策略有关吧。