NameNode瞬时高并发导致短暂不可用,Hadoop2.7二次开发

版本hadoop 2.7

分段锁优化

Namenode的FSNamesystem类中主要有三块。
1、INodeMap中存着目录树的映射关系:Id -> INode
2、BlocksMap中存着块和块位置信息的映射信息。Block -> BlockInfo
采用全局读写锁
// lock to protect the directory and BlockMap
private final ReentrantReadWriteLock dirLock;
3、DataNode Manager : 用于对DataNode进行管理。
hadoop3.0 实现锁优化,采用分段锁,首先,锁的范围减小了,避免了全局锁限制。其次,每个锁之间的操作都是独立的,各个锁区间的操作,可以并行进行。
RangeMap: keyRange -> GSet
RangeSet: key -> INode

EditDoubleBuffer瞬时高并发导致短暂不可用,优化

背景

巡查nn日志发现大量的waite操作,追溯源码发现了EditDoubleBuffer的内存交换机制

EditDoubleBuffer

1、思路就是扩大默认的size,带来的问题就是断电导致数据丢失,也是一种的权衡
EditLogBackupOutputStream.java
static final int DEFAULT_BUFFER_SIZE = 256
QuorumOutputStream.java
private int outputBufferCapacity = 512 * 1024;
2、添加自定义key
DFSConfigKeys.java //hdfs-site.xml读取,配置指定值
public static final String DFS_NAMENODE_BUFFER_KEY = "dfs.namenode.quorum.buffer.value";
public static final int DFS_NAMENODE_QUROUM_BUFFER_VALUE_DEFALUT = 512 * 1024;
public static final String DFS_NAMENODE_BUFFER_KEY = "dfs.namenode.local.buffer.value";
public static final int DFS_NAMENODE_LOCAL_BUFFER_VALUE_DEFALUT = 256;
3、直接进行.class替换
hadoop-hdfs-2.7.3.2.6.5.0-292.jar

你可能感兴趣的:(NameNode瞬时高并发导致短暂不可用,Hadoop2.7二次开发)