2012-01-03 68 views
0

我被困在这个问题很长一段时间。 我尝试在distibuted节点中运行某些东西。 我有2 datanodes和masternoden和jobtracker。 我一直在每个节点保持运行hadoop分布式模式失败

< 
2012-01-03 08:48:30,910 WARN mortbay.log - /mapOutput: org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find taskTracker/jobcache/job_201201031846_0001/attempt_201201031846_0001_m_000000_1/output/file.out.index in any of the configured local directories 
2012-01-03 08:48:40,927 WARN mapred.TaskTracker - getMapOutput(attempt_201201031846_0001_m_000000_2,0) failed : 
org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find taskTracker/jobcache/job_201201031846_0001/attempt_201201031846_0001_m_000000_2/output/file.out.index in any of the configured local directories 
    at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathToRead(LocalDirAllocator.java:389) 
    at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathToRead(LocalDirAllocator.java:138) 
    at org.apache.hadoop.mapred.TaskTracker$MapOutputServlet.doGet(TaskTracker.java:2887) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:363) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) 
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:324) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:534) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:864) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:533) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:207) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:403) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:522) 
> 

,但此错误的奴隶hadoop.log的tasktracker.log收到以下错误:

2012-01-03 10:20:36,732 WARN mapred.ReduceTask - attempt_201201031954_0006_r_000001_0 adding host localhost to penalty box, next contact in 4 seconds 
2012-01-03 10:20:41,738 WARN mapred.ReduceTask - attempt_201201031954_0006_r_000001_0 copy failed: attempt_201201031954_0006_m_000001_2 from localhost 
2012-01-03 10:20:41,738 WARN mapred.ReduceTask - java.io.FileNotFoundException: http://localhost:50060/mapOutput?job=job_201201031954_0006&map=attempt_201201031954_0006_m_000001_2&reduce=1 
    at sun.reflect.GeneratedConstructorAccessor6.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1491) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1485) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1139) 
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.getInputStream(ReduceTask.java:1447) 
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.getMapOutput(ReduceTask.java:1349) 
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.copyOutput(ReduceTask.java:1261) 
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.run(ReduceTask.java:1195) 
Caused by: java.io.FileNotFoundException: http://localhost:50060/mapOutput?job=job_201201031954_0006&map=attempt_201201031954_0006_m_000001_2&reduce=1 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1434) 
    ... 4 more 

2012-01-03 10:20:41,739 WARN mapred.ReduceTask - attempt_201201031954_0006_r_000001_0 adding host localhost to penalty box, next contact in 4 seconds 
2012-01-03 10:20:46,761 WARN mapred.ReduceTask - attempt_201201031954_0006_r_000001_0 copy failed: attempt_201201031954_0006_m_000000_3 from localhost 
2012-01-03 10:20:46,762 WARN mapred.ReduceTask - java.io.FileNotFoundException: http://localhost:50060/mapOutput?job=job_201201031954_0006&map=attempt_201201031954_0006_m_000000_3&reduce=1 
    at sun.reflect.GeneratedConstructorAccessor6.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1491) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1485) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1139) 
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.getInputStream(ReduceTask.java:1447) 
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.getMapOutput(ReduceTask.java:1349) 
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.copyOutput(ReduceTask.java:1261) 
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.run(ReduceTask.java:1195) 
Caused by: java.io.FileNotFoundException: http://localhost:50060/mapOutput?job=job_201201031954_0006&map=attempt_201201031954_0006_m_000000_3&reduce=1 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1434) 
    ... 4 more 

这是我的配置:

mapred现场:

<property> 
<name>mapred.job.tracker</name> 
<value>10.20.1.112:9001</value> 
<description>The host and port that the MapReduce job tracker runs 
at.</description> 
</property> 

<property> 
    <name>mapred.map.tasks</name> 
    <value>2</value> 
    <description> 
    define mapred.map tasks to be number of slave hosts 
    </description> 
</property> 

<property> 
    <name>mapred.reduce.tasks</name> 
    <value>2</value> 
    <description> 
    define mapred.reduce tasks to be number of slave hosts 
    </description> 
</property> 

<property> 
    <name>mapred.system.dir</name> 
    <value>filesystem/mapreduce/system</value> 
</property> 

<property> 
    <name>mapred.local.dir</name> 
    <value>filesystem/mapreduce/local</value> 
</property> 

<property> 
    <name>mapred.submit.replication</name> 
    <value>2</value> 
</property> 
<property> 
    <name>hadoop.tmp.dir</name> 
    <value>tmp</value> 
</property> 

<property> 
    <name>mapred.child.java.opts</name> 
    <value>-Xmx2048m</value> 
