问题背景

  春节假期间,接连收到监控程序发出的数据异常问题,赶忙连接上跳板机检查各服务间的状态,发现Datanode在第二台、第三台从节点都掉线了,通过查看Datanode和Namenode运行日志,发现了问题所在,记录下这次惊心的处理过程,供参考。

问题描述

  Namonode主节点运行时报出内存溢出的问题,截取运行日志如下:

  

java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.lang.Long.valueOf(Long.java:577)
at org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos$StorageBlockReportProto.<init>(DatanodeProtocolProtos.java:17327)
at org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos$StorageBlockReportProto.<init>(DatanodeProtocolProtos.java:17250)
at org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos$StorageBlockReportProto$1.parsePartialFrom(DatanodeProtocolProtos.java:17381)
at org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos$StorageBlockReportProto$1.parsePartialFrom(DatanodeProtocolProtos.java:17376)
at com.google.protobuf.CodedInputStream.readMessage(CodedInputStream.java:309)

  Datanode数据节点运行时报出Socket连接主节点Namenode超时异常,

  

INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Got finalize command for block pool BP-029006-xxx
WARN org.apache.hadoop.hdfs.server.datanode.DataNode: IOException in offerService
java.net.SocketTimeoutException: Call From xxx/xxx to xxx:xxx failed on socket timeout exception: java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel[connected local=/xxx:xxx remote=xxx/xxx]; For more details see: http://wiki.apache.org/hadoop/SocketTimeout
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:792)
at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:751)
at org.apache.hadoop.ipc.Client.call(Client.java:1480)
at org.apache.hadoop.ipc.Client.call(Client.java:1407)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:229)
at com.sun.proxy.$Proxy13.sendHeartbeat(Unknown Source)
at org.apache.hadoop.hdfs.protocolPB.DatanodeProtocolClientSideTranslatorPB.sendHeartbeat(DatanodeProtocolClientSideTranslatorPB.java:153)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.sendHeartBeat(BPServiceActor.java:553)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.offerService(BPServiceActor.java:653)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:823)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel[connected local=/xxx:xxx remote=xxx/xxx]

解决方案

修改Hadoop集群服务中各服务组件的内存配置,更新hadoop-env.sh文件

  其中hadoop-env.sh文件所在位置:

$HADOOP_HOME/etc/hadoop/hadoop-env.sh

  Hadoop为各个守护进程(namenode、secondaryNamenode、jobtracker、datanode、tasktracker)统一分配的内存在hadoop-env.sh中设置,参数为HADOOP_HEAPSIZE,默认大小为1000MB。

  大部分情况下,这个统一设置的值可能并不适合。例如对于NameNode节点,1000M的内存只能存储几百万个文件的数据块的引用。如果我想单独设置NameNode的内存,可以通HADOOP_NAMENODE_OPTS来设置。同样的,可以通过HADOOP_SECONDARYNAMENODE_OPTS来设置SecondaryNamenode的内存,使得它与NameNode保持一致。当然,还有HADOOP_DATANODE_OPTS、HADOOP_BALANCER_OPTS、HADOOP_JOBTRACKER_OPTS变量供你使用。

  针对上面提到的问题,我们需要提高NameNode和SecondaryNamenode的内存,即修改HADOOP_NAMENODE_OPTS参数,添加配置 -Xmx2048m ,可设置为2048MB,供参考。同样通过设置HADOOP_SECONDARYNAMENODE_OPTS参数来提高SecondaryNamenode的使用内存,添加参数配置, -Xmx2048m ,也可以设置为2048MB,供参考。根据实际的数据量来调整,数据量越大可适当调高,另需注意服务器的实际内存大小。

  

# Command specific options appended to HADOOP_OPTS when specified
export HADOOP_NAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} -Xmx2048m $HADOOP_NAMENODE_OPTS"
export HADOOP_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS -Xmx2048m $HADOOP_DATANODE_OPTS" export HADOOP_SECONDARYNAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} -Xmx2048m $HADOOP_SECONDARYNAMENODE_OPTS"

Hadoop-env.sh Update

