最近一直在做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 作为本机的回路测试地址,我机器上有这么一行