使用Kerberos的sparky-livy连接
我可以通过Livy服务从远程Rstudio桌面(windows)连接到非Kerberized spark cluster,而不会出现问题 但是,如果启用了Kerberos安全性,则连接将失败:使用Kerberos的sparky-livy连接,r,kerberos,sparklyr,livy,R,Kerberos,Sparklyr,Livy,我可以通过Livy服务从远程Rstudio桌面(windows)连接到非Kerberized spark cluster,而不会出现问题 但是,如果启用了Kerberos安全性,则连接将失败: library(sparklyr) sc <- spark_connect("http://host:8998", method = "livy") 使用Sparkyr_0.5.6-9002和MIT Kerberos for Windows进行身份验证 另一方面,从集群内部(即通过curl)连接成
library(sparklyr)
sc <- spark_connect("http://host:8998", method = "livy")
使用Sparkyr_0.5.6-9002和MIT Kerberos for Windows进行身份验证
另一方面,从集群内部(即通过curl
)连接成功
我做错了什么?这种连接需要哪些附加设置
livy_config(…,用户名,密码)
config似乎只形成了一个Authorization:Basic…
头,尽管我怀疑这里应该需要一个agreement
或Kerberos
(?)
我还缺少其他可能的配置吗
注意:在与授权用户一起从shell调用
kinit
”后,RStudio服务器(web)返回相同的错误 我参加聚会要迟到了,但我也遇到了同样的问题,终于解决了。这可能对其他人有用
当然,这在很大程度上取决于集群配置。我使用的是SparkyR1.5.0和MIT Kerberos for Windows,直接连接到运行在Cloudera HDP集群(Spark 2.3.0)中的Livy(无Knox代理)。在我的例子中,需要一个额外的HTTP头,请参见下文
如果您的集群不允许传出internet连接,您还应该首先将Sparkyr服务器端jar保存在HDFS上(默认情况下,它是从GitHub自动下载的)
库(年)
SPARK_VERSION=“2.3.0”
lcfg=livy_配置(
协商=正确,
自定义标题=列表(“X-request-By”=“”)
lcfg$sparklyr.livy.jar=”hdfs:///path/to/sparklyr-2.3-2.11.jar"
sc=火花塞连接(
主人=”http://livyserver:8999“,method=“livy”,
版本=SPARK\u版本,
配置=lcfg)
对于调试,第一步可能是在集群外测试Livy设置,但不使用R:请参见应为启动配置Livy服务器,身份验证如下。在Livy.conf文件中,应将Livy.server.launch.kerberos.principal=XXX
,Livy.server.launch.kerberos.keytab=XXX
,livy.server.auth.kerberos.principal='XXX',
livy.server.auth.kerberos.keytab=spnego keytab`。请参考@KangrokLee,谢谢您的回复!livy已正确配置(我可能忘了在文章中提到,将进行编辑),您建议的设置已设置,并且livy在集群内工作正常(即从RStudio服务器或curl)。试图从Windows上的远程Rstudio桌面进行连接时,出现了上述问题。您是否可以正常工作?@ansek否,不是直接通过Kerberos。然而,解决办法是通过连接。通过这种方式,Kerberos由集群内的Knox处理,而从远程Rstudio桌面客户端只需要Basic
身份验证(这是通过SSL进行的,所以看起来不太糟糕)。请注意,在我的情况下,它还需要对Sparkyr
的源代码进行一些小的调整,但不确定是否使用最新的更新进行了修复。看起来很有希望,我一有机会就会尝试!请注意,您是否可以直接访问Kerberos服务器?我后来注意到,通过ssh隧道(主机文件中有正确的fqdn)使用Kerberos时会出现许多问题,这有时会导致GSS协商出现问题。我使用的是VPN,没有ssh隧道,因此无法说明有关该问题的任何信息
Error in livy_validate_http_response("Failed to create livy session", :
Livy operation is unauthorized. Try spark_connect with config = livy_config()
library(sparklyr)
SPARK_VERSION = "2.3.0"
lcfg = livy_config(
negotiate = TRUE,
custom_headers = list("X-Requested-By"="<user_name>"))
lcfg$sparklyr.livy.jar = "hdfs:///path/to/sparklyr-2.3-2.11.jar"
sc = spark_connect(
master = "http://livyserver:8999", method = "livy",
version = SPARK_VERSION,
config = lcfg)