最近一直在做hadoop的应用,但是无奈于并行加速比一直不理想,两台机器运行的时间和一台机器运行的时间差不多,老师还一直要这个数据,并行计算比至少应该为1.5,这样的并行程序才有意义。
加了个qq群,发现了问题所在,再说我解决方法之前,先说一下我hadoop集群的配置:
2台笔记本,其中1台为lenovo z460,CPU为Core i3,主机名为:liujiacai-Ideapad-Z460;另一台是Acer Aspire 4743 CPU为奔腾P6200,主机名为:liujiacai-Aspire-4743。
系统都装的是ubuntu13.04。
我直接用网线把两台机器连起来,手动指定IP,其中Lenovo的机器的ip为 202.194.124.24,Acer的机器ip为202.194.124.75,子网掩码都是255.255.255.128,网关202.194.124.126(其实这个网关应该不起作用,因为我不连外网)。
我先按照全分布式配置方式搭建好环境,然后开始运行hadoop程序,问题就是并行加速度差不多为1,后来在QQ群问了一个,发现是我在配置conf/slave文件时只指定了一个ip(这里为202.194.124.75,202.194.124.24配在了conf/master文件里面了),然后我忽略了一个问题:只有机器上运行datanode进程才能运行job,namenode根本不会作为mapper和reduer来运行job(其实都是最基本的概念,我都没注意)。
现在我把202.194.124.24也加入到conf/slave文件中,这样hadoop集群中就可以真正运行了,但是运行到一半reduce停止不允许了,打开http://localhost:50030,发现又报错了,看了日志是liujiacai-Aspire-4743主机名找不到,后来上网查,发现需要把集群中所有集群中的主机名与ip配置到hosts文件中。
每台机器必须都配置,然后一些博客上还说把127.0.0.1 localhost 注释掉,说要不然会报错的,我没去掉也没遇到那个错误,这个就不管了,有可能是版本的问题吧。改为hosts文件后运行程序还是报错,是什么127.0.1.1的问题,又google了一下,说是ubuntu把的127.0.1.1 作为本机的回路测试地址,我机器上有这么一行
127.0.1.1 liujiacai-Ideapad-Z460
运行到一半就报错了,说是202.194.124.75连接不上了,我很郁闷 ,然后在202.194.124.24上ping 202.194.124.75,竟然ping不通了,在开启hadoop程序是还是ping通的,把网线拔一下再插上就又能ping通了,而且机器中两个datanode也都能运行job了,我还怀疑是网线口松了吧,但是看看电脑网线口也还有灯亮,换了一根网线还是出现相同的问题,我都让整吐了,现在就是守在电脑旁边看它运行,发现运行慢了就把网线拔下来再插上~~~~~~~~~~~~~
功夫不负苦心人,这样得到的加速比是1.8了,但是这网线问题到底是什么问题我还不清楚,估计不是什么网络不好这么一类回答就能搪塞过去的,这点记下了回来探讨吧。
PS:在配置ssh免密码登陆时,有时安装一般方式操作后还是不能行,还是需要密码,我也按照网上说的把文件的权限改成什么700、600之类的,但是都是不起作用,不知道神马情况~~~~~(我当时出现这种情况用的是ubuntu12.10)
还好在ubuntu13.04中没出现这种情况,ssh免登陆正常,再次感谢无私奉献的ubuntu团队。