hadoop 遇到的问题记录

来源:互联网 发布:淘宝小卖家月收入统计 编辑:程序博客网 时间:2023/12/03 09:50

1、jobtracker启动不正常报错、hdfs无法使用(比如执行一个操作文件命令就报错:only be replicated to 0 nodes, instead of 1)

2012-07-23 00:00:05,244 WARN     org.apache.hadoop.mapred.JobTracker: Retrying...
   2 2012-07-23 00:00:05,266 WARN org.apache.hadoop.hdfs.DFSClient: DataStreamer Exception: java.io.IOException: File /tmp/hadoop-root/mapred/system/jobtracker.info cou     ld only be replicated to 0 nodes, instead of 1
2012-07-23 00:00:05,267 WARN org.apache.hadoop.mapred.JobTracker: Writing to file hdfs://127.0.0.1:9000/tmp/hadoop-root/mapred/system/jobtracker.info failed!
  30 2012-07-23 00:00:05,268 WARN org.apache.hadoop.mapred.JobTracker: FileSystem is not ready yet!
  31 2012-07-23 00:00:05,271 WARN org.apache.hadoop.mapred.JobTracker: Failed to initialize recovery manager.
我的问题分析:当时也在网上找解决办法,有人就这个报错日志:only be replicated to 0 nodes, instead of 1给出了几个可能的原因,1、由于多次格式化,重启导致namenode和datanode的信息不一致;2、namenode和datdanode建立连接需要等一段时间,说白了就是等一会儿 ;3、没有写文件权限(但是我查看日志都是root最高权限)4、磁盘空间不足
后来我试了多种办法(格式化重启、离开safemode、等一段时间)但是都没法解决,后来自己耐下心来看系统日志,发现datanode与namenode正常建立连接,所以基本排除原因2,至于原因1也可以简单排除因为datanode日志没有报ID冲突的错误信息。
仔细分析jobtracker的日志不难发现是没法写文件 Writing to file hdfs://127.0.0.1:9000/tmp/hadoop-root/mapred/system/jobtracker.info failed!,此时我严重怀疑是由于权限问题,但是看日志发现是root用户的权限,终于我看了下磁盘分区,发现hadoop默认的目录/tmp 分区内存只154M,此时我怀疑是由于内存空间不足造成的,因为hdfs文件都会分配的很大(64M倍数),所以我修改了dfs目录配置,格式化、重启,终于正常了,配置如下,在hdfs-site.xml加入如下配置:
<property>
<name>dfs.data.dir</name>
<value>/home/alex/hadoop/dfs</value>

</property>

2、hadoop能map不能reduce(shuffle阶段报错,fetch#1错误)

日志报错:attempt_201207232344_0002_r_000000_0, Status : FAILED
org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#1
Error reading task outputConnection refused
No job jar file set.  User classes may not be found. See Job or Job#setJar(String).
12/07/23 23:51:42 INFO mapreduce.JobSubmitter: Cleaning up the staging area hdfs://127.0.0.1:9000/tmp/hadoop-root/mapred/staging/root/.staging/job_201207232344_0003
在网上找了下解决办法,大致有几种可能的原因:
1、 Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out. 系统设置有关,文件较大,无法分配大内存
2、机器位数是64位导致这个问题
3、/etc/hosts 里面没有配master的hostname
4、防火墙没关
        问题1我安装网上方法,对配置文件做了修改: vim /etc/security/limits.conf  加入 * soft nofile 102400  * hard nofile 409600
vim /etc/pam.d/login  加入:session    required     /lib/security/pam_limits.so但是还是没有办法解决
问题三:由于我是伪分布式,所以只要配本机就行,看了下配置了hostname
问题四:setup下看了我的防火墙,发现防火墙有两个,一个是firework一个是selinux,第一个关了,第二个没关
最后在我重启虚拟机后,终于可以正常运行,但是是不是就是第四步弄好的呢,在我重新打开selinux后,再次运行,依然正常,我想应该不是selinux没关的可能,至于到底什么原因,可能是问题1

3、map100% reduce% 但是最后报错:outout file already exist

    删除output目录

4、org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find any valid local directory for taskTracker/jobcache/job_201108311619_0703/attempt_201108311619_0703_m_000076_0/output/spill0.out

存储写满了。

5、hadoop能map不能reduce(shuffle阶段报错,fetch#1错误)

Too many fetch-failures
13/02/25 21:20:48 INFO mapreduce.Job: Task Id : attempt_201302230043_0022_r_000000_0, Status : FAILED
org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#4
        at org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:124)
        at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:362)
        at org.apache.hadoop.mapred.Child$4.run(Child.java:223)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:396)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1153)
        at org.apache.hadoop.mapred.Child.main(Child.java:217)
Caused by: java.io.IOException: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.
        at org.apache.hadoop.mapreduce.task.reduce.ShuffleScheduler.checkReducerHealth(ShuffleScheduler.java:253)
        at org.apache.hadoop.mapreduce.task.reduce.ShuffleScheduler.copyFailed(ShuffleScheduler.java:187)
        at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyMapOutput(Fetcher.java:347)
        at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyFromHost(Fetcher.java:251)
        at org.apache.hado
    几个可能原因:1、hostname 配置   2、我的错误(选用的数据压缩方法不对,造成错误):
job.getConfiguration().setClass("mapred.map.runner.class", MultithreadedMapRunner.class, MapRunnable.class);
job.getConfiguration().setBoolean("mapreduce.map.output.compress", true);

0 0