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:
有时间时专门测试下,看看是否有优化可能。