最近我遇到过一次solr的文件权限问题,导致索引崩溃。同事也遇到一次FS的类似现象问题。多次经历发现hadoop目前对目录的权限管理有同步问题。
正常情况下,以某个用户启动,则目录权限会变成该用户。至于用户所在的组,可以直接忽略,没有看到用处。但是有时候会出现这样的情形。明明运行程序是超级用户,也就是缺省使用hdfs用户(如果有设置缺省),但是可以访问solr, 权限的目录,而且一直稳定运行。
但是某一天,也许你忽然想改变一些配置。重启了一些应用。也许就忽然它就权限变更了。除非你用正确的用户启动,并修正权限所带来的问题,否则就不能访问。经历过两次,一次是cloudear solr(solrcloud)的问题。另外一次是hdfs的一个扩展应用程序,文件系统时遇到。都是开始能用,在进行目录清理,或者是配置变更,重启某些应用后忽然就不能用了。象是延迟发作的地雷。延时爆炸的雷。
仔细想了一下hadoop整个儿的机制,hdfs系统的机制,还有linux文件系统管理机制。 最后想,可能是这个原因。
hdfs 文件系统,主要是nameserver, 它在管理权限时并不会立即生效,除非你手机用chmod改权限。它有一个更新数据的触发条件。在此之前,所有文件都是可以跨权限访问的。而且它也允许这么 做。这是因为避免过快的同步,提高文件系统的管理效率。也减少了同步造成的一系列问题。严格的说,它的权限同步是“人为手工”触发的。除非你明确的说,我需要仅限变更,否则它不更新。
这样以来,所有已启动的进程,所有namenode里已经在活动状态的文件,都可以跨权限访问了。 但是在偶尔的情况下,它会触发权限同步,造成后来的应用忽然就不能访问,显示为目录无权限。
此时需要手工更新所有的目录权限,建议同时重新启动所有服务节点,所有相关应用。