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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Mapreduce,mapper任务无输出以及相关问题解决,日志的正确用法

發布時間:2024/2/28 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mapreduce,mapper任务无输出以及相关问题解决,日志的正确用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題提出

1.輸出空文件之前遇到過ArrayIndexOutOfBoundsException->數組越界的錯誤,解決也很簡單:加上判斷語句 。其實當時是有些懷疑是不是讀取數據錯誤了,但是考慮可能是最后一行空值數據被讀到了導致出現的這個錯誤,就沒往下想。
2).在執行MR任務時,mapper和reducer都正常運行,但是hdfs輸出文件為空。(任務是關于MR執行排序任務的)
數據如下:

排查經歷

1.查看core-site.xml是不是路徑(hadoop.tmp.dir屬性)配置錯誤了,導致數據放錯了位置。然而 不是
2.因為沒有報錯所以排除了是集群的問題。然后就是考慮的是可能程序錯誤了,但是一直沒有發現錯誤。期間也嘗試過重寫輸入文本,重寫MR程序,重新打包等操作。
3.注意到了命令行MR程序執行結束后留下的信息:

Mapper的輸出為空(Map output records=0)
這說明錯誤完全是出現在mapper階段
嘗試使用了程序經典的輸出語句標志位,但是因為沒找到它的輸出,就暫時放棄了。本來想使用hadoop本地模式運行MR并使用Debug的方式查找錯誤的,感覺有些復雜就舍棄了。最后網上查詢了如何查看MR程序的println輸出(方法末尾附上)后,發現了問題。
這里需要查看logs文件(如果添加了歷史服務器,則可以直接查看歷史服務器的map任務,找到最新執行的任務,查看logs文件。沒有則見最后查詢logs日志的方法)
println輸出結果如下:

可以發現得到的每一行數據都沒有問題但是得到的數組長度始終為1,說明map任務中的split函數(以“\t”拆分)并沒有將數據拆分。查看輸入文件發現,間距很小。懷疑是間隔符的問題。但是在vim編輯輸入文件時發現確實\t間距就是很小。多次嘗試之后,發現結果:
vim編輯器并不很好適應所有外部文件復制的\t,很可能將其看為空格了。如果出現這種情況要么將數據拿出來使用記事本重新添加\t再復制到vim編輯器中,要么直接使用vim編輯器將間隔修改為\t
修改結束后:MR任務正常運行
Map輸出如下:

MR運行結果如下:

小結

1.重點學會看logs日志文件,從日志文件中我們可以發現很多錯誤,也可以很好幫助我們解決問題。
2.遇到錯誤的時候,先考慮自己翻譯下錯誤,不要忙著找文章看是什么錯誤(之前我就是…),比如數組越界異常ArrayIndexOutOfBoundsException,翻譯過來就很好理解錯誤在哪里了。
3.使用好MR程序添加println輸出的tip,可以提示自己那些位置出錯了,快速反應。

補充查看日志

有歷史服務器(JobHistoryServer)的:
找到最新執行完的MR程序點擊history查看
1.


  • 3.

    4.

    向下翻就可以找到我們添加的輸出結果,如果不想使用本地的集群運行模式通過debug找錯的,可以使用這個方法。
    無歷史服務器的:
    打開hdfs web界面,打開/tmp/logs/目錄找到用戶的最新log文件,如圖:


    將文件下載下來搜索stdout,一直下一個就可找到相應的輸出結果:

    總結

    以上是生活随笔為你收集整理的Mapreduce,mapper任务无输出以及相关问题解决,日志的正确用法的全部內容,希望文章能夠幫你解決所遇到的問題。

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