安装hadoop集群遇到的坑(vSphere虚拟化环境)
(文章不定期更新)
1 环境概述
服务器:LENOVO ThinkServer RD540
虚拟化环境:Esxi5.5
虚拟机系统:Ubuntu 16.04LTS
虚拟机配置:
节点 | 处理器 | 内存 | 硬盘 |
---|---|---|---|
master | 全部 | 8G | 200G |
slave10 | 全部 | 8G | 200G |
slave20 | 全部 | 4G | 130G |
slave30 | 全部 | 4G | 130G |
slave40 | 全部 | 4G | 130G |
以上由于slave1-4的名称在局域网中已经被占用,则名后加0
2 坑
2.1 Esxi时断时连
装好Esxi后,在vSphere界面初步安装环境,却发现时断时连。如下图:
在连接过程中时不时会抛出异常。
而且在传输大文件必定
无法成功:
查看Esxi的hostd日志,有:
2018-05-11T02:30:00.023Z [FFE215B0 verbose ‘Statssvc.vim.PerformanceManager’] HostCtl Exception in stats collection. Turn on ‘trivia’ log for details
2018-05-11T02:30:02.219Z [FFE84B70 verbose ‘SoapAdapter’] Responded to service state request
2018-05-11T02:30:20.023Z [FFE215B0 verbose ‘Statssvc.vim.PerformanceManager’] HostCtl Exception in stats collection: Sysinfo error on operation returned status : Not initialized. Please see the VMkernel log for detailed error information
这个Exception指示去Kernel日志中获取详细信息。再查看Esxi的kernel日志:
/var/log # cat vmkernel.log | grep fail
2018-05-10T12:14:09.089Z cpu4:33645)ScsiDeviceIO: 2337: Cmd(0x412e803d1ac0) 0x85, CmdSN 0xa from world 34572 to dev “naa.600605b007e0a4201dfcf3440b1aeec1” failed H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x20 0x0.
2018-05-10T12:14:09.089Z cpu4:33645)ScsiDeviceIO: 2337: Cmd(0x412e803d1ac0) 0x4d, CmdSN 0xb from world 34572 to dev “naa.600605b007e0a4201dfcf3440b1aeec1” failed H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x20 0x0.
2018-05-10T12:14:09.089Z cpu4:33645)ScsiDeviceIO: 2337: Cmd(0x412e803d1ac0) 0x1a, CmdSN 0xc from world 34572 to dev “naa.600605b007e0a4201dfcf3440b1aeec1” failed H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x24 0x0.
2018-05-10T12:14:09.099Z cpu4:33645)ScsiDeviceIO: 2337: Cmd(0x412e803d1ac0) 0x85, CmdSN 0xd from world 34572 to dev “naa.50000395a802efd4” failed H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x20 0x0.
2018-05-10T12:44:09.180Z cpu2:32848)ScsiDeviceIO: 2337: Cmd(0x412e82722980) 0x85, CmdSN 0x14 from world 34572 to dev “naa.600605b007e0a4201dfcf3440b1aeec1” failed H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x20 0x0.
其中的数字是SCSI感知代码:
http://pubs.vmware.com/vsphere-50/index.jsp?topic=%2Fcom.vmware.vsphere.troubleshooting.doc_50%2FGUID-E8304C8B-E2EA-459E-A545-8531C1BF12B0.html
看样子好像是硬盘的问题。
官方也给出了详细的排查方案【ESX/ESXi 主机出现间歇性网络连接或无网络连接 (2077745)】
https://kb.vmware.com/s/article/2077745
有中文,不过排查方案略微繁杂,这里不推荐
。
这边的方案是:直接在服务器上抹掉
Esxi,安装Ubuntu
系统,发现ssh一样时断时连,且xftp传输大文件必定失败,失败瞬间ping不通,过一段时间又可以ping通:
由此确定是网口问题
解决方案:拔掉两根网线,其中一根插到备用网卡的网口,问题解决。
2.2 hadoop集群可正常启动,但无法感知Slave节点
按照:
1. https://blog.csdn.net/dream_an/article/details/52946840
2. https://www.cnblogs.com/caiyisen/p/7373512.html
两位同行的技术博客搭建起hadoop。
启动虚拟集群。
master节点:
无明显问题
查看下Slave节点:
无明显问题
尝试在hdfs文件系统中建立用户目录没有问题,上传文件抛java异常:
There are 0 Datanode(s) running…
发现不对,查看Slave节点相关日志:
子节点虽然有DataNode的子进程,但一直在尝试重连:
Problem connecting to the server master:…/9000
在主节点浏览器输入hdfs://master:9000可以看到页面,但在子节点浏览器无法看到页面。猜测是9000端口只允许本机访问, 并不允许其他机器访问。
参考https://blog.csdn.net/yjc_1111/article/details/53817750这篇文章
在主节点运行
cat /etc/hosts
发现定义了两个master的ip地址:
127.0.0.1 master
外网ip master
将127.0.0.1端口去掉即可访问,也即本机解析本机的地址,除了localhost, 其他位置都不用本机回环口,而是用本机配置的ip。
否则,节点将无法访问master:9000
在上述文章当中,可访问某个端口的ip范围没有弄清楚,不知道如何看。
2.3 yarn 出现FINISHED的State与FAILED的FinalStatus
出现这种情况的原因有很多。
2018年5月初,笔者开始安装了2.8.3的hadoop。发现yarn出现未知情况的FAILED:
Diagnose没有任何显示,事件类型显示TA_CONTAINER_COMPLETED。
已于stackoverflow公开了问题,没有回复:
https://stackoverflow.com/questions/50364279/mapreduce-job-to-yarn-got-finished-state-and-failed-finalstatus
尔后根据相关资料,据说是2.8.3版本问题,具体是内存或者其他资源分配不足造成:
重装hadoop,替换版本为2.6.3
开启yarn,运行后仍然出现Failed,查看日志,发现:
诊断原因已经显示了,为Container killed by the AppcationMaster。Exit code 是143。
Google相关问题结果:
https://stackoverflow.com/questions/15281307/the-reduce-fails-due-to-task-attempt-failed-to-report-status-for-600-seconds-ki
没有按照第一项描述修改超时时间,而是按照第二项修改了mapred.child.java.opts
为-Xmx2048
尔后出现VMEM不够的问题:
遇到这种问题首先考虑调节分配比例:
https://blog.csdn.net/lively1982/article/details/50598847
yarn.nodemanager.vmem-pmem-ratio
改为6
调节完毕之后,又出现了FAILED问题:
查看日志:
诊断没有结果,但Attempt变成了FAIL_CONTAINER_CLEANUP
以该关键词查询相关信息:
https://stackoverflow.com/questions/42416921/hadoop-mapreduce-teragen-fail-container-cleanup
stackoverflow明确有结果:干掉本机环回口。
注释掉master和slave的localhost一行后,问题解决。