2013-11-20 47 views
0

在僞分佈式模式下運行map reduce有一些問題。我在linux上運行版本1.2.1。我有: 1.創建$ JAVA_HOME & $ HADOOP_HOME並將相對bin目錄添加到路徑; 2.格式化dfs; 3.執行start-dfs.sh和start-mapred.sh。Hadoop - 示例中包含的示例jar無法在僞分佈式模式下完成

執行jps似乎顯示所有正在運行的應用程序(我認爲)。

[[email protected] bin]$ jps 
8724 TaskTracker 
8487 SecondaryNameNode 
8841 Jps 
8353 DataNode 
7239 NameNode 
8597 JobTracker 

我已經然後試圖具有類似的結果運行該單詞計數和pi實例,例如:

[[email protected] bin]$ hadoop jar hadoop/hadoop-examples-1.2.1.jar pi 4 1000 
Warning: $HADOOP_HOME is deprecated. 

Number of Maps = 4 
Samples per Map = 1000 
Wrote input for Map #0 
Wrote input for Map #1 
Wrote input for Map #2 
Wrote input for Map #3 
Starting Job 
13/11/18 10:31:38 INFO mapred.FileInputFormat: Total input paths to process : 4 
13/11/18 10:31:39 INFO mapred.JobClient: Running job: job_201311181028_0001 
13/11/18 10:31:40 INFO mapred.JobClient: map 0% reduce 0% 
13/11/18 10:31:47 INFO mapred.JobClient: map 50% reduce 0% 
13/11/18 10:31:52 INFO mapred.JobClient: map 100% reduce 0% 

在輸出達到地圖中的每個實例100%減少0%階段然後攤位。無論等待多久,這項工作都不會再向前邁進。我檢查了日誌和一個我懷疑是指出問題是Hadoop的保羅的TaskTracker-lt001.log它具有以下的輸出:

2013-11-18 10:31:55,969 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 10:34:59,148 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 10:35:05,196 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 10:35:11,253 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 

.......... 

2013-11-18 11:10:03,259 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 11:10:06,290 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 11:10:12,320 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 11:10:18,343 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 11:10:21,369 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 11:10:27,395 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 11:10:33,426 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 11:10:36,463 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 

這似乎是這裏的同一個問題:

Running Hadoop examples halt in Pseudo-Distributed mode

已經檢查了JobTracker網頁上的狀態,並且此運行顯示4個完成的地圖任務和1個運行(40分鐘後完成0%)減少任務。

它似乎卡住了減少>複製>但爲什麼?任何人都可以幫助下一步看什麼?

UPDATE

我想我有一些更多的信息。如果我看的運行降低任務

(http://localhost:50030/taskdetails.jsp?tipid=task_201311201256_0001_r_000000) 

我看到它被分配到機器/default-rack/hit-nxdomain.opendns.com

如果我再嘗試,然後點擊「上次4KB任務日誌」鏈接發送我

http://hit-nxdomain.opendns.com:50060/tasklog?attemptid=attempt_201311201256_0001_r_000000_0&start=-4097 

修改這個網址

http://localhost:50060/tasklog?attemptid=attempt_201311201256_0001_r_000000_0&start=-4097 

則顯示日誌與許多電子以下的xamples:

2013-11-20 14:59:54,726 INFO org.apache.hadoop.mapred.ReduceTask: Penalized(slow) Hosts: 
2013-11-20 14:59:54,726 INFO org.apache.hadoop.mapred.ReduceTask: hit-nxdomain.opendns.com Will be considered after: 814 seconds. 
2013-11-20 15:00:54,729 INFO org.apache.hadoop.mapred.ReduceTask: attempt_201311201256_0001_r_000000_0 Need another 4 map output(s) where 0 is already in progress 
2013-11-20 15:00:54,729 INFO org.apache.hadoop.mapred.ReduceTask: attempt_201311201256_0001_r_000000_0 Scheduled 0 outputs (1 slow hosts and0 dup hosts) 
2013-11-20 15:00:54,730 INFO org.apache.hadoop.mapred.ReduceTask: Penalized(slow) Hosts: 
2013-11-20 15:00:54,730 INFO org.apache.hadoop.mapred.ReduceTask: hit-nxdomain.opendns.com Will be considered after: 754 seconds. 

如此看來,認爲Hadoop的任務是hit-nxdomain.opendns.com主機上運行。

主機(本地主機)通過將DNS設置爲DNS服務器,通過DHCP選擇它的DNS設置。路由器反過來使用opendns.com來解析外部地址。

我是否認爲這是DNS問題?

任何想法如何hadoop結束了這個主機名?

任何想法如何解決它?

+0

您是否嘗試在獨立模式下運行您的任務? (試試這可以確保你的代碼/數據是正確的) – xhudik

+0

非常感謝你的迴應。這兩個作業都以獨立模式運行。我能夠解決這個問題。見下面的答案。 – user2177934

+0

嗯奇怪的錯誤 - 偉大的,你能解決它!我也有一些hbase和NDS的麻煩 – xhudik

回答

1

這確實是一個DNS問題(反向查找存在問題)。分辨率如下:

檢查任務日誌以查看「已停止」任務(via http://localhost:50030/)。這表明了DNS的問題。

我發現暗示使用

hadoop-dns-checker

這表明,雖然localhost的查找/反向查找是很好,該主機名相同的不工作堆棧溢出post。修復這個問題解決了這個問題。

實際的問題是,主機通過DHCP(通過路由器)與(dnsmasq)dns服務器分開獲取IP。因此,它沒有向DNS服務器註冊主機名。因此,dns查找被dns服務器傳遞給我們的dns提供程序,並返回一個「虛擬」IP地址,然後解析爲opendns「not found」主機名。 MapReduce使用此主機名作爲reduce任務的主機名。啓用dnsmasq dhcp並解除在路由器上的問題解決了問題 - 主機現在從dnsmasq獲取其IP地址並將其主機名註冊到DNS服務器。 DNS查找和反向查找現在適用於本地主機和主機/主機名。