解决因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 退出安全模式