CDH 版本子節點啟動問題
今天下午整整為了啟動一個節點瞎忙活一下午,慘痛的教訓還是記錄下來吧,畢竟付出了代價。事情原委,一個同事在一臺機器上占用了大量內存訓練CTR點擊率模型,而這臺機器上部署了分布式Hadoop的一個datanode,一開始報警我沒太在意,突然同事告訴我他上不去這臺機器了,我心裏咯噔一下,完蛋,估計hadoop掛了,上去一看,果不其然,掛了然後下午瞎弄了差不多一下午都沒能搞定。最終,在多篇博文的參考下,搞定了。總結問題如下:
下面這兩種方法在實際應用中也可能會用到。
1)重啟壞掉的DataNode或JobTracker。當Hadoop集群的某單個節點出現問題時,一般不必重啟整個系統,只須重啟這個節點,它會自動連入整個集群。
在壞死的節點上輸入如下命令即可:
- bin/Hadoop-daemon.sh start DataNode
- bin/Hadoop-daemon.sh start jobtracker
2) 動態加入DataNode或TaskTracker。這個命令允許用戶動態將某個節點加入集群中。
- bin/Hadoop-daemon.sh --config ./conf start DataNode
- 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 |
|
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> |
(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 版本子節點啟動問題