2012-01-03 66 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 

還要確保所有文件有適當的權限。