1. namenode 被重新格式化,datanode数据版本与namenode不一致
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /home/hadoop/tmp/dfs/data: namenode namespaceID = 39895076; datanode namespaceID = 1030326122
- 删除datanode所有文件
- 修改datanode dfs/data/current/VERSION与namenode相同
2. 常规数据交换量过大,导致通信故障datanode无法连接namenode 任务数据交换量过大,导致tasktracker与jobtracker通信故障
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(192.168.2.19:50010, storageID=DS-1082898260-202.106.199.39-50010-1348575582644, infoPort=50075, ipcPort=50020):DataXceiveServer: Exiting due to:java.lang.OutOfMemoryError: Java heap space
(注:上面这个ERROR并不一定全会发生,有时会出现无ERROR出现datanode就关闭的情况)
ERROR org.apache.hadoop.mapred.TaskTracker: Caught exception: java.io.IOException: Call to hadoopmaster/192.168.1.43:9001 failed on local exception: java.io.IOException: Connection reset by peer
- 增大带宽
- 配置机架感知脚本topology.script.file.name
- 关闭均衡器
3. 磁盘损坏
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: org.apache.hadoop.util.DiskChecker$DiskError
Exception: Invalid value for volsFailed : 3 , Volumes tolerated : 0
关机换硬盘,2台以内服务器损坏无需关心数据丢失,hadoop存储策略以服务器为单位,不以硬盘为单位,或者把磁盘的容忍数调大
4. 主机名转换错误,datanode无法启动
INFO org.apache.hadoop.hdfs.server.datanode.DataNode: dnRegistration = DatanodeRegistration(bt-199-039.bta.net.cn:50010, storageID=, infoPort=50075, ipcPort=50020)
设置hostname和/etc/sysconfig/network,然后重启datanode
5. 之前用错误账户启动hadoop,dfs存储所使用的本地文件夹被变更用户和组,导致文件夹不可写。datanode无法启动
INFO org.apache.hadoop.hdfs.server.datanode.DataNode: writeBlock blk_-8336485569098955809_2093928 received exception java.io.IOException: Permission denied
切换高权限用户,将dfs存储的本地文件夹chown -R成hadoop本身用户和组,重启datanode
6. 启动hbase的regionserver的时候报 No space left on device df -h 磁盘空间都很充足 df -i 发现是根目录下文件数太多
for i in ./*; do echo $i; find $i| wc -l; done
查询出哪些目录下的文件数比较多,进行删除(当时判断是hdfs下文件数太多,删除,恢复)
7. hadoop查看目录OOM
hadoop fs -ls /apps/cal/normal/output/201602
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Arrays.copyOfRange(Arrays.java:2694)
at java.lang.String.<init>(String.java:203)
at java.lang.String.substring(String.java:1877)
at org.apache.hadoop.fs.Path.getName(Path.java:339)
at org.apache.hadoop.fs.shell.PathData.getS
通过分析日志java.lang.OutOfMemoryError: GC overhead limit exceeded应该是返回列表太大导致jvm内存暴掉。
A) 通过which hadoop查看执行的文件:
[root@jfcal08 conf]# which hadoop
/usr/bin/hadoop
B) 通过vi /usr/bin/hadoop查看执行的文件,查看执行命令时都会去调用/etc/hadoop/conf/hadoop-env.sh文件;
C) 修改vi /etc/hadoop/conf/hadoop-env.sh
//The maximum amount of heap to use, in MB. Default is 1000.
//export HADOOP_HEAPSIZE=“1024”
export HADOOP_HEAPSIZE=“8192”
D) 问题解决。
E) 经过修改HADOOP_HEAPSIZE大小,多次验证,1.5G大小,可以显示55W文件。因此建议一个目录下最好不要超过30W文件数。否则客户端口默认显示有问题。
问题总结
本案例主要是由于文件数量太大,导致java堆栈暴掉,通过扩大堆栈大小可以解决问题,但是建议在设备存放一个目录下的文件要进行限制,可以细化多个目录存放。单个目录下最好不要超过30W文件数。
8. 双Active NameNode (fecing)
异常的Job在短时间内创建和删除大量文件,引起NN节点频繁更新内存的数据结构从而导致RPC的处理时间变长,CallQueue里面的RpcCall堆积,甚至严重的情况下打满CallQueue,导致NameNode响应变慢,甚至无响应,ZKFC的HealthMonitor监控自己的NN异常时,则会断开与ZooKeeper的链接,从而释放锁,另外一个NN上的ZKFC进行抢锁进行Standby到Active状态的切换。这是一般引起的切换的流程
一次namenode挂 触发主备切换 查看挂掉的namenode日志
WARN org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager: Remote journal 134.130.131.136:8485 failed to write txns 683242228-683242228. Will try to write to this JN again after the next log roll.
org.apache.hadoop.ipc.RemoteException(java.io.IOException): IPC's epoch 64 is less than the last promised epoch 65
FATAL org.apache.hadoop.hdfs.server.namenode.FSEditLog: Error: flush failed for required journal (JournalAndStream(mgr=QJM to [134.130.131.134:8485, 134.130.131.135:8485, 134.130.131.136:8485], stream=QuorumOutputStream starting at txid 683242228))
org.apache.hadoop.hdfs.qjournal.client.QuorumException: Got too many exceptions to achieve quorum size 2/3. 3 exceptions thrown:
134.130.131.136:8485: IPC's epoch 64 is less than the last promised epoch 65
【问题现象】Active NameNode日志出现异常,C’s epoch [X] is less than the last promised epoch [X+1],出现短期的双Active
【HDFS机制】该问题属于hdfs对于脑裂的异常保护,属于正常行为,不影响业务。
1)ZKFC1对NameNode1(Active)进行健康检查,因为长时间监控不到NN1的回复,认为该NameNode1不健康,主动释放zk中的ActiveStandbyElectorLock,此时NN1还是active(因为zkfc与NameNode1连接异常,不能将其shutdown)。
2)ZKFC2在zk中竞争到ActiveStandbyElectorLock,将NameNode2(原来的Standby)变成Active,同时会更新JN中的epoch使其+1。
3)NameNode1(原先的Active)再次去操作JournalNode的editlog时发现自己的epoch比JN的epoch小1,促使自己重启,成为Standby NameNode。
NN1 log:
【解决办法】
可以在core-site.xml文件中修改ha.health-monitor.rpc-timeout.ms参数值,来扩大zkfc监控检查超时时间。
ha.health-monitor.rpc-timeout.ms
180000
namenode 一台进入安全模式(active) 然后又自动恢复(当时在删除hdfs的回收站的数据)
9. kerberos问题
备机备份数据时
root@jfbh2n03 krb5kdc]# /usr/sbin/kprop -f /var/kerberos/krb5kdc/slave_datatrans ‘jfbh2n04.dcs.com’
/usr/sbin/kprop: Server rejected authentication (during sendauth exchange) while authenticating to server
Generic remote error: Key table entry not found
解决方法:更新所有keytab
/etc/krb5.keytab 试试登录 不行就重建
10. kerberos票据过期问题
1.修改krb5.conf为90d
2.修改kdc.conf为500d
3.modprinc -maxlife 90days krbtgt/DCS.COM@DCS.COM
4.modprinc -maxlife 90days 目标princ
5.重启krb5kdc
6.重新kinit klist
11. guava本地缓存局限性
无法支持分布式
重启服务缓存丢失