HDFS RPC响应调优:FairCallQueue调优

参考材料:

Apache Hadoop 3.4.0 -- Fair Call Queue Guide

一、案例

在 core-site.xml 配置文件中添加如下配置项:

XML 复制代码
<property>
     <name>ipc.8020.callqueue.impl</name>
     <value>org.apache.hadoop.ipc.FairCallQueue</value>
</property>
<property>
     <name>ipc.8020.scheduler.impl</name>
     <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>
     <value>32,1</value>
</property>
<property>
     <name>ipc.8020.decay-scheduler.thresholds</name>
     <value>90</value>
</property>
<property>
     <name>ipc.8020.backoff.enable</name>
     <value>true</value>
</property>

配置详解:

callqueue.impl: 默认配置为java.util.concurrent.LinkedBlockingQueue(FIFO queue),可配置项为org.apache.hadoop.ipc.FairCallQueue(公平队列),是按分配优先级权重放置请求到队列中。与FairCallQueue一起使用的RpcScheduler的实现是DecayRpcScheduler,它维护为每个用户接收的请求计数。这个计数随着时间的推移而衰减;每个扫描周期(默认为5s),每个用户的请求数乘以衰减因子(默认为0.5)。这维护了每个用户请求计数的加权/滚动平均值。每次执行扫描时,所有已知用户的调用计数将从高到低排序。根据用户发起呼叫的比例,为每个用户分配优先级(默认0 ~ 3,0为最高优先级)。默认的优先级阈值为(0.125、0.25、0.5),即呼叫占总呼叫数50%以上(最多只能有一个)的用户优先级最低,占总呼叫数25% ~ 50%的用户优先级第二低,占总呼叫数12.5% ~ 25%的用户优先级第二高,其他用户优先级最高。在扫描结束时,每个已知用户都有一个缓存优先级,该优先级将一直使用到下一次扫描;在扫描之间出现的新用户的优先级将被即时计算。

复制代码
scheduler.impl:默认 org.apache.hadoop.ipc.DefaultRpcScheduler (no-op scheduler) 。如果callqueue.impl配置了FairCallQueue,该参数默认为 org.apache.hadoop.ipc.DecayRpcScheduler。
复制代码
scheduler.priority.levels:配置优先级等级,默认4个优先级级别。每个优先级可以配置权重。
复制代码
faircallqueue.multiplexer.weights:为每个优先级队列配置权重,是一个以逗号分隔的列表形式。在FairCallQueue中,有多个优先级队列,每个优先级队列都指定一个权重。当请求到达调用队列时,根据(由RpcScheduler)分配给调用的当前优先级,将请求放入这些优先级队列之一。当处理程序线程试图从调用队列中获取一个项目时,它从哪个队列中提取是通过RpcMultiplexer决定的;目前,这是硬编码为WeightedRoundRobinMultiplexer。WRRM根据队列的权重为请求提供服务;默认4个优先级级别的默认权重为(8,4,2,1)。因此,WRRM将从最高优先级队列提供8个请求,从第二高队列提供4个请求,从第三高队列提供2个请求,从最低队列提供1个请求,然后从最高优先级队列提供8个请求,以此类推。
复制代码
decay-scheduler.thresholds:每个优先级队列的客户端负载阈值,以整数百分比表示。客户机产生的负载(占总操作的百分比)低于位置i所指定的负载,将被赋予优先级i。这应该是一个长度等于优先级级别数减去1的逗号分隔列表(最后一个隐式为100)。

backoff.enable:一种可配置的回退机制,默认false。在这种机制中,服务器将向客户端抛出异常,而不是处理它;在再次尝试之前,客户端需要等待一段时间(例如,通过指数回退)。通常,当队列已满时,试图将请求放入(FCQ的)优先级队列时,会触发回退。这有助于进一步推迟有影响的客户机,减少负载,并且可以带来实质性的好处。还有一个根据响应时间后退的特性,如果高优先级的请求得到的服务太慢,它将导致较低优先级的请求后退。例如,如果将优先级1的响应时间阈值设置为10秒,但该队列中的平均响应时间为12秒,则优先级级别为2或更低的传入请求将接收回退异常,而优先级级别为0和1的请求将正常进行。这样做的目的是,当整体系统负载重到足以导致高优先级客户端受到影响时,迫使较重的客户端退出。

以上参数仅供参考,更多详细参数请见官方文档:Apache Hadoop 3.4.0 -- Fair Call Queue Guide

相关推荐
江-小北8 分钟前
Java基础面试题09:Java异常处理完成以后,Exception对象会发生什么变化?
java·开发语言
kirito学长-Java10 分钟前
springboot/ssm餐厅点餐管理系统Java在线点餐美食论坛系统web美食源码
java·spring boot·美食
weixin_3849155311 分钟前
IDEA Maven 打包找不到程序包错误或找不到符号,报错“程序包不存在“
java·maven·intellij-idea
l1384942745120 分钟前
项目介绍和游戏搭建(拼图小游戏)
java·开发语言·算法·游戏
NonDay21 分钟前
wxWidgets-ImageView
android·java·javascript
ID_14 HuFei23 分钟前
Tomcat
java·tomcat
Qspace丨轻空间1 小时前
楼顶气膜馆:引领科技感与声学完美结合的未来会议空间—轻空间
大数据·人工智能·生活·娱乐
数据库安全1 小时前
美创科技获选“金智奖”年度创新解决方案,为工业企业数据安全治理提供思路
大数据·网络·人工智能
wmd131643067121 小时前
IDEA Mac快捷键(自查询使用)
java·macos·intellij-idea
尘世壹俗人1 小时前
spark3.x之后时间格式数据偶发报错org.apache.spark.SparkUpgradeException
大数据·分布式·spark