如果你的Hadoop集群,是公用的,可能有很多其它部门的文件都存放在上面

那么,就一定要考虑权限问题,给各种数据以不同的权限

Hadoop目前的权限,实现的比较简单,类似于Shell的权限,是通过操作用户名来控制的

它默认的超级用户就是你启动Hadoop时的用户

一般,我们所有的服务器都默认是用root来登录的

因为,安装Hadoop时一定要新建一个用户来安装,不要安装在root下

然后,对于不同的log,再新建不同的用户目录来存放,如:

hadoop fs -mkdir /user/test

hadoop fs -chmod -R 700 /user/test

hadoop fs -chown -R test:test /user/test

这样,只有test这个用户才能操作/user/test目录,其它用户都无权操作

如果,你su pplog,然后执行

hadoop fs -ls /user/test

你将会看到一个错误提示:

ls: could not get get listing for 'hdfs://zw-hadoop-master:9000/user/test' : org.apache.hadoop.security.AccessControlException: Permission denied: user=pplog, access=READ_EXECUTE, inode="test":test:test:rwx------

对于Hive来说,可以这么来控制权限访问

  1. 为不同日志的MetaStore在Mysql建立不同的数据库
  2. 为不同的用户建立单独的conf目录,如用户test的hive conf目录位于/opt/sohuhadoop/hive/conf/test下
  3. 在单独的test目录下,修改hive-default.xml文件,配置相应的db
  4. 启动单独的hiveserver实例,并监听不同的端口:HIVE_PORT=10020 nohup hive --config $HIVE_HOME/conf/test --service hiveserver &
  5. 在JDBC中连接自己对应的端口,如10020

上面的权限控制虽然有一定作用,但却是还很弱,如果其它人知道了你的用户名或者端口号

一样可以去删除你的文件,据说,将来Hadoop会对权限认证做一定改进,期待......