CDH 版本子節點啟動問題


今天下午整整為了啟動一個節點瞎忙活一下午,慘痛的教訓還是記錄下來吧,畢竟付出了代價。事情原委,一個同事在一台機器上占用了大量內存訓練CTR點擊率模型,而這台機器上部署了分布式Hadoop的一個datanode,一開始報警我沒太在意,突然同事告訴我他上不去這台機器了,我心里咯噔一下,完蛋,估計hadoop掛了,上去一看,果不其然,掛了然后下午瞎弄了差不多一下午都沒能搞定。最終,在多篇博文的參考下,搞定了。總結問題如下:

下面這兩種方法在實際應用中也可能會用到。
1)重啟壞掉的DataNode或JobTracker。當Hadoop集群的某單個節點出現問題時,一般不必重啟整個系統,只須重啟這個節點,它會自動連入整個集群。
在壞死的節點上輸入如下命令即可:

  1. bin/Hadoop-daemon.sh start DataNode
  2. bin/Hadoop-daemon.sh start jobtracker
復制代碼


2) 動態加入DataNode或TaskTracker。這個命令允許用戶動態將某個節點加入集群中。

  1. bin/Hadoop-daemon.sh --config ./conf start DataNode
  2. bin/Hadoop-daemon.sh --config ./conf start tasktracker
復制代碼

 當然了Hadoop Log對普通用戶本身來說是很大的一個挑戰,要去解決你所遇到的問題,就要去看日志,去分析Hadoop的一個源碼,排錯,這些是最考驗人的事。在解決問題的過程中,有時需要翻源碼,有時會向同事、網友請教,遇到復雜問題則會通過mail list向全球各地Hadoop使用者,包括Hadoop Committer(Hadoop開發者)求助。在獲得很多人幫助后,自己將遇到問題和心得整理成文,希望相關的總結可以對那些焦頭爛額的Hadoop新手們有所幫助,少走筆者的彎路。

 

——寫在hadoop學習、開發、運維、應用相關文章前面

    監控發現hadoop2.x集群在yarn模式下有datanode節點掛了,處於dead狀態需要對其進行快速恢復處理,為了保障分布式平台的可用性,一般情況下不需要停止整個集群,只需要對掛了的datanode節點進行重啟即可,具體的處理方法如下:

 

    一、關閉處於dead狀態節點的相關hadoop進程,具體命令如下
1、關閉datanode進程;
sbin/hadoop-daemon.sh stop datanode
2、關閉該節點yarn資源管理進程
sbin/yarn-daemon.sh stop nodemanager 
    二 、重啟dead狀態節點的相關hadoop進程(同樣適用於動態新增節點啟動),具體命令如下: 
1、重啟回復datanode進程;
sbin/hadoop-daemon.sh start datanode
2、重啟回復該節點yarn資源管理進程
sbin/yarn-daemon.sh start nodemanager 
3、使用jps命令查看重啟進程情況

 

6847 DataNode
7574 NodeManager
7780 Jps 
    如果是主節點掛了,則可以考慮將整個集群重啟,一般是在sbin/start-all.sh就可以了,當然也可以在主節點下執行以下命令。

 

1、啟動集群namenode節點進程
sbin/hadoop-daemon.sh start namenode
2、啟動集群secondarynamenode節點進程
sbin/hadoop-daemon.sh start secondarynamenode
3、啟動yarn資源管理進程
sbin/yarn-daemon.sh start resourcemanager

Hadoop的日志有很多種,很多初學者往往遇到錯而不知道怎么辦,其實這時候就應該去看看日志里面的輸出,這樣往往可以定位到錯誤。Hadoop的日志大致可以分為兩類:(1)、Hadoop系統服務輸出的日志;(2)、Mapreduce程序輸出來的日志。這兩類的日志存放的路徑是不一樣的。本文基於Hadoop 2.x版本進行說明的,其中有些地方在Hadoop 1.x中是沒有的,請周知。
  

一、Hadoop系統服務輸出的日志

  諸如NameNode、DataNode、ResourceManage等系統自帶的服務輸出來的日志默認是存放在${HADOOP_HOME}/logs目錄下。比如resourcemanager的輸出日志為yarn-${USER}-resourcemanager-${hostname}.log,其中${USER}s是指啟動resourcemanager進程的用戶,${hostname}是resourcemanager進程所在機器的hostname;當日志到達一定的大小(可以在${HADOOP_HOME}/etc/hadoop/log4j.properties文件中配置)將會被切割出一個新的文件,切割出來的日志文件名類似yarn-${USER}-resourcemanager-${hostname}.log.數字的,后面的數字越大,代表日志越舊。在默認情況下,只保存前20個日志文件,比如下面:

