NameNode RPC FairCallQueue 请求响应策略:
Namenode负责协调HDFS内部的操作,接收Client请求。
RPC任务调度策略
FIFO队列(默认):使用先进先出队列来执行RPC请求,先到先服务,
缺点:针对频次很高的请求占用更多的服务,导致其他用户服务延迟。
FairCallQueue:公平队列
DecayRpcScheduler:维护用户请求数,扫描周期为5s(默认),每次扫描将用户请求数排序,分配优先级(0,1,2,3)0为高优先级,默认优先级阈值(0.125,0.25,0.5),呼叫占50%以上用户在3,25%-50%在2,12.5%-25%在1,其他在0。
WeightedRoundRobinMultiplexer:当响应请求时,根据队列权重处理请求,默认(8,4,2,1),0优先级处理8个,1优先级队列处理4个以此类推,轮询处理。
退避机制(可配):
当请求放入响应优先级队列时,队列满了,触发退避,服务器抛出异常,一段时间后才能重试。
响应时间退避:高优先级队列处理时间太慢,1队列相应阈值10S,平均处理时间12S,则2优先级队列收到退避异常,高优先级正常处理。
服务用户,进行设置,始终进入高优先级响应队列。
实例: 参数均以ipc.<port>开头
<property>
<name>ipc.8020.callqueue.impl</name> -- 使用org.apache.hadoop.ipc.FairCallQueue公平调用队列。
<value>org.apache.hadoop.ipc.FairCallQueue</value>
</property>
<property>
<name>ipc.8020.callqueue.capacity.weights</name> --子队列之间的容量分配权重
<value>7,3</value>
</property>
<property>
<name>ipc.8020.scheduler.impl</name> -- 使用org.apache.hadoop.ipc.DecayRpcScheduler
<value>org.apache.hadoop.ipc.DecayRpcScheduler</value>
</property>
<property>
<name>ipc.8020.scheduler.priority.levels</name> -- 两个优先级队列
<value>2</value>
</property>
<property>
<name>ipc.8020.faircallqueue.multiplexer.weights</name> -- 高优先级99个请求,低优先级1个请求,以此类推
<value>99,1</value>
</property>
<property>
<name>ipc.8020.decay-scheduler.thresholds</name> --阈值大于90%进入低优先级队列
<value>90</value>
</property>