针对tachyon分布式启动后无法runTests的某种原因分析

一年过去了,戚老师搞了几台虚拟机来跑分布式。所以我又来搞环境了。上次部署的时候使用的是几台真机。但是由于现在使用的虚拟机,而且是高好了一台虚拟机后又复制了几份出来改了个ip就直接启动了。
所以出现了一些奇怪的问题。

  • 首先是执行sudo命令时,提示主机名未解析
  • 然后是tachyon分布式运行时报空指针错,而且master:19999500错误

    主机名未解析

    这个问题很好解决,造成这个问题的原因是,复制虚拟机时它的/etc/hostname里面的主机名与/etc/hosts里面的127.0.0.1对应的机器名不一致。解决办法就是改其中一个使之相同。然后重启即可。

tachyon报错

首先启动tachyon后,可以jps可以看到TachyonMasterTachyonWorker。但是打开页面master:19999时报错500且抛出空指针异常。

运行runTests时也报空指针的错误。

经过查看logs发现当slave结点启动自己的机器名开的端口而不是写在conf/slaves里面的别名。

解释一下上面的话:

假设slave结点的/etc/hosts如下:

1
2
3
4
5
127.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
8
127.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,然后重启机器。但是没有进行测试。