目錄
- 1 運行自帶的MapReduce程式
- 2 常見錯誤
1 運行自帶的MapReduce程式
下面我們在Hadoop集群上運行一個MapReduce程式,以幫助讀者對分布式計算有個基本印象,
在安裝Hadoop時,系統給用戶提供了一些MapReduce示例程式,其中有一個典型的用于計算圓周率的Java程式包,現在運行該程式,
該jar包檔案的位置和檔案名是“~/hadoop-3.1.0/share/Hadoop/mapreduce/hadoop- mapreduce-examples-3.1.0.jar”,我們在終端輸入hadoop jar ~/hadoop-3.1.0/share/hadoop/ mapreduce/hadoop-mapreduce-examples-3.1.0.jar pi 10 10,按下Enter鍵后即可開始運行,其中pi是類名,后面跟了兩個10,它們是運行引數,第一個10表示Map次數,第二個10表示隨機生成點的次數(與計算原理有關),

如果在程式運行程序中出現如圖4-42所示的輸出資訊,則表明程式在正常運行,系統處于良好狀態,

值得指出的是,運行Hadoop的MapReduce程式是驗證Hadoop系統是否正常啟動的最后一個環節,實際上,即使通過“jps”命令和Web界面監測驗證了系統已經成功啟動,并且能夠查看到狀態資訊,也不一定意味著系統可以正常作業,例如,如果防火墻沒有關閉,MapReduce程式運行就不會成功,
2 常見錯誤
經常有用戶不能正常運行上述MapReduce程式,所遇到的錯誤提示也各不相同,主要有以下這些情況:
第一,Linux防火墻沒有關閉,用戶看到系統拋出“no route to host”或“There are 0 datanode(s) running and no node(s) are excluded in this operation.”例外資訊,特別是在后一種例外情況下,我們雖然使用“jps”命令可以查看到Master和Slave上的NameNode、DataNode等行程都存在,但是如果使用“http://master:9870/”查看Hadoop狀態,就會發現沒有活動的DataNode,這就是無法正常運行MapReduce程式的原因,要消除上述例外,就必須關閉Linux防火墻,而且所有節點的防火墻都要關閉,然后重新啟動Hadoop即可,關于關閉防火墻的具體辦法,請參見第3章中有關內容,
java.net.NoRouteToHostException: No route to hostjava.net.NoRouteToHostException: No route to host

第二,系統不穩定,當系統由于某種原因處于一種不穩定狀態時,也可以導致程式運行失敗,一般可以簡單地重新運行一下命令即可,
第三,系統處于安全模式,這時系統會給出提示“system is in safe mode”,這時,我們只要執行如下命令:hadoop dfsadmin -safemode leave
即可關閉安全模式,離開安全模式后,就可以正常運行程式了,
第四,mapred-site.xml配置不合適,在Hadoop中運行應用程式時,出現了“running beyond virtual memory”錯誤,提示資訊是“Container [pid=6629,containerID=container_ 1532136350867_0001_01_000026] is running 541133312B beyond the ‘VIRTUAL’ memory limit. Current usage: 291.8 MB of 1 GB physical memory used; 2.6 GB of 2.1 GB virtual memory used. Killing container”,顯然,這表明Slave上運行的Container試圖使用過多的記憶體,而被NodeManager 殺(kill)掉了,解決辦法是調整mapred-site.xml配置,例如,可以將下面這些配置代碼加入mapred-site.xml檔案中:
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1024M</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx2560M</value>
</property>
上述代碼中的value需要根據自己計算機記憶體大小及應用情況決定,
上述幾種例外有時候可以重疊在一起出現,這時候就需要逐個解決問題,
Hadoop是一種開源系統,且處于不斷進化中,出現各類問題是很正常的,從某種意義上講,開發和應用Hadoop大資料應用系統,就是一個不斷面對各種問題、需要持續努力和耐心去應對的程序,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340681.html
標籤:其他
上一篇:MySQL,hbase初步安裝及配置(centos)
下一篇:Hadoop生產調優手冊
