我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Hbase无法给用户赋权

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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.一检查,发现真没了

Hbase无法给用户赋权


6.正常的情况应该是

Hbase无法给用户赋权

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] [hbase@testserver ~]$ exit

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

[hdfs@testserver ~]$ 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


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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Hbase无法给用户赋权

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

oracle怎么给用户赋予权限

在Oracle数据库中,可以通过以下步骤给用户赋予特定权限:登录Oracle数据库管理工具,如SQL*Plus或SQL Developer。使用管理员用户在数据库中创建一个新用户,或者使用已有用户。使用管理员用户执行如下语句,给用户赋予特定
oracle怎么给用户赋予权限
2024-04-09

mysql怎么给用户赋予权限

要给MySQL用户赋予权限,可以使用GRANT语句。GRANT语句用于给用户授予特定权限,语法如下:GRANT privileges ON database.table TO user@host IDENTIFIED BY 'passwo
mysql怎么给用户赋予权限
2024-04-09

linux怎么给用户组赋权限

要给用户组赋予权限,在Linux中可以使用chmod命令。以下是赋予用户组权限的步骤:打开终端并以root用户身份登录。使用以下命令来给用户组赋予权限:chmod 在上述命令中,将"“替换为您想要赋
linux怎么给用户组赋权限
2024-02-29

oracle赋权给某用户的方法是什么

Oracle数据库中给用户赋权的方法主要包括以下几种:使用GRANT命令:使用GRANT命令可以将特定的权限授予给用户,语法如下:GRANT 权限列表 TO 用户名;例如,将SELECT权限赋予给用户test:GRANT SELECT
oracle赋权给某用户的方法是什么
2024-03-04

mysql如何给用户赋予权限

在MySQL中,给用户赋予权限可以通过以下步骤实现:登录MySQL数据库:mysql -u root -p创建新用户:CREATE USER 'username'@'host' IDENTIFIED BY 'password';其中,use
mysql如何给用户赋予权限
2024-04-17

linux如何给用户赋予文件夹权限

在Linux系统中,可以使用chmod命令赋予用户文件夹权限。以下是一些常见的权限参数:- `u`:用户- `g`:用户组- `o`:其他用户- `a`:所有用户可以使用以下命令来赋予用户文件夹权限:```chmod [权限参数][权限设置
2023-09-05

MySQL怎么给用户赋予创建视图的权限

要给用户赋予创建视图的权限,首先需要确保你具有足够的权限来执行此操作。然后可以按照以下步骤进行操作:1. 使用管理员账户登录到MySQL数据库。2. 执行以下命令以授予用户创建视图的权限:```GRANT CREATE VIEW ON da
2023-10-12

linux如何给用户赋予文件夹读写权限

要给用户赋予文件夹的读写权限,可以使用chmod命令。1. 打开终端,使用cd命令导航到要修改权限的文件夹所在的目录。2. 使用ls -l命令查看文件夹当前的权限设置。例如,如果要给文件夹"folder"赋予读写权限,可以运行以下命令:ls
2023-09-11

mysql中grant all privileges on赋给用户远程权限方式

目录mysql grant all privileges on赋给用户远程权限mysql授权语句说明grant all privileges、创建用户、删除用户总结mysql grant all privileges on赋给用户远程权限
2023-04-27

mysql中grant all privileges on赋给用户远程权限方式

这篇文章主要介绍了mysql中grant all privileges on赋给用户远程权限方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-18

mysql创建用户并赋权

1.创建用户 CREATE USER  "user_name"@"host"  IDENTIFIED BY  "password"; user_name:要创建用户的名字。 host:表示要这个新创建的用户允许从哪台机登陆,如果只允许从本机登陆,则 填 ‘lo
2021-01-09

oracle如何授权表权限给用户

要授予用户对表的权限,可以使用Oracle的GRANT语句。下面是一些常见的授权表权限的示例:授予用户SELECT权限:GRANT SELECT ON table_name TO username;授予用户INSERT权限:GRANT IN
oracle如何授权表权限给用户
2024-04-09

编程热搜

目录