日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MapReduce提交作业常见问题

發布時間:2025/7/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MapReduce提交作业常见问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天在hadoop集群上跑MapReduce程序,遇到的一些問題和解決的方法,希望對大家有幫助!
1.從HDFS上傳下載文件到
第一種錯誤:

Java代碼??
  • <span?style="font-size:?medium;">Exception?inthread"main"java.lang.IllegalArgumentException:???
  • ??
  • Wrong?FS:?hdfs://192.168.1.11:9000/usr/yujing/wordcount,???
  • ??
  • expected:?hdfs://master:9000</span>??
  • ?
    這個很多人都遇到過,不管是在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://master:9000/user/yujing/D:/qq.txt</span>??
  • ?
    這種錯誤是因為向集群中提交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://master:9000/tmp/hadoop-??
  • ??
  • 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提交作业常见问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。