NameNode内存溢出和DataNode请求超时异常处理的更多相关文章

  1. nodejs内存溢出 FATAL ERROR: CALL_AND_RETRY_0 Allocation failed – process out of memory

    spa项目整体迁移转为ssr后,改动之后部署一切还好,就是突然有一天访问人数太多,node进程很容易就挂了自动重启. 最后经过压力测试,考虑到是堆内存溢出的问题,就报错误:FATAL ERROR: C ...

  2. 用http请求thrift服务端出现了内存溢出的情况

    记一次内存溢出的分析经历 - Janti - 博客园 https://www.cnblogs.com/superfj/p/8474288.html 说在前面的话 朋友,你经历过部署好的服务突然内存溢出 ...

  3. 精讲响应式WebClient第5篇-请求超时设置与异常处理

    本文是精讲响应式WebClient第5篇,前篇的blog访问地址如下: 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方 ...

  4. java.lang.OutOfMemoryError: PermGen space异常处理(内存溢出)

    楼主刚接触到这个问题,问度娘,直接查到的都是让 在tomcat>bin>catalina.sh文件的“echo "Using CATALINA_BASE: $CATALINA_B ...

  5. Hadoop:HDFS NameNode内存全景

    原文转自:https://tech.meituan.com/namenode.html 感谢原作者 一.概述 从整个HDFS系统架构上看,NameNode是其中最重要.最复杂也是最容易出现问题的地方, ...

  6. HDFS NameNode内存全景

    一.概述 从整个HDFS系统架构上看,NameNode是其中最重要.最复杂也是最容易出现问题的地方,而且一旦NameNode出现故障,整个Hadoop集群就将处于不可服务的状态,同时随着数据规模和集群 ...

  7. Tomcat中JVM内存溢出及合理配置及maxThreads如何配置(转)

    来源:http://www.tot.name/html/20150530/20150530102930.htm Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚 ...

  8. JVM基础知识(1)-JVM内存区域与内存溢出

    JVM基础知识(1)-JVM内存区域与内存溢出 0. 目录 什么是JVM 运行时数据区域 HotSpot虚拟机对象探秘 OutOfMemoryError异常 1. 什么是JVM 1.1. 什么是JVM ...

  9. JVM自动内存管理-Java内存区域与内存溢出异常

    摘要: JVM内存的划分,导致内存溢出异常的可能区域. 1. JVM运行时内存区域 JVM在执行Java程序的过程中会把它所管理的内存划分为以下几个区域: 1.1 程序计数器 程序计数器是一块较小的内 ...

随机推荐

  1. 阿里八八Alpha阶段Scrum(1/12)

    任务分配 叶文滔:整体框架UI设计.作为组长进行任务协调 俞鋆:后端服务器及数据库搭建 王国超:日程模块多日显示部分设计 黄梅玲:日程模块单日显示部分设计 林炜鸿:日程模块文本添加部分设计 张岳.刘晓 ...

  2. 第二次项目冲刺(Beta版本)2017/12/6

    一.任务明细 二.燃尽图 三.站立式会议 1.照片(随后上传) 2.会议任务安排 四.总结 第一天冲刺,准备工作不足啊,期末了,最近大家都比较忙吧,开始战斗吧.

  3. saltstack二次开发(一)

    Saltstack简介 Salt是一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的包被安装,指定的服务在运行),一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则 ...

  4. opencv中的bitwise_not,bitwise_xor,bitwise_or,bitwise_and的使用方法与效果。

    1.将二指图片的效果反转既黑色变白色,白色变黑色. 使用 bitwise_not(InputArray src, OutputArray dst, InputArray mask = noArray( ...

  5. OpenCV——漫水填充

  6. 数据库基本的的sql语句

    数据库数据类型: 1.定义一个学生课程模式: create schma<模式名>authorization <用户名> create schema authorization ...

  7. js基础知识入门总结

    1.第一个js程序 一个项目包括三部分:前端(html.css.js).数据库.后端技术 引入方式:页面中直接写,script标签引入 js事件绑定: <input type="but ...

  8. P2176 [USACO14FEB]路障Roadblock

    题目描述 每天早晨,FJ从家中穿过农场走到牛棚.农场由 N 块农田组成,农田通过 M 条双向道路连接,每条路有一定长度.FJ 的房子在 1 号田,牛棚在 N 号田.没有两块田被多条道路连接,以适当的路 ...

  9. jqgrid 配置分页大小及下拉项

    如何配置分页大小的下拉项?显示效果如下: 通过 rowNum 来设置默认分页大小 通过 rowList 来设置分页下拉.   rowList 的值为一个数组,比如:[10,20,30] $(" ...

  10. mysql中left join中的on条件 和 where条件区别

    需要知道sql中关键字的执行顺序. FROM-> ON->JOIN-> WHERE->GROUP BY-> HAVING->SELECT-> DISTINCT ...