当前位置: 首页 > 知识库问答 >
问题:

无法连接到内核化集群中的带有火花JDBC的Hive服务器

井修雅
2023-03-14

我尝试从一个配置单元(配置单元n°1)读取数据,并将结果写入另一个配置单元(配置单元n°2)(它们来自两个不同的集群)。我不能使用单个spark会话连接到两个配置单元,因此我将使用jdbc读取数据,并使用spark配置单元上下文写入数据。

两个集群都使用kerberos,Knox,ranger。

THS批火花将在蜂巢n°2上运行

这是我的主要错误:

GSSException:未提供有效凭据(机制级别:找不到任何Kerberos tgt)

我已经尝试过的:

  • 我可以使用直线命令连接到蜂巢服务器,使用动物园管理员发现模式,也可以使用直接超文本传输协议。
beeline -u "jdbc:hive2://<hiveServer2Host>:<Port>/<db>;transportMode=http;httpPath=cliservice;ssl=true;sslTrustStore=truststore.jks;trustStorePassword=<psw>;principal=<hive server 2 principal>;"

我的代码:

String url = "jdbc:hive2://<hiveServer2Host>:<Port>/<db>;transportMode=http;httpPath=cliservice;ssl=true;sslTrustStore=truststore.jks;trustStorePassword=<psw>;principal=<hive server 2 principal>";
String table = "test";
Properties connectionProperties = new Properties();
Dataset<Row> testDS= spark.read().jdbc(url, table, connectionProperties);
testDS.show();

我尝试在JDBC之前添加一些手动keberos连接:

org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration();
conf.set("fs.hdfs.impl", DistributedFileSystem.class.getName());
conf.set("hadoop.security.authentication", "kerberos");
conf.set("hadoop.rpc.protection", "privacy");
UserGroupInformation.setConfiguration(conf);
UserGroupInformation.loginUserFromKeytab(args[0], args[1]);
System.out.println("login with: " + UserGroupInformation.getLoginUser());
System.out.println("Current User:" + UserGroupInformation.getCurrentUser());

我很确定(在火花日志):

登录:A@XXX.LOCAL(授权:KERBEROS)

当前用户:A(认证:SIMPLE)

在spark提交之前,我还做了一个kinit:

kinit -kt <A_keytabs> <A principal> 

克莱斯特很好

我试图在spark submit中添加--keytab和--principal,但这并没有改变什么。

只有与JDBC的连接出现问题,否则我会访问HDFS资源,Kafka主题。。。

我还尝试在java模式下通过zookeeper发现连接到JDBC,但这不起作用。

java.sql.SQLExc0019:无法打开ZooKeeper中任何服务器URI的客户端传输:无法从ZooKeeper读取HiveServer2配置

我使用HDP 2.6.4,Java8,火花2.2.1

更新:Samson回复后:

我添加jass和KBR属性到系统:

System.setProperty("java.security.auth.login.config", spark_jaas.conf);
System.setProperty("sun.security.jgss.debug", "true");
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
System.setProperty("java.security.krb5.realm", <realm from krb5.conf>);
System.setProperty("java.security.krb5.kdc", <kdc from krb5.conf>);

我的应用程序没有崩溃,但我得到了这个错误。

GSSException:未提供有效凭据(机制级别:尝试获取新的启动凭据失败!(null))

搜索主题KerberosV5 INIT Cred(

共有1个答案

梁嘉祥
2023-03-14

试着用这个。我假设你在spark submit中通过了principal和keytab

val principal: String = sparkSession.sparkContext.getConf.get("spark.yarn.principal")
val keytab: String = sparkSession.sparkContext.getConf.get("spark.yarn.keytab")
UserGroupInformation.loginUserFromKeytab(principal, keytab);

让我知道它是否有效。

 类似资料:
  • 我正在研究建立一个JDBC Spark连接,以便从r/Python使用。我知道和都是可用的,但它们似乎更适合交互式分析,特别是因为它们为用户保留了集群资源。我在考虑一些更类似于Tableau ODBC Spark connection的东西--一些更轻量级的东西(据我所知),用于支持简单的随机访问。虽然这似乎是可能的,而且有一些文档,但(对我来说)JDBC驱动程序的需求是什么并不清楚。 既然Hiv

  • 我的节点应用程序向我发送了这样一条消息:“无法连接到MongoDB Atlas群集中的任何服务器。请确保您当前的IP地址在Atlas群集中的IP白名单上。”。 我已经添加了我当前的IP地址以及IP白名单上的0.0.0.0。 下面是错误消息的图片和我编写的连接它的代码。我是node.js和mongoDB的新手。我查看了这里的所有解决方案,但没有一个能够解决这个问题。 这是我在运行nodemon后收到

  • 我有一个问题,我试图解决了很长一段时间。我正试图通过从连接到Mongo Atlas云。这不是我第一次,但我就是找不到答案。 猫鼬版本:5.9.22 这是我的代码: 我的白名单设置仅包括0.0.0.0/0我在数据库访问中的用户名和密码非常简单,没有任何特殊字符,但总是出现相同的错误: 谢谢。

  • 我试图在我本地minikube集群上的一个简单示例中使用fabric8io/kubernetes-client,在这里我获得了一个pod的IP 是完成执行的pod的名称,如果执行则可见。 是一个kubernetes API主机,我从中获得该主机。 MiniKube只有1个节点。 Fabric8IO/Kubernetes-客户端版本为4.9.1 Java 11 我将此代码作为作业部署在的同一集群上。

  • 我使用node创建了一个RESTAPI,并使用Kubernetes和Docker对其进行了容器化。出于开发目的,kubernetes吊舱在minikube环境中运行。 该应用程序运行良好,现在给出了以下错误。 该问题似乎是MongoDB连接URL/Access问题,但连接字符串是正确的。(使用MongoDB Cloud支持仔细检查)。每个人都有相关的网络访问权限 我还可以确认可以使用相同的连接UR

  • null NewJenkins.Values具有以下特性。 报告的错误是。 我在谷歌上搜索了一段时间,很多网站都提到了服务帐户设置,但没有任何工作。 还有别的步骤吗?