Hbase无法给用户赋权

Hbase无法给用户赋权,并报错。

  1. 问题背景描述:

测试环境,hdfs被format过。很多基于hdfs的环境都受到了影响。hbase也受到了影响。但是hbase在master启动的过程中,只要hdfs上有/hbase目录

建表之后,在赋权的时候,发现有错误

hbase(main):001:0>  user_permission
User Namespace,Table,Family,Qualifier:Permission
ERROR: DISABLED: Security features are not available
hbase(main):001:0> grant 'test_user', 'RWXCA' , 'test_table'
ERROR: DISABLED: Security features are not available
Here is some help for this command:
Grant users specific rights.
Syntax : grant <user>, <permissions> [, <@namespace> [, <table> [, <column family> [, <column qualifier>]]]
hbase(main):002:0> hbase:acl
NoMethodError: undefined method `hbase' for #<Object:0x2a37210>

2.以开始以为语法有错误,不会啊,很简单的语法。经过测试几个命令发现,但凡和权限相关的命令,都失败了

百度到一些建议,需要检查参数,在确认下面几个参数都设置正确的情况下,问题依旧

hbase.master.keytab.file
hbase.master.kerberos.principal
hbase.regionserver.keytab.file
hbase.regionserver.kerberos.principal
hbase.coprocessor.master.classes
hbase.coprocessor.region.classes
hbase.security.authorization

3.百度到以下链接,其中有介绍:

参考链接

https://community.hortonworks.com/questions/50984/security-features-not-available-in-hbase-kerberize.html
It seems your hbase:acl table is not created.
can you check hbase-site.xml at master side as well it should have:-
 <property>
<name>hbase.coprocessor.master.classes</name>
  <value>org.apache.hadoop.hbase.security.access.AccessController</value>
  </property>
try restarting your cluster as postStartMaster step should create this table, once you are able to do scan 'hbase:acl' , you will not see above error "ERROR: DISABLED:Security features are not available"

4.下面这句话,提醒了我,是不是hbase:acl丢失了?

try restarting your cluster as postStartMaster step should create this table, once you are able to do scan 'hbase:acl'

5.一检查,发现真没了

6.正常的情况应该是

7.问题原因找到了,开始找解决办法吧。继续百度(search技术文档,特别怀念google)

如何重建hbase:acl呢?安装过程中hbase并没有任何特殊设置,只要在hdfs上创建一个/hbase目录,启动hbase master就会自动创建需要的文件。为什么重启几次,都没有重新创建这个acl表呢?

查看hbase master log,可以看到错误“The table hbase:acl does not exist in meta but has a znode. run hbck to fix inconsistencies.” 通过命令hbase hbck检查,没有错误。问题也没有解决

2018-02-24 16:41:40,011 INFO  [testserver:16000.activeMasterManager] master.HMaster: Master has completed initialization
2018-02-24 16:41:40,016 INFO  [testserver:16000.activeMasterManager] quotas.MasterQuotaManager: Quota support disabled
2018-02-24 16:41:40,062 INFO  [testserver:16000.activeMasterManager] master.HMaster: Client=null/null create 'hbase:acl', {NAME => 'l', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', COMPRESSION => 'NONE', VERSIONS => '1', TTL => 'FOREVER', MIN_VERSIONS => '0', CACHE_DATA_IN_L1 => 'true', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '8192', IN_MEMORY => 'true', BLOCKCACHE => 'true'}
2018-02-24 16:41:40,200 WARN  [ProcedureExecutorThread-1] procedure.CreateTableProcedure: The table hbase:acl does not exist in meta but has a znode. run hbck to fix inconsistencies.
2018-02-24 16:41:40,202 ERROR [testserver:16000.activeMasterManager] master.HMaster: Coprocessor postStartMaster() hook failed
org.apache.hadoop.hbase.TableExistsException: hbase:acl
at org.apache.hadoop.hbase.master.procedure.CreateTableProcedure.prepareCreate(CreateTableProcedure.java:300)
at org.apache.hadoop.hbase.master.procedure.CreateTableProcedure.executeFromState(CreateTableProcedure.java:107)
at org.apache.hadoop.hbase.master.procedure.CreateTableProcedure.executeFromState(CreateTableProcedure.java:58)
at org.apache.hadoop.hbase.procedure2.StateMachineProcedure.execute(StateMachineProcedure.java:107)
at org.apache.hadoop.hbase.procedure2.Procedure.doExecute(Procedure.java:427)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execProcedure(ProcedureExecutor.java:999)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execLoop(ProcedureExecutor.java:803)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execLoop(ProcedureExecutor.java:756)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.access$200(ProcedureExecutor.java:75)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor$1.run(ProcedureExecutor.java:441)
2018-02-24 16:41:40,496 INFO  [ProcedureExecutorThread-1] procedure2.ProcedureExecutor: Rolledback procedure CreateTableProcedure (table=hbase:acl) id=2 owner=hbase state=ROLLEDBACK exec-time=299msec exception=org.apache.hadoop.hbase.TableExistsException: hbase:acl
2018-02-24 16:46:05,790 INFO  [LruBlockCacheStatsExecutor] hfile.LruBlockCache: totalSize=3.24 MB, freeSize=3.08 GB, max=3.08 GB, blockCount=0, accesses=0, hits=0, hitRatio=0, cachingAccesses=0, cachingHits=0, cachingHitsRatio=0,evictions=29, evicted=0, evictedPerRun=0.0

8.上面报错,既然已经明确说znode的问题,我们就去检查zookeeper上的情况吧。

确实看到,前面准备赋权,却失败的信息,记录在znode的acl路径下

hbase zkcli
[zk: 192.168.0.72:2181,192.168.0.73:2181,192.168.0.74:2181(CONNECTED) 3] ls /hbase
[meta-region-server, acl, backup-masters, table, draining, region-in-transition, running, table-lock, balancer, master, tokenauth, namespace, hbaseid, online-snapshot, replication, splitWAL, recovering-regions, rs, flush-table-proc]
[zk: 192.168.0.72:2181,192.168.0.73:2181,192.168.0.74:2181(CONNECTED) 4] ls /hbase/acl
[@test_user]

9.在zk上删除/hbase的信息,然后重启hbase整个集群,让hbase自动重建acl表

[zk: 192.168.0.72:2181,192.168.0.73:2181,192.168.0.74:2181(CONNECTED) 6] rmr /hbase
[zk: 192.168.0.72:2181,192.168.0.73:2181,192.168.0.74:2181(CONNECTED) 7] ls /
[alert, kafka-manager-1.3.3.13, rmstore, yarn-leader-election, kafka10-dev2, livy, kafka10, kafka10-dev, dubbo, eos, alert_leader, election, DP, hadoop-ha, zookeeper, leader, user]
[zk: 192.168.0.72:2181,192.168.0.73:2181,192.168.0.74:2181(CONNECTED) 8] [[email protected] ~]$ exit

10.可以看到,文件已经回来了

[[email protected] ~]$ hdfs dfs -ls /hbase/data/hbase
Found 3 items
drwxrwx---   - hbase hadoop          0 2018-02-24 17:00 /hbase/data/hbase/acl
drwxrwx---   - hbase hadoop          0 2018-02-24 16:59 /hbase/data/hbase/meta
drwxrwx---   - hbase hadoop          0 2018-02-24 17:00 /hbase/data/hbase/namespace

11.acl表也可以查看了

hbase(main):004:0> scan 'hbase:acl'
ROW                                                COLUMN+CELL
test_table                                        column=l:hbase, timestamp=1519463374193, value=RWXCA
test_table_01                                      column=l:hbase, timestamp=1519463409831, value=RWXCA
user_01                                           column=l:hbase, timestamp=1519463393177, value=RWXCA
3 row(s) in 0.1600 seconds

遇到问题,在理解整体架构原理的情况下,有目的,有范围的一步步检查,终归是可以解决的。

原文地址:http://blog.51cto.com/hsbxxl/2088661

时间: 2024-10-16 00:46:24

Hbase无法给用户赋权的相关文章

SQL创建Oracle表空间、用户以及给用户赋权的方法

//创建表空间 Create tablespace examination//创建表空间examination datafile 'c:\Oracle\zhangwei\examination.dbf'//与表空间关联的文件存放位置(要预先手动建好文件夹) size 100m//文件初始大小,千万不要写成mb(这里以下可略) autoextend on//文件大小可自动拓展 next 30m//每次拓展30m maxsize unlimited//不限制文件大小的上限 logging//生成对于

visudo精确用户赋权(sudo)

原文BLOG:http://iminmin.blog.51cto.com/689308/455992 sudo" 是Unix/Linux平台上的一个非常有用的工具,允许为非根用户赋予一些合理的"权利",让他们执行一些只有根用户或特许用户才能完成的任务,从而减少根用户的登陆次数和管理时间同时也提高了系统安全性. sudo的目的:为非根用户授予根用户的权限: 配置文件:/etc/sudoers visudo命令编辑修改/etc/sudoers配置文件 1.一般用户赋权设置: [[

mysql 里对root及普通用户赋权及更改密码的一些命令

让root用户可以通用 Navicat for MySQL客户端登录: mysql> grant all privileges on *.* to [email protected]'%' identified by 'root'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) 对user1用户更改密码,权限有点大,但不执行下面的第一条命令,密

oracle 快速建表空间,用户,赋权

本文章并不是给初学者详细详解oracle下如何建立表空间,用户,赋权等命令参数及含义,本文章可能只是对有一定的oracle基础的朋友有所帮助. 最近项目中又开始需要oracle数据库,在搭建环境时,发现自己的oracle命令已经忘了差不多,所以我从网上找来一些语句:可以快速的建表空间,用户并且赋权,由于我现在的项目并不是很严谨,所以像临时表空间,oracle的权限分配等细节,在这里会被忽略. 由于10g开始,oracle的控制台改成网页形式,不但界面改变而且相对的速度也慢了许多,所以我喜欢用命令

12C 用户管理与赋权

1.1  Common user公共用户/通用用户 可以管理CDB,如果有权限也可以操作PDB. 公共用户可以在PDB数据库之间进行赋权操作,可以开关PDB(有权限),可以对整个CDB进行恢复操作. 公共用户可以在不同的PDB数据库中有不同的权限. 注意:如果先插入一个PDB大CDB中,如果有用户名相同的公共用户,会进行合并,密码是新插入的用户的密码,但是这个用户锁住的. 1.2  Local user本地用户 和公共用户不同之处: 1.本地用户不能创建公共用户,但是可以创建和修改本地用户权限或

oracle创建用户、表空间,并赋权

--创建表空间 create tablespace test_tps datafile 'D:\app\Administrator\oradata\orcl\test_tps.dbf' size 1500M autoextend on next 5M; --创建用户并制定表空间 create user test_tps identified by test_tps default tablespace test_tps; --赋权限 grant connect,resource to test_

oracle创建,查看用户和角色,用户角色赋权

一.创建用户并赋予权限 1.创建用户 create user wangxiangyu identified by wangxiangyu; 2.赋权 grant dba to wangxiangyu; grant create session to wangxiangyu; --会话权限(没有该权限无法登录) 3.查看已经赋予用户的系统权限 select * from user_sys_privs; 二.创建角色 角色,即权限的集合,可以把一个角色授予给用户 1.创建角色 create role

Windows Server2008建立组织单位、组、用户以及文件赋权部门

Windows Server2008建立组织单位.组.用户以及文件赋权部门1.建立组织单位2.建立组3.新建用户 4.用户加组5.建立共享文件方便用户共享资源.并且赋权IT---share完全控制的权限注意:由于文件权限是继承一级文件,二级是否有权限需要在控制是否给予赋权!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6.测试下两图片!用IT组用户登录 完全拥有权限 C1为财务的没有权限访问 附件1:怎么共享一个文件;不过多描述! 原文地址:https://blog.51cto.com

mysql数据库创建用户、赋权、修改用户密码

创建新用户 create user lisi identified by '123456'; 查看创建结果: 授权 命令格式:grant privilegesCode on dbName.tableName to [email protected] identified by "password"; 命令说明: privilegesCode表示授予的权限类型,常见有: all privileges:所有权限: select:读取权限: delete:删除权限: update:更新权限: