zoukankan      html  css  js  c++  java
  • 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的运行都是很有帮助的。

  • 相关阅读:
    POJ 1795 DNA Laboratory
    CodeForces 303B Rectangle Puzzle II
    HDU 2197 本源串
    HDU 5965 扫雷
    POJ 3099 Go Go Gorelians
    CodeForces 762D Maximum path
    CodeForces 731C Socks
    HDU 1231 最大连续子序列
    HDU 5650 so easy
    大话接口隐私与安全 转载
  • 原文地址:https://www.cnblogs.com/peizhe123/p/7496030.html
Copyright © 2011-2022 走看看