>source

Curl을 통해 livy(0.6.0) 세션에서 스파크 작업을 제출하고 있습니다.

작업은 다음과 같이 작업 인터페이스를 확장하는 큰 jar 파일입니다. https://stackoverflow.com/a/49220879/8557851

실제로 이 curl 명령을 사용하여 이 code를 실행할 때:

curl -X POST -d '{"kind": "spark","files":["/config.json"],"jars":["/myjar.jar"],"driverMemory":"512M","executorMemory":"512M"}' -H "Content-Type: application/json" localhost:8998/sessions/

code에 관해서는 위에 표시된 답변과 정확히 같습니다.

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에서 작업 실행을 시작하는 것입니다.

  • 답변 # 1

    위에서 @ygeniy가 언급했듯이 문제는 LIVY-636Scala 라이브러리 없이 Jar를 빌드해야 하며 모든 것이 원활하게 작동합니다.

  • 답변 # 2

    저는 livy REST API를 사용했으며 이와 관련하여 스파크 작업을 제출하는 방법에는 2가지가 있습니다. 나머지 API를 참조하십시오 문서, 당신은 공정한 이해 리바이 휴식 요청을 얻을 것입니다.:

    1. 일괄(/batch) :
    요청을 제출하면 작업 ID를 얻습니다. 작업 ID를 기반으로 스파크 작업의 상태를 폴링합니다. 여기에 uber jar와 code 파일을 실행할 수 있는 옵션이 있지만 저는 후자를 사용한 적이 없습니다.

    2. 세션(/sessions/sessions/{sessionId}/statements):
    스파크 작업을 code로 제출하면 uber jar를 만들 필요가 없습니다. 여기에서 먼저 세션을 만들고 이 세션에서 (실제 code)을 실행합니다.

    두 접근 방식 모두에 대해 문서를 확인하면 해당 나머지 요청 및 요청 본문/매개변수에 대한 좋은 설명이 있습니다.

    예시/샘플은 , 여기

    code 수정:

    일괄

    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을 통해 code를 보낼 수 없습니다. 그래서 항아리가 있는 이유는 그 항아리가 작동하도록 하는 방법이었습니다.

    Ahmed Adnane A'mil2021-10-22 13:13:57

    @AhmedAdnaneA'mil: 내가 언급한 접근 방식에서 꽤 명확하다고 생각합니다. uber jar 방식으로 이동하려면 Batch 방식을 참조하고 이에 대한 컬 예제도 제공됩니다.

    kode2021-10-22 13:13:57

    귀하의 의견은 꽤 유익했지만 배치 명령으로도 문제가 발생하는 질문에 대답하지 않습니다. 문제는 jar 파일에 있다고 생각합니다. jar 파일을 컴파일하거나 code를 작성하는 방법에 대한 아이디어

    Ahmed Adnane A'mil2021-10-22 13:13:57

    JAR 파일에 대한 s3 경로를 사용할 수 있습니까?

    yegeniy2021-10-22 15:37:57

    @Kode님 감사합니다. 내 문제가 실제로 [LIVY-636]과 관련된 것으로 밝혀졌습니다. jar 어셈블리에서 스칼라 자체를 생략해야 했습니다.

    yegeniy2021-10-22 15:37:57
  • 이전 python : 조언을 구하는 첫 학교 중간 프로젝트
  • 다음 c++ : free(): 오버로드된 할당 연산자를 호출할 때 tcache 2에서 이중 자유가 감지되었습니다.