1、TcpPeerServer的数据接收缓冲区大小
Hadoop-2.7.0的DataXceiverServer中,在DataNode中对其初始化时,会构造一个TcpPeerServer,并设置数据接收缓冲区大小如下:
tcpPeerServer.setReceiveBufferSize(HdfsConstants.DEFAULT_DATA_SOCKET_SIZE); 这个HdfsConstants.DEFAULT_DATA_SOCKET_SIZE是个常量,大小为128KB,如下: // TODO should be conf injected?
public static final int DEFAULT_DATA_SOCKET_SIZE = 128 * 1024; 这个TcpPeerServer的数据接收缓冲区大小固定为128KB,是否经过大量测试?是否符合大多数集群?是否有必要做成参数?2、DataXceiverServer线程监听读写事件内存繁忙时等待时间大小
DataXceiverServer线程在监听读写事件时,如果发生OutOfMemoryError错误,说明集群读写繁忙,内存紧张,此时DataXceiverServer线程会等待30s,然后继续run中的循环,监听读写事件,如下:
} catch (OutOfMemoryError ie) {
IOUtils.cleanup(null, peer);
// DataNode can run out of memory if there is too many transfers.
// Log the event, Sleep for 30 seconds, other transfers may complete by
// then.
LOG.error("DataNode is out of memory. Will retry in 30 seconds.", ie);
try {
Thread.sleep(30 * 1000);
} catch (InterruptedException e) {
// ignore
} 这个30s是否合理?是否应该做成参数。TODO:
有时间时专门测试下,看看是否有优化可能。
本文探讨了Hadoop-2.7.0中DataXceiverServer的配置细节,包括TcpPeerServer的数据接收缓冲区大小固定为128KB的原因及合理性,以及DataXceiverServer线程在内存紧张时等待30秒的机制是否恰当。
3273

被折叠的 条评论
为什么被折叠?



