目录
-
- 问题1:reduce预处理阶段shuffle时获取已完成的map的输出失败次数超过上限
- 问题2:Too many fetch-failures
- 问题3:处理MR速度特别的慢
- 问题4:能够启动datanode,但无法访问,也无法结束
- 问题5:节点断联
- 问题6:JVM内存不够
- 问题7:Hadoop添加节点的方法
- 问题8:给单个node新加硬盘
- 问题9:IO写操作出现问题
- 问题10:HDFS退服节点的方法
- 问题11:IO异常
- 问题12:status of 255 error
- 问题13:sort by value
- 问题14:restart 单个datanode
- 问题15:Namenode in safe mode
- 问题16:java.net.NoRouteToHostException: No route to host
- 问题17:更改namenode后,在hive中运行select 依旧指向之前的namenode地址
- 问题18:磁盘写满了
- 问题19:Hadoop的命名空间ID发生错误
- 问题20:map和reduce的相对路径问题
- 问题21: ERROR metadata
- 问题22:Exception in createBlockOutputStream java.io.IOException
- 问题23: 某次正常运行mapreduce实例时,抛出错误
- 问题24:运行一段时间后hadoop不能stop-all.sh的问题,显示报错
- 问题25:Incompatible namespaceIDs
- 问题26: Storage directory not exist
- 问题27:bin/hadoop jps后报如下异常:
- 问题28:taskTracker和jobTracker 启动失败
- 问题29:NotReplicatedYetException
- 问题30:hadoop出现文件块丢失(missingblocks)处理方法
- 问题31、用命令显示所有的datanode的健康状况
- 问题32:如何快速杀死一个job
- 问题33、Hdfs回收站(防误删)
- 问题34: Hadoop HDFS如何实现负载均衡
- 问题34:HDFS只有一个操作实例
- 问题35:datanode连接不上namenode,导致datanode无法启动。
- 问题36:从本地往hdfs文件系统上传文件,出现错误
- 问题36:以本地模式运行hadoop时,抛异常
- 问题37:格式化hdfs文件系统时,出错
- 问题38:datanode启动不了,并且报HDFS使用空间超过90%
问题1:reduce预处理阶段shuffle时获取已完成的map的输出失败次数超过上限
问题描述:
Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out
问题剖析:
这是reduce预处理阶段shuffle时获取已完成的map的输出失败次数超过上限造成的,上限默认为5。引起此问题的方式可能会有很多种,比如网络连接不正常,连接超时,带宽较差以及端口阻塞等。。。通常框架内网络情况较好是不会出现此错误的。
另一种说法:程序里面需要打开多个文件,进行分析,系统一般默认数量是1024,(用ulimit -a可以看到)对于正常使用是够了,但是对于程序来讲,就太少了。
解决方案:
修改2个文件。
/etc/security/limits.conf
vi /etc/security/limits.conf
加上:
soft nofile 102400
hard nofile 409600
$cd /etc/pam.d/
$sudo vi login
添加 session required /lib/security/pam_limits.so
问题2:Too many fetch-failures
问题描述:
Too many fetch-failures
问题剖析:
出现这个问题主要是结点间的连通不够全面。
解决方案:
检查 、/etc/hosts
要求本机ip 对应 服务器名
要求要包含所有的服务器ip + 服务器名
检查 .ssh/authorized_keys
要求包含所有服务器(包括其自身)的public key
问题3:处理MR速度特别的慢
问题描述:
处理速度特别的慢 出现map很快 但是reduce很慢 而且反复出现 reduce=0%
问题剖析:
可能是节点的联通不够全面,或者hadoop为各个守护进程(namenode,secondarynamenode,jobtracker,datanode,tasktracker)统一分配的内存并不合适,
解决方案:
结合问题2,然后修改 conf/hadoop-env.sh 中的export HADOOP_HEAPSIZE=4000
问题4:能够启动datanode,但无法访问,也无法结束
问题描述:
能够启动datanode,但无法访问,也无法结束
问题剖析:
重新格式化一个新的分布式文件时,需要将NameNode上所配置的dfs.name.dir,这一namenode用来存放NameNode 持久存储名字空间及事务日志的本地文件系统路径删除,同时将各DataNode上的dfs.data.dir的路径 ,用于存放块数据的本地文件系统路径的目录也删除。如本次配置就是在NameNode上删除 /home/hadoop/NameData,在DataNode 上删除 /home/hadoop/DataNode1和/home/hadoop/DataNode2 。
这是因为Hadoop在格式化一个新的分布式文件系统时,每个存储的名字空间都对应了建立时间的那个版本(可以查看/home/hadoop /NameData/current目录下的VERSION文件,上面记录了版本信息),在重新格式化新的分布式系统文件时,最好先删除NameData 目录。必须删除各DataNode的dfs.data.dir。这样才可以使namedode和datanode记录的信息版本对应。
解决方案:
如上所示。
注意:删除是个很危险的动作,不能确认的情况下不能删除!!做好删除的文件等通通备份!!
问题5:节点断联
问题描述:
java.io.IOException: Could not obtain block: blk_194219614024901469_1100 file=/user/hive/warehouse/src_20090724_log/src_20090724_log
解决方案:
检查节点连接情况,恢复连接
问题6:JVM内存不够
问题描述:
java.lang.OutOfMemoryError: Java heap space
解决方案:
Java -Xms1024m -Xmx4096m
一般jvm的最大内存使用应该为总内存大小的一半,假设使用的8G内存,所以设置为4096m,这一值可能依旧不是最优的值。
或者:
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx800M -server</value>
</property>
With the right JVM size in your hadoop-site.xml , you will have to copy this
to all mapred nodes and restart the cluster.
问题7:Hadoop添加节点的方法
解决方案:
- 先在slave上配置好环境,包括ssh,jdk,相关config,lib,bin等的拷贝;
- 将新的datanode的host加到集群namenode及其他datanode中去;
- 将新的datanode的ip加到master的conf/slaves中;
- 重启cluster,在cluster中看到新的datanode节点;
- 运行bin/start-balancer.sh,这个会很耗时间
备注:
- 如果不balance,那么cluster会把新的数据都存放在新的node上,这样会降低mr的工作效率;
- 也可调用bin/start-balancer.sh 命令执行,也可加参数 -threshold 5
threshold 是平衡阈值,默认是10%,值越低各节点越平衡,但消耗时间也更长。 - balancer也可以在有mr job的cluster上运行,默认dfs.balance.bandwidthPerSec很低,为1M/s。在没有mr job时,可以提高该设置加快负载均衡时间。
其他备注: - 必须确保slave的firewall已关闭;
- 确保新的slave的ip已经添加到master及其他slaves的/etc/hosts中,反之也要将master及其他slave的ip添加到新的slave的/etc/hosts中
mapper及reducer个数:
mapper个数的设置:跟input file 有关系,也跟filesplits有关系,filesplits(块切分的大小)的上限为dfs.block.size,下限可以通过mapred.min.split.size设置,最后还是由InputFormat决定。
较好的建议:
- 正确的reduces数量应该是0.95或1.75乘以(<nodes.no.of nodes>*mapred.tasktracker.reduce.tasks.max)。增加reduces数量会增加框架开销,但会增加负载平衡并降低故障成本。
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<