分享

Hbase之AccessDeniedException: Insufficient permissions for user 'Administrator'

jttsai 2014-9-5 13:40:45 发表于 异常错误 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 6 57956
Hbase代码如下:
@Test
        public void testCreateTable() throws Exception {
                HBaseAdmin admin = new HBaseAdmin(conf);
                if (admin.tableExists("test2")) {
                        System.out.println("test2表名已经存在");
                }
                HTableDescriptor htbDesc = new HTableDescriptor(
                                TableName.valueOf("test2"));
                HColumnDescriptor hColumnDescriptor = new HColumnDescriptor("info");
                htbDesc.addFamily(hColumnDescriptor);
                admin.createTable(htbDesc);
                admin.close();
        }

运行Hbase代码报如下错误:
org.apache.hadoop.hbase.security.AccessDeniedException: org.apache.hadoop.hbase.security.AccessDeniedException: Insufficient permissions for user 'Administrator' (global, action=CREATE)
        at org.apache.hadoop.hbase.security.access.AccessController.requireGlobalPermission(AccessController.java:439)
        at org.apache.hadoop.hbase.security.access.AccessController.preCreateTable(AccessController.java:551)
        at org.apache.hadoop.hbase.master.MasterCoprocessorHost.preCreateTable(MasterCoprocessorHost.java:216)
        at org.apache.hadoop.hbase.master.HMaster.createTable(HMaster.java:1746)
        at org.apache.hadoop.hbase.master.HMaster.createTable(HMaster.java:1779)
        at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java:38221)
        at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2175)
        at org.apache.hadoop.hbase.ipc.RpcServer$Handler.run(RpcServer.java:1879)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:106)
        at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:95)
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.translateException(RpcRetryingCaller.java:212)
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.translateException(RpcRetryingCaller.java:223)
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:127)
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:96)
        at org.apache.hadoop.hbase.client.HBaseAdmin.executeCallable(HBaseAdmin.java:3214)
        at org.apache.hadoop.hbase.client.HBaseAdmin.createTableAsync(HBaseAdmin.java:595)
        at org.apache.hadoop.hbase.client.HBaseAdmin.createTable(HBaseAdmin.java:486)
        at org.apache.hadoop.hbase.client.HBaseAdmin.createTable(HBaseAdmin.java:420)
        at com.jttsai.get.GetDemo.testCreateTable(GetDemo.java:34)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.security.AccessDeniedException): org.apache.hadoop.hbase.security.AccessDeniedException: Insufficient permissions for user 'Administrator' (global, action=CREATE)
        at org.apache.hadoop.hbase.security.access.AccessController.requireGlobalPermission(AccessController.java:439)
        at org.apache.hadoop.hbase.security.access.AccessController.preCreateTable(AccessController.java:551)
        at org.apache.hadoop.hbase.master.MasterCoprocessorHost.preCreateTable(MasterCoprocessorHost.java:216)
        at org.apache.hadoop.hbase.master.HMaster.createTable(HMaster.java:1746)
        at org.apache.hadoop.hbase.master.HMaster.createTable(HMaster.java:1779)
        at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java:38221)
        at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2175)
        at org.apache.hadoop.hbase.ipc.RpcServer$Handler.run(RpcServer.java:1879)

        at org.apache.hadoop.hbase.ipc.RpcClient.call(RpcClient.java:1449)
        at org.apache.hadoop.hbase.ipc.RpcClient.callBlockingMethod(RpcClient.java:1653)
        at org.apache.hadoop.hbase.ipc.RpcClient$BlockingRpcChannelImplementation.callBlockingMethod(RpcClient.java:1711)
        at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$BlockingStub.createTable(MasterProtos.java:40372)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$5.createTable(HConnectionManager.java:1907)
        at org.apache.hadoop.hbase.client.HBaseAdmin$2.call(HBaseAdmin.java:599)
        at org.apache.hadoop.hbase.client.HBaseAdmin$2.call(HBaseAdmin.java:595)
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:120)
        ... 29 more




求指导啊,在线等,,Hbase如何制定提交的用户啊?。。。。

已有(6)人评论

跳转到指定楼层
pig2 发表于 2014-9-5 14:40:54
仔细检查下自己的程序,存在不少问题。还有你是怎么连接hbase的,都需要贴出来。你的环境是什么?

private static void createTable() throws MasterNotRunningException,
                        ZooKeeperConnectionException, IOException {

                HBaseAdmin admin = new HBaseAdmin(conf);// 新建一个数据库管理员//新api
                if (admin.tableExists(TableName.valueOf("LogTable"))) {
                        System.out.println("table is not exist!");
                        System.exit(0);
                } else {

                        HTableDescriptor desc = new HTableDescriptor(
                                        TableName.valueOf("blog"));
                        desc.addFamily(new HColumnDescriptor("article"));

                        admin.createTable(desc);
                        admin.close();
                        System.out.println("create table Success!");
                }
        }

回复

使用道具 举报

fuanlong 发表于 2014-9-5 16:03:12
grant 'Administrator', 'RWCA'
回复

使用道具 举报

jttsai 发表于 2014-9-5 16:55:06
fuanlong 发表于 2014-9-5 16:03
grant 'Administrator', 'RWCA'

hbase代码中可不可以制定用户,比如指定hbase用户,应该怎么指定?代码应该怎么写?
回复

使用道具 举报

jttsai 发表于 2014-9-9 13:52:31
pig2 发表于 2014-9-5 14:40
仔细检查下自己的程序,存在不少问题。还有你是怎么连接hbase的,都需要贴出来。你的环境是什么?

priv ...

其他的都没有错,就像下面的人回复的,grant 'Administrator', 'RWCA',但是我不需要在hbase集群中这样设置,我需要在代码中指定用户,应该怎么指定?
回复

使用道具 举报

fuanlong 发表于 2014-9-9 14:41:30
代码示例,供参考。
Object ret = null;
                try {
                        ret =  UserGroupInformation.createRemoteUser("admin").doAs(new PrivilegedExceptionAction<Object>() {
                                @Override
                                public Object run() throws Exception {
                                    return getScanner(HBaseTools.tp.getTable(tableName), scan);
                                }
                        });
                } catch (InterruptedException e) {
                        e.printStackTrace();
                }
回复

使用道具 举报

Riordon 发表于 2016-11-2 18:42:51
jttsai 发表于 2014-9-9 13:52
其他的都没有错,就像下面的人回复的,grant 'Administrator', 'RWCA',但是我不需要在hbase集群中这样设 ...

兄弟,问题解决没,怎么在API中更改运行用户?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条