背景

这篇文章用来记录使用hadoop过程中遇到的一些问题以及解决方案~

问题一:hadoop quota限制

问题:某次streaming任务需要创建一个目录,结果提示如下错误

原因:hadoop quota是设置某个目录下最大文件数的参数,如果达到最大文件数,就不能继续产生新的文件和目录了,设置限制的目的是避免集群中有过多的小文件,导致集群利用率不高的情况出现。我们可以通过 hadoop fs -count -q /user/rd 命令来查看/user/rd目录的quota限制,结果如下
从左到右依次为 QUOTA REMAINING_QUOTA SPACE_QUOTA REMAINING_SPACE_QUOTA DIR_COUNT FILE_COUNT CONTENT_SIZE FILE_NAME

解决方案:我们可以通过重新设置最大quota来解决问题,命令如下:hadoop dfsadmin -setQuota 1000 /user/rd,不过这个命令需要最高权限,不然会出现下面错误:

问题二:-cacheArchive符号链接

问题:streaming任务的时候,我们使用-cacheArchive可以使用一个hdfs上的压缩文件,hadoop会自动给我们解压,但是这个文件是全局的一个缓存文件,是用符号链接到每个节点的目录的,所以,我们如果在这个目录里面涉及到移动文件到外层目录的话,就会出错,这里要注意

问题三:-cacheArchive全局缓存文件会不会造成条件竞争问题

问题:在一次streaming任务中,使用-cacheArchive会造成某些节点某些任务的失败,把-cacheArchive改成-file就不会出现错误,怀疑有可能是条件竞争问题,待追

问题四:Streaming Processor Broken Pipe

问题:在一次任务中,reduce任务只需要输出前200行,red.sh里面写的是 awk ‘{}’ | head -n 200,导致了上面那个错误,看了下stackoverflow上一个解释,说mapreduce任务的stdin没有完整处理完成,导致了上面那个任务,果然,awk ‘{}’ | head -n 200只要够200行就结束,剩下的stdin没有处理导致了上面那个错误

问题五:map输出没有value,默认整行作为key的时候,貌似没有排序直接给reduce了,待追

问题六:设置不恰当的reducer数量可能会导致任务失败,待追

问题:在某次任务中,设置了2000个reduce节点,然后有Failed了600多个,最终任务失败,把reduce改成500个之后,只有几个Failed,最终任务成功

问题七:reduce执行完成一部分的情况下,map从100%变为0%并重新执行,任务最终成功,待追

问题:在某次任务中,map只有一个任务节点,reduce有500个,在map完成,reduce完成300多个节点的情况下,map又变成了0%,又重新执行了一遍,然后reduce不动,map执行完后reduce又继续执行,任务最终成功了

问题八:reduce某些节点长时间不动

问题:在某次任务中,设置了1000个节点,有800多个节点完成任务的时候,剩下的100多个节点不动了,查看counters日志,发现任务卡住不动了,不知道咋回事,但是又没有发现什么错误,程序逻辑也很简单,然后又尝试了几次,发现还是不行,最后在counters日志里面发现cpu资源特别少,然后猜想是不是cpu资源分配出问题了,然后查hadoop发现了mapred.reduce.cpu.vcores这个参数,我设置了一下这个参数为2,mapred.reduce.cpu.vcores=”2″,又启动任务,然后任务成功了。


原创文章,转载请注明地址: 文章地址