Scala 使用curl在livy上提交spark作业
我正在通过Curl提交livy 0.6.0会话上的spark作业 作业是一个大jar文件,它扩展了作业接口,如下所示: 实际上,使用此curl命令运行此代码时:Scala 使用curl在livy上提交spark作业,scala,apache-spark,livy,Scala,Apache Spark,Livy,我正在通过Curl提交livy 0.6.0会话上的spark作业 作业是一个大jar文件,它扩展了作业接口,如下所示: 实际上,使用此curl命令运行此代码时: curl -X POST -d '{"kind": "spark","files":["/config.json"],"jars":["/myjar.jar"],"driverMemory":"512M","executorMemory":"512M"}' -H "Content-Type: application/json" loc
curl -X POST -d '{"kind": "spark","files":["/config.json"],"jars":["/myjar.jar"],"driverMemory":"512M","executorMemory":"512M"}' -H "Content-Type: application/json" localhost:8998/sessions/
当涉及到代码时,它与上面显示的答案完全相同:
package com.mycompany.test
import org.apache.livy.{Job, JobContext}
import org.apache.spark._
import org.apache.livy.scalaapi._
object Test extends Job[Boolean]{
override def call(jc: JobContext): Boolean = {
val sc = jc.sc
sc.getConf.getAll.foreach(println)
return true
}
至于错误,它是一个java空指针异常,如下所示
Exception in thread "main" java.lang.NullPointerException
at org.apache.livy.rsc.driver.JobWrapper.cancel(JobWrapper.java:90)
at org.apache.livy.rsc.driver.RSCDriver.shutdown(RSCDriver.java:127)
at org.apache.livy.rsc.driver.RSCDriver.run(RSCDriver.java:356)
at org.apache.livy.rsc.driver.RSCDriverBootstrapper.main(RSCDriverBootstrapper.java:93)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:849)
at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:167)
at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:195)
at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:924)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:933)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
由于输出是开始在jar中运行作业,因此我使用了livy REST API,关于这一点,有两种方法可以提交spark作业。请参考rest api,您将公平理解livy rest请求: 1.批次: 提交请求后,您将获得作业id。根据作业id,您将轮询spark作业的状态。在这里,您可以选择执行uber jar以及代码文件,但我从未使用过后者 二,。Session/sessions和/sessions/{sessionId}/语句: 您将spark作业作为代码提交,无需创建uber jar。在这里,首先创建一个会话,在此会话中执行语句的实际代码 对于这两种方法,如果您查看文档,它会很好地解释相应的rest请求和请求主体/参数 示例/样本包括: 对代码的更正如下: 批处理 会议和发言
像上面的例子那样发送一个作业怎么样?我不能每次都通过curl发送代码,这就是为什么我有一个jar,问题是如何让这个jarwork@AhmedAdnaneA米利:我认为从我提到的方法来看,这是非常清楚的。如果你想使用uber jar方法,请参考批处理方法,并提供了相同的curl示例。你的评论提供了大量信息,但它没有回答所问的问题。即使使用批处理命令,问题仍然存在,我认为问题在于jar文件,你知道我应该如何编译我的jar/编写我的代码吗?我可以使用jar文件的s3路径吗?@Yegeny是的,你可以使用s3路径。
curl \
-X POST \
-d '{
"kind": "spark",
"files": [
"<use-absolute-path>"
],
"file": "absolute-path-to-your-application-jar",
"className": "fully-qualified-spark-class-name",
"driverMemory": "512M",
"executorMemory": "512M",
"conf": {<any-other-configs-as-key-val>}
}' \
-H "Content-Type: application/json" \
localhost:8998/batches/
// Create a session
curl \
-X POST \
-d '{
"kind": "spark",
"files": [
"<use-absolute-path>"
],
"driverMemory": "512M",
"executorMemory": "512M",
"conf": {<any-other-configs-as-key-val>}
}' \
-H "Content-Type: application/json" \
localhost:8998/sessions/
// Run code/statement in session created above
curl \
-X POST \
-d '{
"kind": "spark",
"code": "spark-code"
}' \
-H "Content-Type: application/json" \
localhost:8998/sessions/{sessionId}/statements