HBase源码分析之用户

本文深入探讨了HBase的用户机制,包括默认的超级用户配置和如何更改用户。HBase默认使用启动HBase的系统用户作为超级用户,可通过hbase.superuser配置项进行修改。在创建Connection时,HBase会利用LoginContext和Module Stack中的UnixLoginModule及UserGroupInformation$HadoopLoginModule来获取和设置用户信息。用户可通过切换操作系统用户、设置HADOOP_USER_NAME系统环境变量或JavaVM System Properties来改变HBase操作用户。
摘要由CSDN通过智能技术生成


HBase的用户机制和Hadoop的用户机制是一样的。但对刚接触的人来说,相当的隐蔽,启动HBase不用设置用户名、密码,连接HBase也不需要设置用户名、密码。但HBase(实质上是Hadoop)提供了默认的用户来执行操作。

  1. 超级用户
    如果没有特意配置,那么HBase会选择启动HBase的系统用户作为超级用户。如果需要改变超级用户,可通过修改hbase-site.xml来配置,加入hbase.superuser。
<property>
  <name>hbase.superuser</name>
  <value>admin</value>
</property>
  1. 默认用户
    默认用户也类似,在没有特意配置时,HBase会选择当前的系统用户作为HBase的用户,改变默认用户隐藏的比较深,我们从代码来看。
分析源码

在创建Connection时,会判断是否已经创建了用户,如果没有,会调用LoginContext的login()方法来创建。中间的调用就直接跳过了,想详细看的可以参照以下堆栈信息。


在login方法中,按顺序反射调用了LOGIN_METHOD(login())和COMMIT_METHOD(commit()),中间啰嗦的代码就...跳过了,抓住重点看:

public void login() throws LoginException {
    ...
    try {
        // 分别反射调用了login和commit方法
        invokePriv(LOGIN_METHOD);
        invokePriv(COMMIT_METHOD);
        ...
    } catch (LoginException le) {
        ...
    }
}

invokePriv方法是invoke方法的带权限执行,主要看invoke方法。在invoke方法中,遍历module stack中的元素,对里面的每个元素反射执行login和commit方法。Module Stack中有两个元素,UnixLoginModuleUserGroupInformation$HadoopLoginModule。实际执行的顺序就是:

  1. UnixLoginModule#login
  2. UserGroupInformation$HadoopLoginModule#login
  3. <
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值