一 背景
目前线上在高峰期时间存在namenode 的rpc queue 存在大量堆积的请求。
二 解决方案
业界通用的解决方式有三种
2.1 异步client提交
社区没有官方实现,头条实现了自己的私有化版本,没有公开
2.2 区分 不同节点之间的通信队列
区分
- ClientRpcServer
- ServiceRpcServer
- LifelineRpcServer
目前该功能已经上线,但是效果不是很明显。
2.3 采用公平队列
具了解滴滴和美团是使用了这种方式
在namenode内部的server实现中,消息的处理过程是:
公平队列的实现方式是:
2.4调整的配置
说明 | 配置项 | 默认 | 调整 |
---|---|---|---|
队列名称 | ipc.9000.callqueue.impl | LinkedBlockingQueue | org.apache.hadoop.ipc.FairCallQueue |
队列优先级 | ipc.9000.scheduler.priority.levels | 4 | 基于提交用户来区分,目前就hive,hdfs两个用户,所以不需要调整该参数,客户端用户数越多的情况,效果越明显 |
调度类 | ipc.9000.scheduler.impl | DefaultRpcScheduler | DecayRpcScheduler,主要设为FairCallQueue,该配置自动会调整 |
2.5 关闭日志
关闭审计日志,或者打开审计日志的异步化
dfs.namenode.audit.log.async=true
三 参考资料
https://www.ebayinc.com/stories/blogs/tech/quality-of-service-in-hadoop/
https://issues.apache.org/jira/browse/HADOOP-9640
四 hadoop相关的类
- org.apache.hadoop.ipc.CallQueueManager
- org.apache.hadoop.ipc.DecayRpcScheduler
- org.apache.hadoop.ipc.Server
0 条评论。