一年过去了,戚老师搞了几台虚拟机来跑分布式。所以我又来搞环境了。上次部署的时候使用的是几台真机。但是由于现在使用的虚拟机,而且是高好了一台虚拟机后又复制了几份出来改了个ip
就直接启动了。
所以出现了一些奇怪的问题。
- 首先是执行
sudo
命令时,提示主机名未解析 - 然后是
tachyon
分布式运行时报空指针错,而且master:19999
是500
错误主机名未解析
这个问题很好解决,造成这个问题的原因是,复制虚拟机时它的/etc/hostname
里面的主机名与/etc/hosts
里面的127.0.0.1
对应的机器名不一致。解决办法就是改其中一个使之相同。然后重启即可。
tachyon报错
首先启动tachyon
后,可以jps
可以看到TachyonMaster
和TachyonWorker
。但是打开页面master:19999
时报错500
且抛出空指针异常。
运行runTests
时也报空指针的错误。
经过查看logs
发现当slave
结点启动自己的机器名开的端口而不是写在conf/slaves
里面的别名。
解释一下上面的话:
假设slave
结点的/etc/hosts
如下:1
2
3
4
5127.0.0.1 localhost
127.0.0.1 mypc2
192.168.1.101 master
192.168.1.102 slave
而/etc/hostname
里面写的内容是:1
mypc2
当Worker
结点启动一个本地服务时,是以hostname
里面的名字进行启动的如下:
2017-01-15 22:05:48,280 INFO WORKER_LOGGER (WorkerStorage.java:
) - Current Worker Info: ID 1484489000001, ADDRESS: mypc2/127.0.0.1:29998, MemoryCapacityBytes: 1073741824
其中启动的服务为:mypc2/127.0.0.1:29998
当Master
结点需要给这个Worker
结点发送消息时会定位不到这个地址,所以才造成空指针的异常。(我猜的)
所以解决办法,就是将hosts
里面的mypc2
注释掉,重新在每个结点的hosts
里面增加:1
2
3
4
5
6
7
8127.0.0.1 localhost
#127.0.0.1 mypc2
192.168.1.101 master
192.168.1.102 slave
192.168.1.101 mypc
192.168.1.102 mypc2
这样做了之后,不需要重启,就发现已经可以完美运行了。
个人猜想还有一种解决办法就是把hostname
里面的内容改成我们的已经在hosts
里面设置好的别名。例如这台机器就将mypc2
改为slave
,然后重启机器。但是没有进行测试。