【问题标题】:Livy-Upload JAR in Driver classpathLivy-在驱动程序类路径中上传 JAR
【发布时间】:2019-09-03 00:08:34
【问题描述】:

我无法使用驱动程序类路径中所需的依赖 JAR 创建生动的交互式会话,使用以下命令:

curl -H "Content-Type: application/json" -X POST -d '{"kind":"pyspark","conf":{"spark.driver.extraClassPath":"/data/XXX-0.0.1-SNAPSHOT.jar"}}' -i http://<LIVY_SERVER_IP:PORT>/sessions

此处的 JAR 文件存在于本地驱动程序路径中。还尝试通过以下方式使用 HDFS 路径hdfs://&lt;NM_IP&gt;:&lt;NM_Port&gt;/data/XXX-0.0.1-SNAPSHOT.jar

以下是尝试创建交互式会话时的实时服务器日志

19/08/12 17:26:56 INFO sessions.InteractiveSessionManager: Registering new session 0
19/08/12 17:26:58 INFO utils.LineBufferedStream: Exception in thread "main" java.lang.NullPointerException
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.livy.rsc.driver.JobWrapper.cancel(JobWrapper.java:90)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.livy.rsc.driver.RSCDriver.shutdown(RSCDriver.java:127)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.livy.rsc.driver.RSCDriver.run(RSCDriver.java:356)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.livy.rsc.driver.RSCDriverBootstrapper.main(RSCDriverBootstrapper.java:93)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at java.lang.reflect.Method.invoke(Method.java:498)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:849)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:167)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:195)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:924)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:933)
19/08/12 17:26:58 INFO utils.LineBufferedStream:        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

但是,当使用相同的 JAR 运行带有批处理 livy 会话的 python 作业时,它会成功完成。下面提到的是命令:

curl -H "Content-Type: application/json" -X POST --data '{"file": "/data/test.py", "conf": {"spark.driver.extraClassPath":"/data/XXX-0.0.1-SNAPSHOT.jar"}}'  http://<LIVY_SERVER_IP:PORT>/batches

python 文件 /data/test.py 存在于 HDFS 路径上。

我已尝试通过修改livy.conf 文件将目录路径列入白名单,并进行以下更改livy.file.local-dir-whitelist = /data/

【问题讨论】:

    标签: livy


    【解决方案1】:

    Livy Interactive 会话是两步过程。创建会话时文件需要在 HDFS 中。

    1. 创建交互式会话
    2. 使用会话 ID 执行语句。

      curl -X POST --data '{"kind": "pyspark", "pyFiles" : ["/some hdfs location/splitter.py"]}' -H "Content-Type: application/json" - H "X-Requested-By: root"http://localhost:8999/sessions

    请参考::https://livy.apache.org/examples/

    https://community.hortonworks.com/questions/191738/invoke-livy-with-pyfiles-attribute.html

    【讨论】:

    • 虽然它适用于 pyFiles,但我担心spark.driver.extraClasspath 需要包含一些 JAR。如何提供此 JAR 以及创建会话时的位置?尝试使用 HDFS 位置以及驱动程序机器上的本地位置。
    • 尝试使用 jars 选项 curl -X POST --data '{"kind": "pyspark", "pyFiles" : ["/some hdfs location/splitter.py"],'jars': ['file:///path/to/foo.jar']}' -H "Content-Type: application/json" -H "X-Requested-By: root "localhost:8999/sessions
    • 尝试了以下命令:curl -H "Content-Type: application/json" -X POST -d '{"kind":"pyspark","jars":["file:///XXX.jar"]}}' -i http://&lt;IP&gt;:&lt;PORT&gt;/sessions,但仍然没有运气。另外,这是一个交互式会话,所以我们真的需要 pyFiles 参数吗?
    • 我想使用 Livy 交互式会话而不是批处理运行 Spark 作业,可以这样做吗?我在本地系统上有 JAR,并在独立中使用 livy。
    猜你喜欢
    • 2016-05-24
    • 2014-08-21
    • 2011-03-30
    • 2016-07-21
    • 2019-11-17
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    相关资源
    最近更新 更多