Hadoop常规问题整理

1、运行mr程序出错

connecting to resoucemanager

retrying .... 

retrying .....

  • 原因是没有启动yarn或者启动失败

2、初始化工作目录结构

hdfs namenode -format 只是初始化了namenode的工作目录

而datanode的工作目录是在datanode启动后自己初始化的

3、datanode不被namenode识别的问题

namenode在format初始化的时候会形成两个标识:

blockPoolId:

clusterId:

  • 新的datanode加入时,会获取这两个标识作为自己工作目录中的标识。一旦namenode重新format后,namenode的身份标识已变,而datanode如果依然
  • 持有原来的id,就不会被namenode识别

4、datanode下线后多久看到效果

datanode不是一下线就会被namenode认定为下线的,有一个超时时间

5、关于副本数量的问题

副本数由客户端的参数dfs.replication决定(优先级: conf.set >  自定义配置文件 > jar包中的hdfs-default.xml)

6、hadoop datanode节点超时时间设置

  • datanode进程死亡或者网络故障造成datanode无法与namenode通信,namenode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长。HDFS默认的超时时长为10分钟+30秒。如果定义超时时间为timeout,则超时时长的计算公式为:

         timeout  = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval。

         而默认的heartbeat.recheck.interval 大小为5分钟,dfs.heartbeat.interval默认为3秒。

  •          需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval的单位为秒。所以,举个例子,如果heartbeat.recheck.interval设置为5000(毫秒),dfs.heartbeat.interval设置为3(秒,默认),则总的超时时间为40秒。
  •         hdfs-site.xml中的参数设置格式:

        heartbeat.recheck.interval

        2000

        dfs.heartbeat.interval

        1

7、hdfs启动不正常

  • 用浏览器访问namenode的50070端口,不正常,需要诊断问题出在哪里:

a、在服务器的终端命令行使用jps查看相关进程

(namenode1个节点   datanode3个节点   secondary namenode1个节点)

b、如果已经知道了启动失败的服务进程,进入到相关进程的日志目录下,查看日志,分析异常的原因

1)配置文件出错,saxparser  exception; ——找到错误提示中所指出的配置文件检查修改即可

2)unknown host——主机名不认识,配置/etc/hosts文件即可,或者是配置文件中所用主机名跟实际不一致

   (注:在配置文件中,统一使用主机名,而不要用ip地址)

3)directory 访问异常—— 检查namenode的工作目录,看权限是否正常

8、datanode启动不正常

a)查看datanode的日志,看是否有异常,如果没有异常,手动将datanode启动起来

sbin/hadoop-daemon.sh start datanode

b)很有可能是slaves文件中就没有列出需要启动的datanode

c)排除上述两种情况后,基本上,能在日志中看到异常信息:

   1、配置文件

   2、ssh免密登陆没有配置好

   3、datanode的身份标识跟namenode的集群身份标识不一致(删掉datanode的工作目录)

9、namenode进入安全模式

  • 当namenode发现集群中的block丢失数量达到一个阀值时,namenode就进入安全模式状态,不再接受客户端的数据更新请求

 

  • 在正常情况下,namenode也有可能进入安全模式:

         集群启动时(namenode启动时)必定会进入安全模式,然后过一段时间会自动退出安全模式(原因是datanode汇报的过程有一段持续时间)

  • 也确实有异常情况下导致的安全模式

         原因:block确实有缺失

         措施:可以手动让namenode退出安全模式,bin/hdfs dfsadmin -safemode leave

                     或者:调整safemode门限值:  dfs.safemode.threshold.pct=0.999f

9、HDFS冗余数据块的自动删除

  • 在日常维护hadoop集群的过程中发现这样一种情况:

         某个节点由于网络故障或者DataNode进程死亡,被NameNode判定为死亡,HDFS马上自动开始数据块的容错拷贝;当该节点重新添加到集群中时,由于该节点上的数据其实并没有损坏,所以造成了HDFS上某些block的备份数超过了设定的备份数。通过观察发现,这些多余的数据块经过很长的一段时间才会被完全删除掉,那么这个时间取决于什么呢?

         该时间的长短跟数据块报告的间隔时间有关。Datanode会定期将当前该结点上所有的BLOCK信息报告给Namenode,参数dfs.blockreport.intervalMsec就是控制这个报告间隔的参数。

  •         hdfs-site.xml文件中有一个参数:

         dfs.blockreport.intervalMsec

         3600000

         Determines block reporting interval in milliseconds.

         其中3600000为默认设置,3600000毫秒,即1个小时,也就是说,块报告的时间间隔为1个小时,所以经过了很长时间这些多余的块才被删除掉。通过实际测试发现,当把该参数调整的稍小一点的时候(60秒),多余的数据块确实很快就被删除了。

 

 

 

你可能感兴趣的:(大数据,Hadoop)