生活随笔
收集整理的這篇文章主要介紹了
MapReduce提交作业常见问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天在hadoop集群上跑MapReduce程序,遇到的一些問題和解決的方法,希望對大家有幫助!
1.從HDFS上傳下載文件到
第一種錯誤:
Java代碼??
<span?style="font-size:?medium;">Exception?inthread"main"java.lang.IllegalArgumentException:??? ?? Wrong?FS:?hdfs:?? ?? expected:?hdfs:??
?
這個很多人都遇到過,不管是在ubuntu還是windows系統中,在連接集群的時候,不能直接使用hdfs://192.168.1.11:9000,要在hosts文件中添加192.168.1.11的映射,有人可能不知道windows下hosts文件在哪?C:\Windows\System32\drivers\etc\hosts(這個是隱藏文件你可以顯示出來),在host文件中添加192.168.1.11 master就可以了。
第二種錯誤:
Java代碼??
<span?style="font-size:?medium;">org.apache.hadoop.ipc.RemoteException:??? ?? org.apache.hadoop.hdfs.server.namenode.SafeModeException:??? ?? Cannot?create?file/usr/yujing/wordcount.?Name?node?is?in??? ?? safe?mode.?? The?ratio?of?reported?blocks?0.0000?has?not?reached?the??? ?? threshold?0.9990.?Safe?mode?will?be?turned?off??? ?? automatically.</span>??
?
這個錯誤出現的原因是client對集群中HDFS的操作沒有權限
解決辦法:
(1)在代碼中加上一行代碼
conf.set("dfs.permissions","false");
(2)在集群配置文件hdfs-site.xml
property>
???? <name>dfs.permissions</name>
??? <value>false</value>
</property>
然后重啟
1.對于hadoop提供的wordcount例子
第一種錯誤:
?
Java代碼??
<span?style="font-size:?medium;">12/02/10?14:24:59?INFO?ipc.Client:?Retrying?connect?to??? ?? server:?localhost/127.0.0.1:9000.?Already?tried?0?time(s).?? 12/02/10?14:25:01?INFO?ipc.Client:?Retrying?connect?to??</span>??
?
當你在代碼中明明寫的是集群的IP,但是它連接就是localhost,這是因為mapreduce默認連接的是localhost
解決辦法:
conf.set("fs.default.name", "hdfs://master:9000");
conf.set("hadoop.job.user", "yujing");
conf.set("mapred.job.tracker", "master:9001");
這樣JobClient就會把Job任務提交到hadoop集群中
第二種錯誤:
Java代碼??
<span?style="font-size:?medium;">Exception?in?thread?"main"??? ?? org.apache.hadoop.mapreduce.lib.input.InvalidInputException?? ?? :?Input?path?does?not?exist:??? ?? hdfs:??
?
這種錯誤是因為向集群中提交job任務是文件的輸入路徑必須要是HDFS上的文件路徑,輸出路徑也要是HDFS上的文件
第三種錯誤:
Java代碼??
<span?style="font-size:?medium;">2/02/10?14:52:36?WARN?mapred.JobClient:?No?job?jar?file??? ?? set.??User?classes?may?not?be?found.?See?JobConf(Class)?or??? ?? JobConf#setJar(String).?? 12/02/10?14:52:36?INFO?mapred.JobClient:?Cleaning?up?the??? ?? staging?area?hdfs:?? ?? hadoop/mapred/staging/yujing/.staging/job_201202091335_0293</span>??
?
以上的錯誤是由于mapreduce的輸出路徑已存在,必須先刪除掉那個文件
正確的運行結果:
Java代碼??
<span?style="font-size:?medium;">12/02/10?14:59:35?INFO?input.FileInputFormat:?Total?input??? ?? paths?to?process?:?1?? 12/02/10?14:59:35?INFO?mapred.JobClient:?Running?job:??? ?? job_201202091335_0299?? 12/02/10?14:59:36?INFO?mapred.JobClient:??map?0%?reduce?0%?? 12/02/10?14:59:48?INFO?mapred.JobClient:??map?100%?reduce??? ?? 0%?? 12/02/10?15:00:04?INFO?mapred.JobClient:??map?100%?reduce??? ?? 100%?? 12/02/10?15:00:09?INFO?mapred.JobClient:?Job?complete:??? ?? job_201202091335_0299?? 12/02/10?15:00:09?INFO?mapred.JobClient:?Counters:?25</span>??
?
2.自己寫的mapReduce程序
第一種錯誤:
Java代碼??
<span?style="font-size:?medium;">java.lang.RuntimeException:??? ?? java.lang.ClassNotFoundException:?cn.hadoop.InvertedIndex?? ?? $InvertedIndexMapper?? ????at?org.apache.hadoop.conf.Configuration.getClass?? ?? (Configuration.java:866)?? ????at??? ?? org.apache.hadoop.mapreduce.JobContext.getMapperClass?? ?? (JobContext.java:195)</span>??
?
第一種解決方法:
這是由于及集群中沒有我們提交的jar包,所以namenode不知道怎么執行我們的job任務,所以就會報空指針異常錯誤,所以要自己打jar提交給集群。
解決方法: 所以先給自己的程序打成jar包,然后放到工程的根目錄下,然后在代碼中添加JobConf conf=new JobConf
();conf.setJar("pr.jar");這樣就可以了,這個錯誤困擾了我們很久。
第二種解決方法:
使用eclipse插件解決,有很多人剛剛開始的時候使用插件老是會出不來想要的結果,這個可能和eclipse或者是插件包的版本有關,有的版本的eclipse不兼容hadoop插件,還有就是hadoop-eclipse-plugin-0.20.203.0.jar的插件里面少了一些包,要自己進行手動修改,這個網上又怎么修改的方法,關于在eclipse安裝插件就是要多試試就可以了,當插件完成后,然后點擊run hadoop,插件內部會打包你的程序提交到集群上。
第三種解決方法:
自己在程序中打包自己的mapreduce程序,然后提交job任務,這方面這部分代碼在eclipse插件中也是實現了的,我們這里就是要用代碼實現插件的功能。
第二種錯誤:
Java代碼??
<span?style="font-size:?medium;">2/02/10?14:59:35?INFO?input.FileInputFormat:?Total?input??? ?? paths?to?process?:?1?? 12/02/10?14:59:35?INFO?mapred.JobClient:?Running?job:??? ?? job_201202091335_0299?? 12/02/10?14:59:36?INFO?mapred.JobClient:??map?0%?reduce?0%?? 12/02/10?14:59:48?INFO?mapred.JobClient:??map?100%?reduce??? ?? 0%</span>??
?
這種錯誤出現的原因是mapreduce默認的reduce個數是1個,所以如果當map的個數很大時,reduce過程遲遲不會進行,解決方法是在代碼中添加job.setNumReduceTasks(4);設置reduced的個數。
總結
以上是生活随笔為你收集整理的MapReduce提交作业常见问题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。