</property> 

核心部位:

<property> 
<name>fs.default.name</name> 
<value>hdfs://10.20.1.112:9000</value> 
<description>The name of the default file system. A URI whose 
scheme and authority determine the FileSystem implementation. 
</description> 
</property> 

我试着玩tmp目录 - 没有帮助。 我试图玩mapred.local.dir - 没有帮助。

我也厌倦了在运行时查看文件系统目录中的内容。 我发现路径:taskTracker/jobcache/job_201201031846_0001/attempt_201201031846_0001_m_000000_1/ 存在,但它没有输出文件夹。

有什么想法吗?

谢谢。

+0

java.io.FileNotFoundException:HTTP://本地主机:50060/mapOutput工作= job_201201031954_0006和地图= attempt_201201031954_0006_m_000001_2和减少= 1 这是有效的URL?你在指定位置有任何文件吗?我想尝试的另一种方法是,将localhost更改为机器名(或)127.0.0.1 – kosa 2012-01-03 19:01:55

+0

我在从机127.0.1.1的hosts文件中更改为slave1/slave2。不是这个例外,但在url – AAaa 2012-01-03 19:11:40

回答

1

hadoop.tmp.dir,mapred.system.dirmapred.local.dir应该是绝对路径而不是相对的。目录位置应该以/开头。这些属性也是默认的,不需要指定它们。

夫妇的建议,如果你是新上设置的Hadoop Hadoop的

  • 开始与Hadoop的教程12

  • 从上述教程中指定的最小配置参数开始。一旦成功,则可以完成其他调整/功能。没有必要指定一些参数,如mapred.reduce.tasks,默认为2.

  • 如果您是Linux的新手,那么从CDH等Hadoop VM开始。这里是instructions

  • 对于SO或论坛中的任何查询,请提及Hadoop的版本。

+0

中的slave1/slave2感谢您的回复。我添加的一些参数是因为我坚持使用的这个问题。我认为添加它们可能会解决问题。我最终会转到你提到的Hadoop VM,但我已经安装了3个vms,所以我想试着解决这些问题。如果你使用hadoop,你可以发布你的主机文件的例子吗? 当我将参数更改为绝对路径时,我得到以下消息:java.io.IOException:未定义的作业输出路径 – AAaa 2012-01-04 07:55:20

+0

发布完整的异常 – 2012-01-04 09:05:48

2

在这里,我想的问题是:你的TaskTracker想请从主机输出的地图,所以它应该是:

http://10.20.1.112:50060/mapOutput?job=job_201201031954_0006&map=attempt_201201031954_0006_m_000001_2&reduce=1 

,但在你的tasknode,它试图从

得到它
http://localhost:50060/mapOutput?job=job_201201031954_0006&map=attempt_201201031954_0006_m_000001_2&reduce=1 

所以问题就出现了,主要问题不是hadoop.tmp.dir,mapred.system.dir和mapred.local。dir,我也面临这个问题,我通过删除master/etc/hosts中的“127.0.0.1 localhost”来解决问题,也许你可以试试!

编辑

综上所述,转到etc/hosts文件中是造成错误的节点的文件结构和删除行127.0.0.1 localhost

+0

**确保在导致错误的节点上替换localhost,为我工作,但很高兴知道是什么导致了本地主机的调用,而不是应该在主机文件中设置的实际'主'namenode .... – planty182 2013-09-04 20:25:04

+0

此外,我**不是100%肯定的是,这确实解决了**,在看完我的datanode日志后,我看到** 2013-09-04 21:34:35,748 INFO org.apache.hadoop.mapred.TaskTracker:收到'KillJobAction'找工作:job_201309042109_0002 2013-09-04 21:34:35,748 WARN org.apache.hadoop.mapred.TaskTracker:未知作业job_201309042109_0002被删除。“但没有说任务发生在这个节点上。这使我认为这使得** datanode不处理任何事情**,然后当该节点完成处理时**作业被分配给另一个节点** – planty182 2013-09-04 20:57:31

0

尽管2警告,同时也影响了工作效率,他们仍然试图解决错误的原因是无法在输出文件的中间找到作业。需要做以下检查:

一个,配置mapred.local.dir性能 B,DF-H键查看空间的缓存路径充足 C,免费看内存空间充足 d,以确保缓存路径可写入权限 e,检查磁盘损坏

0

我遇到了同样的问题,我通过使用sudo命令运行Hadoop来解决您的问题。

即,1)须藤苏Owner_Of_Hadoop

2) sudo .start-all.sh 

还要确保所有文件有适当的权限。