0、優化:http://dongxicheng.org/mapreduce/hadoop-optimization-0/
http://dongxicheng.org/mapreduce/hadoop-optimization-1/
1、各個節點的配置檔案的內容要一致:core|hdfs|mapred|yarn-site.xml。修改一個的節點的配置檔案內容後,叢集中所有的節點要同步修改,報錯的原因大部分是由於節點之間配置檔案不一致導致!
2、修改完配置檔案後要重啟hdfs或yarn服務。
3、有時會碰到修改配置檔案後,重啟hadoop的服務後,跑程式仍然會出錯的問題,要先查一下新增的<name>xxx</name>有沒有拼寫錯誤,如果沒有錯誤,就關閉服務然後重新啟動叢集(如果還報錯,建議重啟主機)。
4、各個節點的VERSION的clusterid要一致,否則會導致datanode自動關閉(刪除VERSION或將各個節點的clusterid改成一致)。
5、經常備份叢集可以正常執行的配置檔案。
6、yarn執行程式是提示running in uber mode : false。uber mode是Hadoop的小作業模式, 資料量小非常節約時間。可以設定 mapreduce.job.ubertask.enable=true生效
7、為了避免出現{WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable}這種錯誤,儘量應該安裝64位的作業系統,否則就需要自己編譯hadoop原始碼進行安裝,比較麻煩。
8、在YARN啟動mapreduce程式後,會在datanode上生成YarnChild,這個就是Container。
9、ssh輸入正確密碼還會denied,需要修改.ssh父目錄的許可權值,chmod 755 /hadoop
10、namenode無法啟動(hadoop namenode異常)當檢視 hadoop-hadoop-namenode-namenode.log產生報錯
錯誤資訊:
2016-09-20 11:48:52,409 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered exception loading fsimage
java.io.IOException: There appears to be a gap in the edit log. We expected txid 2289, but got txid 2859.
at org.apache.hadoop.hdfs.server.namenode.MetaRecoveryContext.editLogLoaderPrompt(MetaRecoveryContext.java:94)
at org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadEditRecords(FSEditLogLoader.java:215)
at org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadFSEdits(FSEditLogLoader.java:143)
..................
原因是namenode後設資料被破壞了,需要修復
輸入命令:hadoop namenode -recover
全都選擇‘y'或 ‘c’ 即可。修復完畢後需要將各個datanode的current中的VERSION同步。可以備份current檔案,然後在namenode上start-dfs.sh。如果不做這一步會導致datanode無法啟動。
另外的方法:或許可以修改current下面 seen_txtid中的值?就不用全部刪除{
懷疑是 NameNode 對後設資料的合併出了問題, 刪除報錯開始 的 edits 檔案 ,修改 seen_txid 中的 txid 編號;
啟動 NN 成功,主備NN 均啟動成功。
}
11、mapred.child.java.opts:當需要處理超大資料(mapper大於10?)最好將值設定成-Xmx1024m或者更高(-Xmx2048m)才能避免出現“核心已轉儲”這種jvm記憶體溢位的錯誤!!
待續...