在执行Hadoop的创建目录、写数据等情况,可能会出现该异常,而在读文件的时候却不会报错,这主要是由于系统的用户名不同导致的,由于我们进行实际开发的时候都是用Windows操作系统,而编译后的JAVA程序是部署在Linux上的。而Windows的用户名一般都是自定义的或者是administrator,Linux的用户名是root,对于Hadoop的部署,也有可能是hadoop用户名。
由于,Hadoop的权限验证是依靠Linux系统的,而用户名不一致,会报错,这个错误很经典,异常名是
org.apache.hadoop.security.AccessControlException
对应的修改方法,是配置hdfs-site.xml文件,查看hdfs-default.xml可以看到这一句:
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
<description>
If "true", enable permission checking in HDFS.
If "false", permission checking is turned off,
but all other behavior is unchanged.
Switching from one parameter value to the other does not change the mode,
owner or group of files or directories.
</description>
</property>
将这里面的value改为false,写到hdfs-site.xml中即可.
然后,重启namenode:
hadoop-daemon.sh stop namenode
hadoop-daemon.sh start namenode
执行完之后,namenode可能会进入安全模式一段时间,
这时候可能会报错:
Name node is in safe mode
稍等一下重试一下即可。
如果,时间太长了,可以手动停止:
通过dfsadmin -safemode value 来操作安全模式,参数value的说明如下: enter - 进入安全模式
leave - 强制NameNode离开安全模式
wait - 等待,一直到安全模式结束。