JAVA连接kerberos认证的Metastore

JAVA连接kerberos认证的Metastore

登陆kerberos认证

try {
            //登录kerberos
            String krb5File = paraConfig.getValue("Kerberos.krb5");
            String keyUser = paraConfig.getValue("Kerberos.keyuser");
            String keyPath = paraConfig.getValue("Kerberos.keyPath");
            String keyPrincipal = paraConfig.getValue("Kerberos.keyPrincipal");
            System.out.println("开始登录kerberos: user: " + keyUser + ", file: " + keyPath + ",keyPrincipal: " + keyPrincipal);

            //可以直接在启动脚本里面设置 export xxx=xxx
            System.setProperty("java.security.krb5.conf", krb5File);
            System.setProperty("krb.principal", keyUser);
            System.out.println("设置系统参数完成" + krb5File + keyUser);
            Configuration conf = new Configuration();
            conf.set("hadoop.security.authentication", "kerberos");
            conf.set("kerberos.principal", keyPrincipal);
            UserGroupInformation.setConfiguration(conf);
            UserGroupInformation.loginUserFromKeytab(keyUser, keyPath);
            System.out.println("登录kerberos成功! kerberos user: " + UserGroupInformation.getCurrentUser());
            return true;
        } catch (Throwable ex) {
            System.out.println("登录失败原因" + ex);
            return false;
        } finally {
            System.out.println("LOG END");
        }

登陆metastore

//此处会自动加载配置路径中的hive-site.xml文件;按理说配置会被覆盖掉,但是我自己的配置文件没有被代码覆盖掉;导致报错;懂得老哥指导一下
HiveConf conf = new HiveConf();
        String value = config.getValue("HiveMetaStore.Principal");
        String sasl = config.getValue("HiveMetaStore.Sasl");
        String timeOut = config.getValue("HiveMetaStore.Timeout");
        String urls = config.getValue("HiveMetaStore.Uris");
        String retryDelay = config.getValue("HiveMetaStore.RetryDelay");
        LOG.info(String.format("参数为 %s====%s=====%s====%s====%s",value,sasl,timeOut,urls,retryDelay));

        conf.setVar(HiveConf.ConfVars.METASTORE_KERBEROS_PRINCIPAL, value);
        conf.setVar(HiveConf.ConfVars.METASTORE_USE_THRIFT_SASL, sasl);
        conf.setVar(HiveConf.ConfVars.METASTORE_CLIENT_SOCKET_TIMEOUT, timeOut);
        conf.setVar(HiveConf.ConfVars.METASTOREURIS, urls);
        conf.setVar(HiveConf.ConfVars.METASTORE_CLIENT_CONNECT_RETRY_DELAY, retryDelay);

        DBName = config.getValue("Test.DBName", "probe_test");
        tableName = config.getValue("Test.TableName", "person_test");
        mode = Integer.parseInt(config.getValue("Test.Mode", "1"));

        client = new HiveMetaStoreClient(conf);

启动的脚本指定一下HADOOP_HOME;
hdfs文件有用户管控的话指定一下HADOOP_USER即可;

配置文件如下:

#mode 1:չʾDB£»2½¨¿â ½¨±í 4 ɾ¿âɾ±í
Test.Mode=7
Test.DBName=test_probe_se
Test.TableName=test_person

#hive
HiveMetaStore.Sasl=true
HiveMetaStore.Timeout=50
HiveMetaStore.Uris=thrift://172.26.54.7:9083
HiveMetaStore.RetryDelay=5s

# kerberos
Kerberos.krb5=
Kerberos.keyuser=
Kerberos.keyPath=
Kerberos.keyPrincipal=
HiveMetaStore.Principal=

个人建议打包一定不要把hive-site.xml打进包里;血的教训;
指定或者使用代码配置;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Java API连接使用Kerberos认证的Elasticsearch集群,你需要遵循以下步骤: 1. 首先,你需要为你的Java应用程序配置Kerberos认证。这可以通过在你的应用程序中使用JAAS(Java Authentication and Authorization Service)框架来完成。 2. 然后,你需要在Elasticsearch集群中启用Kerberos认证。这可以通过在elasticsearch.yml配置文件中设置以下属性来完成: ``` xpack.security.authc.realms: kerberos.kerb1: type: kerberos order: 0 krb5_file_path: /path/to/krb5.conf keytab_path: /path/to/elasticsearch.keytab ``` 其中,`krb5_file_path`是指向Kerberos配置文件的路径,`keytab_path`是指向Elasticsearch服务的keytab文件路径。 3. 接下来,你需要使用Java API创建一个Elasticsearch客户端,并使用Kerberos认证进行身份验证。以下是一个示例代码: ``` public class KerberosESClient { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); conf.setBoolean("hadoop.security.authentication", true); UserGroupInformation.setConfiguration(conf); UserGroupInformation.loginUserFromKeytab("your_principal", "/path/to/your/keytab"); Settings settings = Settings.builder() .put("cluster.name", "your_cluster_name") .put("xpack.security.user", "your_username:your_password") .put("client.transport.sniff", true) .build(); TransportClient client = new PreBuiltXPackTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("your_es_host"), 9300)); SearchResponse response = client.prepareSearch().execute().actionGet(); client.close(); } } ``` 在上面的代码中,`UserGroupInformation`类用于从指定的keytab文件中获取Kerberos凭证,然后使用这些凭证创建一个Elasticsearch客户端。`Settings`类用于配置一些连接参数,例如集群名称、节点授权信息等。`TransportClient`类用于实现与Elasticsearch节点的通信,可以使用`prepareSearch`方法发送一个查询请求并获取结果。 希望这个回答能够帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值