hadoop配置 - Datanode GC优化一则
来源:互联网 发布:矩阵A2怎么算 编辑:程序博客网 时间:2024/05/24 01:53
故障描述:
前一阵发现Jobtracker服务器宕机,追查宕机前系统负载情况,发现很多线程被阻塞,大多上面一些cron job对hdfs目录请求响应时间较长导致的,进一步追查后发现有若干datanode被exclude掉,报错信息如下:
datanode报错
ERROR1ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(x.x.x.x:50010, storageID=DS-1437963415-x.x.x.x-50010-1331795684559, infoPort=50075, ipcPort=50020):DataXceiverjava.net.ConnectException: Connection refusedERROR2ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(x.x.x.x:50010, storageID=DS-1437963415-x.x.x.x-50010-1331795684559, infoPort=50075, ipcPort=50020):DataXceiverjava.io.IOException: Connection reset by peerERROR3ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(x.x.x.x:50010, storageID=DS-534013790-x.x.x.x-50010-1331795710872, infoPort=50075, ipcPort=50020):DataXceiverjava.io.IOException: Interrupted receiveBlockERROR4ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(x.x.x.x:50010, storageID=DS-346899942-x.x.x.x-50010-1331795684322, infoPort=50075, ipcPort=50020):DataXceiverjava.io.EOFException: while trying to read 65557 bytesat org.apache.hadoop.hdfs.server.datanode.BlockReceiver.readToBuf(BlockReceiver.java:290)at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.readNextPacket(BlockReceiver.java:334)at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:398)at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:577)at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:480)at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:171)
仔细排查所有ERROR,发现在datanode exclude后,之前部署的metric统计脚本发现,部分datanode内存耗尽,推测datanode节点存在内存瓶颈。
java.lang.OutOfMemoryError: Java heap space
2012-09-12 04:37:38,311 ERROR org.mortbay.log: Error for /metrics
之前线上hadoop集群遇到过几次大量由于Datanode内存溢出,被强制下线后,导致线上集群不稳定的情况,故针对如上内存问题进行JVM GC的优化:
1.原FGC影响时间较长:
优化前:
S0 S1 E O P YGC YGCT FGC FGCT GCT0.00 96.36 60.06 89.27 87.69 1926 387.419 93 589.308 976.7280.00 96.36 60.07 89.27 87.69 1926 387.419 93 589.308 976.7280.00 96.36 60.07 89.27 87.69 1926 387.419 93 589.308 976.7280.00 96.36 60.18 89.27 87.69 1926 387.419 93 589.308 976.7280.00 96.36 60.18 89.27 87.69 1926 387.419 93 589.308 976.728优化后:41.12 0.00 2.57 79.72 59.78 302 209.850 146 49.716 259.56641.12 0.00 3.88 79.72 59.78 302 209.850 146 49.716 259.56641.12 0.00 4.18 79.72 59.78 302 209.850 146 49.716 259.56641.12 0.00 4.39 79.72 59.78 302 209.850 146 49.716 259.56641.12 0.00 4.72 79.72 59.78 302 209.850 146 49.716 259.566平均影响时间从6.33ms降至0.34ms
2.原Old Generation占用内存量巨大,可能产生内存溢出危险:
优化前PS Old Generationcapacity = 2863333376 (2730.6875MB)used = 2556763896 (2438.3200607299805MB)free = 306569480 (292.36743927001953MB)89.29326628294085% used优化后:PS Old Generationcapacity = 3221225472 (3072.0MB)used = 2118978904 (2020.8157577514648MB)free = 1102246568 (1051.1842422485352MB)65.78176294763882% used占用比例从 89%->65%
之后再不存在Datanode由于GC缓慢导致RPC超时引发的一连串问题。
总结:
优化最重要花最长时间的是定位问题,所以帮助快速定位问题的工具很重要,ganglia及datanode、jobtracker 日志都给了我很大帮助,本次主要优化思路是在保证GC影响时间较短情况下,让Old Generation提早进行FGC,来保证有足够内存容量应对突发内存请求,详细参数如下:
export HADOOP_DATANODE_OPTS=”-server -XX:+UseConcMarkSweepGC -XX:SurvivorRatio=3 -XX:MaxTenuringThreshold=20 -XX:CMSInitiatingOccupancyFraction=80 -XX:+ExplicitGCInvokesConcurrent -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime ${HADOOP_DATANODE_OPTS}”
- hadoop配置 - Datanode GC优化一则
- hadoop大集群优化配置,datanode节点数量为100
- Hadoop配置datanode
- Hadoop配置datanode无法连接到master
- hadoop配置完成后datanode没有启动
- Hadoop配置单节点,DataNode没有启动
- 关于配置伪分布hadoop无法启动datanode的解决
- hadoop集群配置datanode无法启动的原因
- hadoop dfs.datanode.du.reserved 预留空间配置方法
- hadoop 配置HA 重新格式化后 datanode 起不来
- hadoop配置新节点后,出现 org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible n
- Hadoop 参数配置优化
- Hadoop 参数配置优化
- hadoop参数配置优化
- hadoop参数配置优化
- Hadoop 2 配置优化
- Hadoop 参数配置优化
- hadoop配置优化
- Scala: 偏函数(PartialFunction) && 偏应用函数(Partial Applied Function)
- PL/SQL 下 Command window 与 SQL window 的区别
- 方法传递参数的方式
- uva 534
- 查看本机端口
- hadoop配置 - Datanode GC优化一则
- C++.Homework.Classes and Objects.03
- 汇编与80386的分段管理机制
- 在字符串中找匹配
- C#各种Timer类的区别与使用
- 生产者和消费者(Java)
- hibernate的优缺点
- nginx 规则
- Cocos2d-x 屏幕适配新解