我有一个HBase群集,其中每个regionserver和master都由用户hbaseuser
运行。
当客户端john
连接并创建表时,表目录和HDFS中的所有文件都归hbaseuser
所有(合理地,因为hbaseuser实际上正在运行所有内容)。
但是,如果john想要从具有托管区域的表中删除整个区域,他将运行HRegion.deleteRegion()
,它会尝试从HDFS中删除整个文件,因为用户john由于权限不足而失败。 HRegion.deleteRegion()
尝试直接在HDFS上运行命令,而不是通过HBase。
是否有HBase配置(通过配置文件或以编程方式),这将允许用户创建的表使该用户拥有HDFS中的那些文件?
E.g。目前john创建的任何内容现在都是:
>hadoop fs -lsr /hbase/testregion
drwxr-xr-x - hbaseuser supergroup ... /hbase/testregion/<id>
-rw-r--r-- - hbaseuser supergroup ... /hbase/testregion/<id>/.regioninfo
但我希望看到:
>hadoop fs -lsr /hbase/testregion
drwxr-xr-x - john supergroup ... /hbase/testregion/<id>
-rw-r--r-- - john supergroup ... /hbase/testregion/<id>/.regioninfo
是否有人知道是否存在允许用户删除HBase为该用户创建的文件的配置?
我正在使用hbase-0.90.6-cdh3u5。
答案 0 :(得分:0)
没有一种方法可以用HBase做你想做的事。
虽然有一些ACL支持,但请参阅HBase指南的Access Control Section。不幸的是,这仅适用于0.92以上的版本,适用于CDH4及更高版本的cloudera。访问控制也基于协处理器,它们无法处理hdfs级别的访问控制。
我想您可以在创建表后尝试更改HDFS中的目录权限,但是当区域打开时,它们将由运行HBase进程并具有默认权限的用户拥有。