一年过去了,戚老师搞了几台虚拟机来跑分布式。所以我又来搞环境了。上次部署的时候使用的是几台真机。但是由于现在使用的虚拟机,而且是高好了一台虚拟机后又复制了几份出来改了个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,然后重启机器。但是没有进行测试。