hadoop 0.20.2 的各种问题

师傅要我看hadoop,点名要用最新版本,结果遇到了相当多的问题,慢慢逐个解决之~

 

在linux下跑伪分布模式,老是出现NullPointerException

 

java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:768)
at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$GetMapEventsThread.getMapCompletionEvents(ReduceTask.java:2747)
at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$GetMapEventsThread.run(ReduceTask.java:2670)

 

查了下,关于这个的有文章

https://issues.apache.org/jira/browse/HADOOP-4744

https://issues.apache.org/jira/browse/MAPREDUCE-969 

 

后来网上就是说的hosts和ip没对上什么的

想了半天后用了个简单办法解决

 

命令bin/hadoop namenode

 

启动的时候就会给出你的host和ip的信息,直接把配置文件里面的localhost改成那里面的ip就行了

集群模式还没尝试,因为windows下出现的是其它问题……

 

 

windows下使用Cygwin跑:

跑wordcount和pi的例子的时候,都会出现FileNotFoundException

 

java.io.FileNotFoundException: File C:/tmp/hadoop-SYSTEM/mapred/local/taskTracker/jobcache/job_201005040912_0002/attempt_201005040912_0002_m_000006_0/work/tmp does not exist.
        at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:420)
网上结论
有个网址说明了问题是:

 

${mapred.local.dir}/taskTracker/jobcache/$jobid/$taskid/work/tmp: task的临时目录。(用户可以设定属性mapred.child.tmp 来为map和reduce task设定临时目录。缺省值是./tmp。如果这个值不是绝对路径, 它会把task的工作路径加到该路径前面作为task的临时文件路径。如果这个值是绝对路径则直接使用这个值。 如果指定的目录不存在,会自动创建该目录。之后,按照选项 -Djava.io.tmpdir=’临时文件的绝对路径’执行java子任务。 pipes和streaming的临时文件路径是通过环境变量TMPDIR=’the absolute path of the tmp dir’设定的)。 如果mapred.child.tmp有./tmp值,这个目录会被创建。
但是在Cygwin下必须要设置路径

其实,最关键的是,要自己去建立那个文件夹,否则还是会有问题,貌似说的是必需得绝对路径(否则也没法建立文件夹呀),我弄绝对路径并建好文件夹后问题解决

 

题外话,关于namenode的format。再次format的时候会出现是否reformat的提示,这时候,大小写很重要,小写y是不行的,得大写,但是好像就算大写后启动hadoop也会出现问题,在tasktracker的日志里会出现异常记录,就是id不匹配,最简单的办法就是删除掉文件夹再重新format..

 

 

未解决的问题

在跑pi估算的示例的时候出现的IllegalArgumentException

java.lang.IllegalArgumentException: n must be positive
        at java.util.Random.nextInt(Random.java:250)
        at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.confChanged(LocalDirAllocator.java:243)
        at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathForWrite(LocalDirAllocator.java:289)
        at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:124)
        at org.apache.hadoop.mapred.MapOutputFile.getSpillFileForWrite(MapOutputFile.java:107)
        at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:1221)
        at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:1129)
        at org.apache.hadoop.mapred.MapTask$NewOutputCollector.close(MapTask.java:549)
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:623)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
        at org.apache.hadoop.mapred.Child.main(Child.java:159)

这个地址问题产生原因描述得很详细:https://issues.apache.org/jira/browse/HADOOP-6766

就不在这里再写了。有谁知道解决办法一定告诉我一声,谢谢~

 

在跑wordcount的时候出现的ClassCastException

2010-08-01 16:35:38,823 INFO org.apache.hadoop.mapred.TaskInProgress: Error from attempt_201008011634_0001_m_000001_0: java.lang.ClassCastException: org.apache.hadoop.mapreduce.lib.input.FileSplit cannot be cast to org.apache.hadoop.mapred.InputSplit
 at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:323)
 at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
 at org.apache.hadoop.mapred.Child.main(Child.java:170)

问题:

https://issues.apache.org/jira/browse/HADOOP-5576

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值