解决因block的损坏而导致hdfs启动后进入安全模式

问题描述:

     以单机伪分布式方式安装了hadoop2.7.1,并在该机器上安装了hive1.2.1。首先执行 sbin/start-dfs.sh 启动hdfs服务,然后执行hive,这时hive脚本启动报错,提示hdfs进入了安全模式,hive无法创建临时目录,出错信息如下:  

原因分析:

       在hdfs的配置文件hdfs-default.xml中定义了这样两个属性:     

<property>
  <name>dfs.namenode.safemode.threshold-pct</name>
  <value>0.999f</value>
  <description>
    指定一个百分比的阀值,假设我们设置的副本数(即参数dfs.replication)是5,那么在dataNode上就应该有5个副本存在,假设只存在3个副本,那么实际比率就是3/5=0.6如果这个值小于设置的值,就会进入安全模式
  </description>
</property>

<property>
  <name>dfs.namenode.safemode.min.datanodes</name>
  <value>0</value>
  <description>
dfs.namenode.safemode.min.datanodes的意思指namenode退出安全模式之前有效的(活着的)datanode的数量。这个值小等于0表示在退出安全模式之前无须考虑有效的datanode节点个数,值大于集群中datanode节点总数则表示永远处于安全模式;
</description> </property>

解决办法:

  根据报错图中信息,可以看到是有2个block在复制时出问题了,所以可以先用 bin/hdfs fsck / 命令找出hdfs是哪些块有问题,然后bin/hdfs dfs -rm fr 文件名 ,把有问题的block对应的文件删掉,然后重启hdfs就ok了

   或者执行 hadoop dfsadmin -safemode leave 退出安全模式

posted @ 2016-01-14 18:30  杭州胡欣  阅读(1080)  评论(0编辑  收藏  举报