1. 程式人生 > >CDH 版本子節點啟動問題

CDH 版本子節點啟動問題

每天 note 更多 title 大小 dea 配置 心得 href

今天下午整整為了啟動一個節點瞎忙活一下午,慘痛的教訓還是記錄下來吧,畢竟付出了代價。事情原委,一個同事在一臺機器上占用了大量內存訓練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的運行都是很有幫助的。

CDH 版本子節點啟動問題