我可以通过 Livy 服务连接到非 Kerberized Spark集群,而不会出现来自远程Rstudio 桌面(Windows)的问题。
但是,如果启用了 Kerberos 安全性,连接将失败:
library(sparklyr)
sc <- spark_connect("http://host:8998", method = "livy")
Run Code Online (Sandbox Code Playgroud)
回来
Error in livy_validate_http_response("Failed to create livy session", :
Livy operation is unauthorized. Try spark_connect with config = livy_config()
Run Code Online (Sandbox Code Playgroud)
使用sparklyr_0.5.6-9002MIT Kerberos for Windows 进行身份验证。
在另一方面,从内群集(即,通过curl)连接成功。
我究竟做错了什么?这种连接需要哪些额外设置?
该livy_config(..., username, password)配置似乎只形成一个Authorization: Basic ...头,但这里笔者还是怀疑Negotiate或Kerberos(?)应该不是必需的。
我还缺少其他任何可能的配置吗?
注意:kinit在使用授权用户从 shell 运行后,从 RStudio Server (web) 返回相同的错误。
我正在尝试将 Python 文件提交给 REST API,但它总是给出错误。我正在使用本地模式,我正在运行的命令如下:
$curl -X POST --data '{"file":"/Users/neha/Desktop/spark_project/examples/spark_livy_ex3.py"}' -H "Content-Type: application/json" localhost:8998/batches
"requirement failed: Local path /Users/neha/Desktop/spark_project/examples/spark_livy_ex3.py cannot be added to user sessions."
Run Code Online (Sandbox Code Playgroud)
从这个链接https://groups.google.com/a/cloudera.org/forum/#!topic/livy-user/mm-XEhANDHU我发现我必须通过修改 livy.conf 来修改 livy.conf将 /Users/neha/Desktop/spark_project/examples/ 目录添加到 livy.file.local-dir-whitelist。我再次使用上面的 curl 命令运行代码,但现在我也遇到了同样的错误。
请注意,'spark_livy_ex3.py' 是我要运行的 python 文件。
我该如何解决这个问题?
我在https://github.com/apache/incubator-livy/blob/master/docs/rest-api.md 上为 Livy 的 REST API 的部分编写了一个 Java 客户端。客户端使用 Spring 的RestTemplate.getForObject()andpostForObject()分别发出 GET 和 POST 请求。Livy 服务器使用 Kerberos 进行保护。
GET /sessions和GET /batches请求工作正常:我得到了 Livy 的预期响应。但是POST /sessions和POST /batches请求都失败了:
org.springframework.web.client.HttpClientErrorException: 401 Authentication required
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么 GET 请求成功时 POST 请求失败?我的代码对身份验证没有做任何明确的事情。
我已经尝试通过 Kerberos 以几个不同的用户身份进行身份验证,但我总是遇到这个问题。Livy 是否需要额外的配置来允许来自特定用户的 POST 请求(因为 POST 请求有效地创建了交互式会话或将作业提交给 Spark)?
码:
public class PiApp
{
public static void main(String[] args) throws Exception {
LivyClient client = new LivyClientBuilder().setURI(new URI("http://localhost:8998/")).build();
try {
System.out.println("Uploading livy-example jar to the SparkContext...");
for (String s : System.getProperty("java.class.path").split(File.pathSeparator)) {
System.out.println("Enter to for");
if (new File(s).getName().startsWith("livy_1")) {
System.out.println("Enter to if");
client.uploadJar(new File(s)).get();
break;
}
}
final int slices = Integer.parseInt("2");
System.out.println("submitting");
try {
double pi = client.submit(new PiJob(slices)).get();
System.out.println("Pi is roughly " + pi);
} catch (Exception e) {
System.out.println("Enter to catch");
System.out.println(e.getMessage());
}
} finally { …Run Code Online (Sandbox Code Playgroud) 是否可以在同一AWS EMR集群中同时提交和运行Spark作业?如果是,那么请您详细说明一下?
amazon-web-services amazon-emr hadoop-yarn apache-spark livy
我通过 Livy 向集群提交 PySpark 作业。目前,NumPy、Pandas、Keras 等依赖的 python 包已安装在所有数据节点上。想知道是否所有这些包都可以集中存储在 HDFS 中,以及如何配置 Livy、PySpark 从 HDFS 而不是从该数据节点读取这些包。
我正在使用 Sparkmagic 内核 (spark-scala) 开发 Jupyter Notebooks,该内核依赖 Apache Livy 来运行 Spark 作业。
我目前正在尝试了解使用用户提供的依赖项(即 jar)创建会话的选项。
我知道在 Jupyter 中我可以做类似的事情:
%%configure -f
{"kind": "spark",
"executorMemory": "2G",
"executorCores": 4,
"jars": ["/path/to/library1.jar",
"/path/to/library2"]}
Run Code Online (Sandbox Code Playgroud)
但后来我注意到 中的其他选项LIVY_HOME/conf/livy.conf,特别是livy.resc.jars,livy.repl.jars但我相信这些描述不是很具体,或者我无法找到它们之间的实际区别。
我猜如果他们分开是为了某些事情,但到底是什么?
我正在使用Scala运行Spark作业,但由于工作节点无法执行和执行任务而陷入困境。
目前,我将此提交给Livy,后者将使用以下配置将其提交给我们的Spark集群,该集群具有8个内核和12GB RAM:
data={
'file': bar_jar.format(bucket_name),
'className': 'com.bar.me',
'jars': [
common_jar.format(bucket_name),
],
'args': [
bucket_name,
spark_master,
data_folder
],
'name': 'Foo',
'driverMemory': '2g',
'executorMemory': '9g',
'driverCores': 1,
'executorCores': 1,
'conf': {
'spark.driver.memoryOverhead': '200',
'spark.executor.memoryOverhead': '200',
'spark.submit.deployMode': 'cluster'
}
}
Run Code Online (Sandbox Code Playgroud)
然后,节点日志将被不断填充:
2019-03-29T22:24:32.119+0000: [GC (Allocation Failure) 2019-03-29T22:24:32.119+0000:
[ParNew: 68873K->20K(77440K), 0.0012329 secs] 257311K->188458K(349944K),
0.0012892 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
Run Code Online (Sandbox Code Playgroud)
我使用 Spark 和 Livy 在 AWS 上创建了一个 EMR 集群。我提交了一个带有一些附加库(例如自定义格式的数据源)的自定义 JAR 作为自定义 JAR 步骤。但是,当我尝试从 Livy 访问自定义 JAR 中的内容时,它不可用。
我需要做什么才能使自定义内容在环境中可用?
启动我的代码时
scala -cp assembly.jar class.A --config-path confFile
我得到
java.lang.IllegalStateException: No LivyClientFactory implementation was found
但是当通过 IntelliJ 启动时它工作得很好。我还检查了我的程序集 jar,我得到了 LivyClientFactory 的 .class。
我怀疑是 build.sbt 错误,有人知道为什么他找不到班级吗?
我尝试使用 assemblyMerge 策略,但没有成功。
ThisBuild / scalaVersion := "2.12.10"
crossPaths := true
crossScalaVersions := Seq("2.12.10")
def resolveVersion(scalaV: String, versionsResolver: Map[String, String]): String = versionsResolver(scalaV.slice(0, 4))
val sparkVersions = Map("2.11" -> "2.4.3", "2.12" -> "3.0.1")
val scalaTestVersions = Map("2.11" -> "3.2.1", "2.12" -> "3.2.5")
val livyVersions = Map("2.11" -> "0.7.0-incubating", "2.12" -> "0.8.0-incubating")
// dependencies
val commonDependencies = …Run Code Online (Sandbox Code Playgroud) livy ×10
apache-spark ×6
amazon-emr ×2
kerberos ×2
python ×2
scala ×2
apache ×1
hadoop ×1
hadoop-yarn ×1
java ×1
pyspark ×1
r ×1
sbt ×1
sbt-assembly ×1
sparklyr ×1
spring-rest ×1