与Kerberos的sparklyr livy连接

时间:2017-06-23 09:24:49

标签: r kerberos sparklyr livy

我可以通过Livy服务连接到非Kerberized spark群集,而不会出现远程 Rstudio桌面(windows)的问题。

但是,如果启用了Kerberos安全性,则连接将失败:

library(sparklyr)
sc <- spark_connect("http://host:8998", method = "livy")

返回

Error in livy_validate_http_response("Failed to create livy session",  : 
Livy operation is unauthorized. Try spark_connect with config = livy_config()

使用sparklyr_0.5.6-9002和MIT Kerberos for Windows进行身份验证。

另一方面,从 in 群集(即通过curl)连接成功。

我做错了什么?此类连接需要哪些其他设置?

livy_config(..., username, password)配置似乎只构成了Authorization: Basic ...标头,但我怀疑应该要求NegotiateKerberos(?) 。

我还缺少其他可能的配置吗?

注意:在具有授权用户的shell kinit之后,从RStudio Server(Web)返回相同的错误。

1 个答案:

答案 0 :(得分:1)

我来晚了,但是我遇到了同样的问题,终于解决了。这可能对其他人有用。

当然,这可能很大程度上取决于您的集群配置。我正在使用sparklyr 1.5.0和Windows的MIT Kerberos,并直接连接到在Cloudera HDP集群(Spark 2.3.0)中运行的Livy(无Knox代理)。就我而言,需要额外的HTTP标头,请参见下文。

如果您的群集不允许传出互联网连接,则还应该首先将SparklyR服务器端jar保存在HDFS上(默认情况下会自动从GitHub下载)。

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)

对于调试,第一步可能是在集群外部但没有R的情况下测试Livy设置:请参见https://livy.apache.org/examples/