标签:blog spark集群 ack 查询 运行 建立 net span netstat
本文主要阐述大数据平台环境zookeeper常见异常和解决方案
我们现在项目有个任务OneMinuteDataSync是用spark将实时数据同步插入到hbase中,程序已经稳定运行很长一段时间,不过最近数据量增加比较多,任务运行一段时间后,突然僵死几个小时后,有恢复正常继续运行,如下图,任务正常运行情况下耗时15s左右,但2017-07-11 04:33:00这个批次运行了9486s,而凌晨数据量很少的,才13w左右,白天峰值稳定在45w左右。
查看该任务的运行的worker节点的日志,发现zoookeeper connection reset by peer异常日志
首先查询zookeeper日志,只发现了Too many connectionn 警告
由于刚开始的时候zookeeper zoo.cfg没有配置maxClientCnxns参数,而zookeeper默认配置为60,即单个客户端与单台服务器之间的连接数的限制,而我们前几天才升级hbase和zookeeper集群,已经将
maxClientCnxns=300
而对于单台服务器来说,300个连接我们认为已经足够使用。我们在30.27.96.14上查看2181端口的连接情况
netstat -anp | grep 2181 netstat -anp | grep 2181 | wc
发现实际上状态为ESTABLISHED的连接只有不到10个,而状态为TIME_WAIT的连接有几百个,而TIME_WAIT状态实际上是客户端建立连接,完成任务后正常断开连接后的状态,其他状态解释如下:
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉
更加详细的内容要去阅读TCP协议。而我们现在要解决的是连接正常关闭后,尽快减少TIME_WAIT状态的连接,最后我们通过修改Linux内核参数来减少服务器的TIME_WAIT套接字数量,步骤如下:
#1.切换到root用户 su root #2.更改sysctl.conf配置,增加如下两行配置 vi /etc/sysctl.conf net.ipv4.tcp_tw_reuse=1 ##表示开启重用。允许将TIME_WAIT套接字重新用于新的TCP连接。默认为0,表示关闭。 net.ipv4.tcp_tw_recycle=1 ##表示开启TCP连接中TIME_WAIT套接字的快速回收。默认为0,表示关闭 #3.让配置立即生效 /sbin/sysctl -p
更改spark集群服务器配置后,目前程序运行正常,后续继续观察。
标签:blog spark集群 ack 查询 运行 建立 net span netstat
原文地址:http://www.cnblogs.com/molyeo/p/7154697.html