2012-04-15 114 views
11
[hadoop-1.0.2] → hadoop jar hadoop-examples-1.0.2.jar wordcount /user/abhinav/input  /user/abhinav/output 
Warning: $HADOOP_HOME is deprecated. 

****hdfs://localhost:54310/user/abhinav/input 
12/04/15 15:52:31 INFO input.FileInputFormat: Total input paths to process : 1 
12/04/15 15:52:31 WARN util.NativeCodeLoader: Unable to load native-hadoop library for  your platform... using builtin-java classes where applicable 
12/04/15 15:52:31 WARN snappy.LoadSnappy: Snappy native library not loaded 
12/04/15 15:52:31 INFO mapred.JobClient: Running job: job_201204151241_0010 
12/04/15 15:52:32 INFO mapred.JobClient: map 0% reduce 0% 
12/04/15 15:52:46 INFO mapred.JobClient: map 100% reduce 0% 

我使用本指南在單個節點上設置了hadoop(http://www.michael-noll.com/tutorials/running-hadoop-on -ubuntu-linux-single-node-cluster /#run-the-mapreduce-job),我試圖運行一個提供的例子,但我陷入了地圖100%減少0%。什麼可能導致這個?Hadoop WordCount示例卡住地圖100%減少0%

+0

如果你遵循邁克爾教程,我想你在/ usr/local/hadoop中安裝了hadoop。僅在此目錄中,找到tasktracker.log和其他日誌文件。檢查是否有任何錯誤是他們在這裏發佈 – 2012-04-15 21:43:39

+0

這可能有助於http://stackoverflow.com/questions/32511280/hadoop-1-2-1-multinode-cluster-reducer-phase-hangs-for-wordcount-program/ 32551259#32551259 – 2015-09-13 20:15:22

回答

4

可能有很多原因造成這個問題,最合理的一個是,你在你的映射器有一個bug(例外,無限循環,...)

要調試:

  • 登錄到本地主機:50030,你應該看到你的工作列表。找到失敗的作業(您的ID爲job_201204151241_0010),並查看跟蹤(不要忘記點擊「全部」,否則您將看不到完整的日誌)。
  • 看看你的日誌磁盤,它們應該位於/ usr/lib/hadoop/logs或類似的地方(你必須參考你的配置找出),grep找到錯誤信息cat /path/to/logs/*.log | grep ERROR,看看它是否返回一些東西。

如果什麼都沒有出來,我建議你把日誌消息放到你的映射器中,以便在每一步手動調試會發生什麼(假設這是在僞分佈模式下運行)。

讓我知道那是怎麼回事。

編輯:正如克里斯指出的,減速機在0%,所以問題實際上是在減速步驟之前。

+2

如果reducer處於0%,reducer尚未進入reduce階段(它仍在等待複製數據),所以這不是用戶的reducer實現中的bug – 2012-04-15 23:16:05

+0

好點Chris,post updated謝謝。 – 2012-04-15 23:27:52

13

首先,打開你的工作跟蹤器,看看自由減速器插槽的數量和其他正在運行的工作 - 是否有另一個工作正在耗盡所有可用的減速器插槽。

一旦你證明自己有可用來爲你工作運行減速,在作業服務器Web UI中找到您的作業,然後單擊它,打開它,一些免費減速插槽。您現在應該可以看到已完成的映射器的數量 - 確保這顯示您沒有正在運行的映射器。控制檯中完成的百分比有時會存在,你可能有一個正在提交的映射器,它說它是100%,但是有一個問題最終確定。

一旦你滿意你所有的mappers已經完成,看看運行reducer的數量 - 這是否顯示0?如果沒有,則表明有一些正在運行 - 單擊正在運行的reducer的數量以啓動正在運行的reducers頁面,現在單擊一個實例,直到獲得查看reducer日誌的選項。您需要查看該減速器的所有日誌(不是第一個/最後一個100k)。這應該告訴你你的reducer實際上在做什麼 - 很可能試圖將結果從映射器複製到reducer節點。我想這是你的問題是,網絡或磁盤空間之一,但eitherway,最終的Hadoop應該出故障減速機實例,並重新安排到另一個節點上運行。

+2

偉大的提示。我遵循這個指示,發現我的問題在於Windows防火牆不讓文件從映射器運行的節點傳輸到reducer嘗試運行的節點(即使它們全部是相同的物理機器)。 – jhatcher9999 2013-10-08 23:27:24

+0

感謝您的理由。我有同樣的100%Map/0%Reduce問題,並且發現它是因爲我在使用SecureVPN連接。 – lcn 2014-04-11 21:00:21

4

我也在運行Suse 11的主機上遇到過這個問題。正如Chris在上面所述,問題在於映射器。 爲了解決這個問題,我編輯了/ etc/hosts文件並刪除了主機的IP地址。 例如,在/ etc/hosts中

Ip.address.of.your.host  hostname 

更改爲

127.0.0.1     hostname 

一旦我做了上述變化,並重新啓動,我能夠運行單詞計數程序

2

我看到在Mac 10.7.4上運行僞羣集的相同問題。當我從睡眠模式中醒來時會發生這種情況。它看起來像映射IP地址已經被重新定義上喚醒:

syslog:2012-09-14 16:52:06,542 WARN org.apache.hadoop.mapred.ReduceTask: attempt_201209141640_0003_r_000000_0 copy failed: attempt_201209141640_0003_m_000000_0 from 172.19.131.144 
syslog:2012-09-14 16:52:06,546 INFO org.apache.hadoop.mapred.ReduceTask: Task attempt_201209141640_0003_r_000000_0: Failed fetch #1 from attempt_201209141640_0003_m_000000_0 

於是,經過從睡眠模式喚醒行動,通過stop-all.sh和start-all.sh修復此問題重啓的Hadoop我。

0

我有一個類似的問題(不一樣)。我的任務陷入了100%的地圖和16%的減少。我碰到這個問題已經有好幾個小時了(對於不同的程序:grep,wordcount等),直到我碰到這個線程並且看到了Chris的答案 - 這基本上暗示了一種調試或查明面臨的問題的好方法。 (顯然我沒有聲望投票他的答案,因此這篇文章)。

在查看作業跟蹤器的Web UI並導航到確切的任務線程的日誌文件(我不知道該日誌存在)之後,我發現我的JobTracker無法解析數據節點的主機名。我將(ip,hostname)對添加到我的主機文件,並且卡住的任務恢復活動併成功完成。

0

我面臨類似的問題,問題是沒有空間爲reducer任務。所以我釋放了記憶。最好的辦法是看jobtracker日誌: 50030/logs/hadoop-hadoop-jobtracker-localhost.localdomain.log。 日誌消息: 「WARN org.apache.hadoop.mapred.JobInProgress:No room for reduce task。Node tracker_localhost.localdomain:localhost.localdomain/127.0.0.1:57829 has 778543104 bytes free; but we expect expect to reduce input to take 1160706716 「

1

我可能發現」地圖100%減少0%「問題的另一個原因。

我的地圖任務生成大量的記錄,我在僞集羣環境中運行hadoop。

我檢查了地圖任務日誌,看起來地圖100%和縮減開始之間的時間正在用於合併中間段。

2013-07-27 03:09:55,302 INFO org.apache.hadoop.mapred.Merger: Merging 10 intermediate segments out of a total of 334 
2013-07-27 03:10:15,166 INFO org.apache.hadoop.mapred.Merger: Merging 10 intermediate segments out of a total of 325 
2013-07-27 03:10:35,603 INFO org.apache.hadoop.mapred.Merger: Merging 10 intermediate segments out of a total of 316 
... 
2013-07-27 03:26:18,738 INFO org.apache.hadoop.mapred.Merger: Merging 10 intermediate segments out of a total of 28 
2013-07-27 03:29:50,458 INFO org.apache.hadoop.mapred.Merger: Merging 10 intermediate segments out of a total of 19 
2013-07-27 03:33:48,368 INFO org.apache.hadoop.mapred.Merger: Down to the last merge-pass, with 10 segments left of total size: 4424592099 bytes 

此過程可能需要很長時間,具體取決於段的大小和數量以及磁盤的讀寫速度。

除了日誌,你可以通過檢查機器的磁盤使用情況來判斷是否發生了這種情況,因爲大量數據將被合併到新文件中,這種情況會持續很高。我甚至可以注意到在合併後刪除了這些段,因爲磁盤使用量在合併過程中波動,在合併過程中增加,在刪除過程中減少。

1

我也遇到過這個問題。但我做編輯文件etc/hosts文件是這樣的:

Ip.address.of.your.host  hostname 

只需添加低於上述一一線跟隨

127.0.1.1  hostname 

你應該注意到它是127.0.1.1(而不是127.0.0.1 ),否則你會之後遇到的問題,如「連接到主機some_hostname端口22:連接超時」,如果找你使用Linux和使用找你單節點的Hadoop

1

: 到目錄/ etc /主機 這種格式改變你的IP地址,

您的IP地址的主 您的IP地址的奴隸

去/ Hadoop的/ conf目錄 開放的主人,然後鍵入本地在這個(刪除所有其他地址!) 打開從站並在本地設置localhost(刪除所有其他地址!)

現在,再次運行您的程序,它應該正常工作。