hadoop 0.20.2 的各種問題

來源:互聯網
上載者:User

師傅要我看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

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.