hadoop namenode rpc explode

一 背景

目前线上在高峰期时间存在namenode 的rpc queue 存在大量堆积的请求。

二 解决方案

业界通用的解决方式有三种

2.1 异步client提交

社区没有官方实现,头条实现了自己的私有化版本,没有公开

2.2 区分 不同节点之间的通信队列

区分

  •  ClientRpcServer 
  •  ServiceRpcServer
  •  LifelineRpcServer

目前该功能已经上线,但是效果不是很明显。

2.3 采用公平队列

具了解滴滴和美团是使用了这种方式

在namenode内部的server实现中,消息的处理过程是:

FIFO call queue

公平队列的实现方式是:

qos_fair_call_queue

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 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>