【问题标题】:Submitting spark Jobs over livy using curl使用 curl 在 livy 上提交 spark Jobs
【发布时间】:2019-09-02 09:40:33
【问题描述】:

我正在通过 Curl 在 livy (0.6.0) 会话中提交 Spark 作业

jobs 是一个很大的 jar 文件,它扩展了 Job 接口,就像这样: https://stackoverflow.com/a/49220879/8557851

实际上在使用此 curl 命令运行此代码时:

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 Nullpointer异常,如下图

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 中运行作业

【问题讨论】:

    标签: scala apache-spark livy


    【解决方案1】:

    我使用了 livy REST apis,并且有两种方法可以提交 spark 作业。请参考 rest api docs,您将得到公平的理解 livy 的休息请求。:

    1.批次(/批次):
    您提交请求,您将获得工作 ID。根据作业 ID,您轮询 Spark 作业的状态。在这里您可以选择执行 uber jar 以及代码文件,但我从未使用过后者

    2。会话 (/sessions/sessions/{sessionId}/statements):
    您将 Spark 作业作为代码提交,无需创建 uber jar。在这里,您首先创建一个 Session,并在此会话中执行 Statement/s(实际代码)

    对于这两种方法,如果您查看文档,它对相应的休息请求和请求正文/参数有很好的解释。

    示例/示例为herehere

    更正您的代码:

    批次

    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
    

    【讨论】:

    • 像上面的例子一样发送工作怎么样,我不能每次都通过 curl 发送代码,这就是为什么我有一个 jar 问题是如何让那个 jar 工作
    • @AhmedAdnaneA'mil:我认为从我提到的方法中可以很清楚地看到。如果你想采用 uber jar 方式,请参考 Batch 方法,同时提供 curl 示例。
    • 您的评论提供了很多信息,但它没有回答提出的问题,即使使用批处理命令,问题仍然存在,我认为问题在于 jar 文件,关于我应该如何编译我的任何想法jar / 编写我的代码
    • 我可以使用 JAR 文件的 s3 路径吗?
    • 谢谢@Kode。原来我的问题实际上与 [LIVY-636] 有关。我需要从 jar 的程序集中省略 scala 本身。
    【解决方案2】:

    正如上面提到的@yegeniy,问题来自LIVY-636,您需要在没有Scala 库的情况下构建Jar,一切都会顺利进行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      • 2019-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多