hadoop 卡主_HDFS DisTCP执行卡住了,怎么办?
背景
我們在進行兩個集群間數據同步的時候,使用的是hdfs的distcp的方式進行跨集群跨版本的數據同步,但是在執行hdfs distcp 命令時,發現在運行到 with build listing處就卡住了 .
具體問題如下圖:
針對問題解決,中間我們試過了哪些辦法
1 首先查看hdfs本身服務狀態是否正常,get命令是否可用? 這里我們嘗試使用get的方式從源集群中下載一個文件來進行測試, hadoop fs -get hdfs://namenode:8020 . 以及使用cp命令是否也是可用的? Hadoop fs -cp hdfs://namenode:8020 hdfs://namenode:8020/ 結果發現get命令和cp命令都是沒有問題的,那么這里其實就證明一方面hdfs服務本身是沒有問題的,另一方面是網絡是通的,不是網絡原因.
2 檢查yarn application 并沒有啟動yarn任務,也就是mr任務就沒有執行,那么這里我們可以試驗一下正常的提交一個mr任務看看是否能夠正常的在yarn上面running起來.
執行任務報下面的異常信息:
3 我們查找集群中mapreduce.task.io.sort.mb的設置值為4096,這個配置的意思大概是
“在排序文件時使用的緩沖內存的總量,以兆字節為單位”。有人可能已經為每個任務使用大量內存的應用程序全局設置了該值。在刪除該配置(并使用其默認值100)之后,DistCp就可以工作了。
mapreduce.task.io.sort.mb的問題根本分析
MapTask.MapOutputBuffer使用byte[] 大小的數組來實現緩沖區mapreduce.task.io.sort.mb,在分配數組之前檢查大小是否正確。問題是Java數組不能有超過2^31 - 1的元素(即使是64位JVM),這是Java語言專門化本身的一個限制。這意味著配置mapreduce.task.io.sort。mb實際上被限制為<= 2047。指定值4096對每個任務占用大量內存的應用程序沒有幫助,相反,它會破壞所有MapReduce應用程序
但是由于這個原因,distcp并不會有任何的失敗提示,它在SortPass.run()方法的內部循環中不斷重試sort傳遞,所以會一直卡住..
希望本文對你有幫助!
感謝關注“碼農星球”。本文版權屬于“碼農星球”。我們提供咨詢和培訓服務,關于本文有任何困惑,請關注并聯系我們。
總結
以上是生活随笔為你收集整理的hadoop 卡主_HDFS DisTCP执行卡住了,怎么办?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: charles代理手机调试_H5开发 移
- 下一篇: 好听的qq情侣网名大全142个