Как исправить приглашение Keberos Authentication при запуске приложения Java - PullRequest
0 голосов
/ 24 апреля 2019

Я написал Java-приложение для соединения с hive-metastore.Он работает нормально, но когда я запускаю jar-файл в Linux, он запрашивает имя пользователя и пароль Kerberos.Я уже указал основной код Kerberos и файл keytab в своем коде.И я не хочу использовать дополнительный файл jass.config.Есть ли способ решить эту проблему?

Вот мой исходный код

    HiveConf conf = new HiveConf();
    MetastoreConf.setVar(conf, ConfVars.THRIFT_URIS, "thrift://HOSTNAME:9083");
    MetastoreConf.setBoolVar(conf, ConfVars.USE_THRIFT_SASL, true);
    MetastoreConf.setVar(conf, ConfVars.KERBEROS_PRINCIPAL, "hive/HOSTNAME@example.com");
    MetastoreConf.setVar(conf, ConfVars.KERBEROS_KEYTAB_FILE, "hive.keytab");
    System.setProperty("java.security.krb5.realm", "EXAMPLE.COM");
    System.setProperty("java.security.krb5.kdc", "HOSTNAME");
    System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
    HiveMetaStoreClient client = new HiveMetaStoreClient(conf);
    client.close();     

Ожидаемый результат - Это должно успешно проверить соединение

Фактический результат -

java -jar Приложение

Имя пользователя Kerberos [root]: Пароль Kerberos [root]:

Я хочу обойти аутентификацию в терминале Kerberos.Есть ли способ сделать это?

1 Ответ

0 голосов
/ 13 мая 2019
          final String user = "hive/HOSTNAME@EXAMPLE.COM";
          final String keyPath = "hive.keytab";
          Configuration conf = new Configuration();
          System.out.println("In case of kerberos authentication");
          conf.set("hadoop.security.authentication", "kerberos");
          System.setProperty("java.security.krb5.kdc", "HOSTNAME");
          System.setProperty("java.security.krb5.realm", "EXAMPLE.COM");

          UserGroupInformation.setConfiguration(conf);
          UserGroupInformation.loginUserFromKeytab(user, keyPath);

          HiveConf conf1 = new HiveConf(); MetastoreConf.setVar(conf1,
          ConfVars.THRIFT_URIS, "thrift://HOSTNAME:9083"); HiveMetaStoreClient
          client = new HiveMetaStoreClient(conf1);
          client.close();

Теперь работает нормально

...