01 -rw-r--r-- 1 wyp wyp 124M Mar 14 17:01 yarn-wyp-resourcemanager-master.log
02 -rw-r--r-- 1 wyp wyp 257M Mar  9 10:02 yarn-wyp-resourcemanager-master.log.1
03 -rw-r--r-- 1 wyp wyp 257M Feb  4 09:05 yarn-wyp-resourcemanager-master.log.10
04 -rw-r--r-- 1 wyp wyp 257M Feb  1 17:04 yarn-wyp-resourcemanager-master.log.11
05 -rw-r--r-- 1 wyp wyp 257M Jan 30 01:04 yarn-wyp-resourcemanager-master.log.12
06 -rw-r--r-- 1 wyp wyp 257M Jan 26 04:01 yarn-wyp-resourcemanager-master.log.13
07 -rw-r--r-- 1 wyp wyp 257M Jan 22 16:12 yarn-wyp-resourcemanager-master.log.14
08 -rw-r--r-- 1 wyp wyp 257M Jan 20 17:14 yarn-wyp-resourcemanager-master.log.15
09 -rw-r--r-- 1 wyp wyp 257M Jan 18 19:01 yarn-wyp-resourcemanager-master.log.16
10 -rw-r--r-- 1 wyp wyp 257M Jan 15 15:21 yarn-wyp-resourcemanager-master.log.17
11 -rw-r--r-- 1 wyp wyp 257M Jan 15 15:00 yarn-wyp-resourcemanager-master.log.18
12 -rw-r--r-- 1 wyp wyp 257M Jan 15 14:40 yarn-wyp-resourcemanager-master.log.19
13 -rw-r--r-- 1 wyp wyp 257M Mar  5 21:00 yarn-wyp-resourcemanager-master.log.2
14 -rw-r--r-- 1 wyp wyp 257M Jan 15 14:20 yarn-wyp-resourcemanager-master.log.20
15 -rw-r--r-- 1 wyp wyp 257M Feb 23 00:00 yarn-wyp-resourcemanager-master.log.3
16 -rw-r--r-- 1 wyp wyp 257M Feb 20 08:05 yarn-wyp-resourcemanager-master.log.4
17 -rw-r--r-- 1 wyp wyp 257M Feb 17 17:04 yarn-wyp-resourcemanager-master.log.5
18 -rw-r--r-- 1 wyp wyp 257M Feb 15 01:05 yarn-wyp-resourcemanager-master.log.6
19 -rw-r--r-- 1 wyp wyp 257M Feb 12 09:00 yarn-wyp-resourcemanager-master.log.7
20 -rw-r--r-- 1 wyp wyp 257M Feb  9 17:08 yarn-wyp-resourcemanager-master.log.8
21 -rw-r--r-- 1 wyp wyp 257M Feb  7 01:10 yarn-wyp-resourcemanager-master.log.9

上面這些都是可以配置的,比如resourcemanager(在${HADOOP_HOME}/etc/hadoop/log4j.properties):

01 log4j.logger.org.apache.hadoop.yarn.server.resourcemanager.RMAppManager
02           $ApplicationSummary=${yarn.server.resourcemanager.appsummary.logger}
03 log4j.additivity.org.apache.hadoop.yarn.server.resourcemanager
04                                     .RMAppManager$ApplicationSummary=false
05 log4j.appender.RMSUMMARY=org.apache.log4j.RollingFileAppender
06 log4j.appender.RMSUMMARY.File=${hadoop.log.dir}/
07                         ${yarn.server.resourcemanager.appsummary.log.file}
08 log4j.appender.RMSUMMARY.MaxFileSize=256MB(多大切割日志)
09 log4j.appender.RMSUMMARY.MaxBackupIndex=20(說明保存最近20個日志文件)
10 log4j.appender.RMSUMMARY.layout=org.apache.log4j.PatternLayout
11 log4j.appender.RMSUMMARY.layout.ConversionPattern=%d{ISO8601} %p %c{2}: %m%n

resourcemanager日志存放路徑也是可以配置的(在${HADOOP_HOME}/etc/hadoop/yarn-env.sh):

1 default log directory & file
2 if "$YARN_LOG_DIR" "" ]; then
3   YARN_LOG_DIR="$HADOOP_YARN_HOME/logs"
4 fi

只需要修改YARN_LOG_DIR的值,這時候,yarn相關的日志記錄都將存放在你配置的目錄下。
  

二、Mapreduce程序相關的日志

  Mapreduce程序的日志可以分為歷史作業日志和Container日志。
  (1)、歷史作業的記錄里面包含了一個作業用了多少個Map、用了多少個Reduce、作業提交時間、作業啟動時間、作業完成時間等信息;這些信息對分析作業是很有幫助的,我們可以通過這些歷史作業記錄得到每天有多少個作業運行成功、有多少個作業運行失敗、每個隊列作業運行了多少個作業等很有用的信息。這些歷史作業的信息是通過下面的信息配置的:

01 <property>
02     <name>mapreduce.jobhistory.done-dir</name>
03     <value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
04 </property>
05   
06 <property>
07     <name>mapreduce.jobhistory.intermediate-done-dir</name>
08     <value>${yarn.app.mapreduce.am.staging-dir}
09                          /history/done_intermediate</value>
10 </property>
11   
12 <property>
13     <name>yarn.app.mapreduce.am.staging-dir</name>
14     <value>/tmp/hadoop-yarn/staging</value>
15 </property>
  更多關於Hadoop歷史作業的信息,可以參考本博客的 《Hadoop歷史服務器詳解》

  (2)、Container日志包含ApplicationMaster日志和普通Task日志等信息。默認情況下,這些日志信息是存放在${HADOOP_HOME}/logs/userlogs目錄下,我們可以通過下面的配置進行修改:

01 <property>
02     <description>
03       Where to store container logs. An application's localized log directory
04       will be found in ${yarn.nodemanager.log-dirs}/application_${appid}.
05       Individual containers' log directories will be below this, in
06       directories  named container_{$contid}. Each container directory will
07       contain the files stderr, stdin, and syslog generated by that container.
08     </description>
09     <name>yarn.nodemanager.log-dirs</name>
10     <value>${yarn.log.dir}/userlogs</value>
11 </property>

  熟悉Hadoop相關日志的存放地方不僅對運維Hadoop和觀察Mapreduce的運行都是很有幫助的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM