HBase Master启动认证kerberos失败&问题解决

本文记录了在Kerberos环境下启动HBase遇到的问题及详细错误日志,并提供了手动创建/hbase-secure节点的解决方案。

1. 问题复原

在kerberos环境下启动HBase时,包如下错误:

2018-03-29 11:59:12,828 INFO  [main-SendThread(hadoop2497.jd.163.org:2181)] zookeeper.ClientCnxn: Socket connection established to hadoop2497.jd.163.org/10.196.67.44:2181, initiating session
2018-03-29 11:59:12,837 INFO  [main-SendThread(hadoop2497.jd.163.org:2181)] zookeeper.ClientCnxn: Session establishment complete on server hadoop2497.jd.163.org/10.196.67.44:2181, sessionid = 0x2621ecd5e1a0165, negotiated timeout = 40000
2018-03-29 11:59:12,861 ERROR [main] master.HMasterCommandLine: Master exiting
java.lang.RuntimeException: Failed construction of Master: class org.apache.hadoop.hbase.master.HMaster. 
        at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:2512)
        at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:231)
        at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:137)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:126)
        at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:2522)
Caused by: org.apache.hadoop.hbase.ZooKeeperConnectionException: master:16000-0x2621ecd5e1a0165, quorum=hadoop2496.jd.163.org:2181,hadoop2497.jd.163.org:2181,hadoop2498.jd.163.org:2181, baseZNode=/hbase-secure Unexpected KeeperException creating base node
        at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.createBaseZNodes(ZooKeeperWatcher.java:206)
        at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:187)
        at org.apache.hadoop.hbase.regionserver.HRegionServer.<init>(HRegionServer.java:572)
        at org.apache.hadoop.hbase.master.HMaster.<init>(HMaster.java:412)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:2505)
        ... 5 more
Caused by: org.apache.zookeeper.KeeperException$InvalidACLException: KeeperErrorCode = InvalidACL for /hbase-secure
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:121)
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
        at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:783)
        at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.createNonSequential(RecoverableZooKeeper.java:565)
        at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.create(RecoverableZooKeeper.java:544)
        at org.apache.hadoop.hbase.zookeeper.ZKUtil.createWithParents(ZKUtil.java:1204)
        at org.apache.hadoop.hbase.zookeeper.ZKUtil.createWithParents(ZKUtil.java:1182)
        at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.createBaseZNodes(ZooKeeperWatcher.java:194)
        ... 13 more

查看了下日志,使用keytab也登录成功了:

2018-03-29 11:59:12,180 INFO  [main] security.UserGroupInformation: Login successful for user hbase/atlas1.jd.163.org@HADOOP2.HZ.NETEASE.COM using keytab file /home/hadoop/yarn/conf/hbase.service.keytab

不清楚为什么在HBase启动的时候为何不能自动初始化/hbase-secure节点?

解决方案

手动创建带acl权限的/hbase-secure节点。

命令如下:

create /hbase-secure "" sasl:hbase:cdrwa

参考:
* https://community.hortonworks.com/articles/29900/zookeeper-using-superdigest-to-gain-full-access-to.html
* https://community.hortonworks.com/articles/90705/hive-llap-fails-with-invalidacl-for-llap-sasluser.html

### 三级标题:HBase中配置Kerberos认证验证步骤 在Hadoop生态系统中,HBase作为分布式数据库,其安全性尤为关键。为了保障HBase集群的访问安全,通常采用Kerberos协议进行身份认证。以下是完整的HBase集成Kerberos认证的配置流程及验证方式。 #### 配置Kerberos服务主体与Keytab文件 在Kerberos服务器节点(如node1)上执行命令,为每个HBase节点创建服务主体。例如: ```bash kadmin.local -q &quot;addprinc -pw 123456 hbase/node3&quot; kadmin.local -q &quot;addprinc -pw 123456 hbase/node4&quot; kadmin.local -q &quot;addprinc -pw 123456 hbase/node5&quot; ``` 随后将这些服务主体写入到keytab文件中,确保每个HBase节点拥有对应的服务凭据: ```bash kadmin.local -q &quot;ktadd -norandkey -kt /home/keytabs/hbase.service.keytab hbase/node3@EXAMPLE.COM&quot; kadmin.local -q &quot;ktadd -norandkey -kt /home/keytabs/hbase.service.keytab hbase/node4@EXAMPLE.COM&quot; kadmin.local -q &quot;ktadd -norandkey -kt /home/keytabs/hbase.service.keytab hbase/node5@EXAMPLE.COM&quot; ``` 将生成的`hbase.service.keytab`文件分发至各HBase节点的指定目录,并设置正确的权限[^4]。 #### 修改HBase配置文件启用Kerberos认证 编辑`hbase-site.xml`文件,添加以下配置以启用Kerberos认证: ```xml &lt;property&gt; &lt;name&gt;hbase.security.authentication&lt;/name&gt; &lt;value&gt;kerberos&lt;/value&gt; &lt;/property&gt; &lt;property&gt; &lt;name&gt;hbase.master.kerberos.principal&lt;/name&gt; &lt;value&gt;hbase/_HOST@EXAMPLE.COM&lt;/value&gt; &lt;/property&gt; &lt;property&gt; &lt;name&gt;hbase.regionserver.kerberos.principal&lt;/name&gt; &lt;value&gt;hbase/_HOST@EXAMPLE.COM&lt;/value&gt; &lt;/property&gt; &lt;property&gt; &lt;name&gt;hbase.rpc.engine&lt;/name&gt; &lt;value&gt;org.apache.hadoop.hbase.ipc.SecureRpcEngine&lt;/value&gt; &lt;/property&gt; ``` 完成配置后,将修改后的`hbase-site.xml`文件同步至所有HBase节点[^5]。 #### 启动验证Kerberos认证的有效性 完成上述配置后,重启HBase集群以应用更改。使用如下Java代码测试是否能够成功连接启用了Kerberos认证HBase环境: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Table; public class HBaseTest { public static void main(String[] args) throws IOException { Configuration config = HBaseConfiguration.create(); config.set(&quot;hbase.zookeeper.quorum&quot;, &quot;zkhost:2181&quot;); config.set(&quot;hbase.security.authentication&quot;, &quot;kerberos&quot;); try (Connection connection = ConnectionFactory.createConnection(config); Table table = connection.getTable(TableName.valueOf(&quot;test_table&quot;))) { System.out.println(&quot;Connected to HBase securely.&quot;); } } } ``` 该示例通过HBase Java客户端尝试建立安全连接,若输出&ldquo;Connected to HBase securely.&rdquo;则表示Kerberos认证已正确生效[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值