【问题标题】:Restarted namenode suffer from block report storm重启的namenode遭受块报告风暴
【发布时间】:2015-11-21 22:38:07
【问题描述】:

当我们基于hadoop v2.4.1的备用namenode从故障中重新启动时,我们发现namenode离开安全模式后太忙而无法及时响应。我们倒了好几堆,都是这样的,

线程 212(8020 上的 IPC 服务器处理程序 148): 状态:等待 阻止数:66 等待人数:598 等待 java.util.concurrent.locks.ReentrantLock$FairSync@60ea5634 堆: sun.misc.Unsafe.park(本机方法) java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834) java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:867) java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1197) java.util.concurrent.locks.ReentrantLock$FairSync.lock(ReentrantLock.java:229) java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:290) org.apache.hadoop.hdfs.server.namenode.FSNamesystem.writeLock(FSNamesystem.java:1378) org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.processReport(BlockManager.java:1676) org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.blockReport(NameNodeRpcServer.java:1019) org.apache.hadoop.hdfs.protocolPB.DatanodeProtocolServerSideTranslatorPB.blockReport(DatanodeProtocolServerSideTranslatorPB.java:152) org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos$DatanodeProtocolService$2.callBlockingMethod(DatanodeProtocolProtos.java:28061) org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:585) org.apache.hadoop.ipc.RPC$Server.call(RPC.java:928) org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2013) org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2009) java.security.AccessController.doPrivileged(本机方法) javax.security.auth.Subject.doAs(Subject.java:415) org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1556) org.apache.hadoop.ipc.Server$Handler.run(Server.java:2007)

几乎所有服务器处理程序都在等待 FSNameSystem#writeLock 处理增量/完整报告!

会议:

dfs.blockreport.initialDelay:120。
dfs.blockreport.intervalMsec:6h。
服务器处理程序数量:200。 em>
datanodes 数量:400。
namenode 需要 0.5~1s 来处理块报告。

datanodes的日志看到很多offerService IOExceptions和retries。

NN 日志表明一个数据节点的存储已经被处理了两次以上,有的甚至高达 10 次。

blockLog.info("BLOCK* processReport: from storage " + storage.getStorageID() + " node " + nodeID + ", blocks: " + newReport.getNumberOfBlocks() + ", processing time: " + (endTime - startTime) + " msecs");

有没有人遇到过同样的问题,有什么想法吗?

【问题讨论】:

  • 你有多少个数据节点?
  • 感谢您的回复,我们有 400 个数据节点。
  • 我认为问题与conf dfs.blockreport.initialDelay有关。
  • 您的问题显然是修改块图的争用。随机化不同数据节点上的初始延迟可能会有所帮助,但肯定仍需要很长时间才能使名称节点退出安全模式。还可以尝试使用 RDP 超时。

标签: java multithreading hadoop rpc


【解决方案1】:

最后我们根据服务器的特性减少了服务器的IPC处理程序的数量,解决了这个问题。希望这能帮助那些陷入同样困境的人!

【讨论】:

    猜你喜欢
    • 2017-07-30
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2015-01-22
    • 1970-01-01
    相关资源
    最近更新 更多