首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行pyspark时获取Java输出

运行pyspark时获取Java输出
EN

Stack Overflow用户
提问于 2021-02-02 22:23:15
回答 1查看 134关注 0票数 0

当我在Ubuntu上的Jupyter Notebook中运行PySpark时,我有时会遇到Java失败的问题。我想要看到的是Java端的错误,因为我所能看到的通常是Python的很长的一般性错误,可以总结为:

代码语言:javascript
复制
ERROR:root:Exception while sending command.
Traceback (most recent call last):
  File "/opt/conda/lib/python3.6/site-packages/py4j/java_gateway.py", line 1207, in send_command
    raise Py4JNetworkError("Answer from Java side is empty")
py4j.protocol.Py4JNetworkError: Answer from Java side is empty

这个错误可能意味着很多事情,但它一点帮助都没有。通常这意味着Java崩溃了,但我想知道确切的原因。

我为什么需要这些日志的例子是,例如,我试图在DGX-1机器上的PySpark上运行Rapids,但它在初始化Spark Context时以类似abo的Java崩溃而结束。这不是导致这些错误的唯一原因,但这段代码很容易在我这边导致这些错误。

代码语言:javascript
复制
import pyspark
import os
cudf = "cudf-0.17-cuda10-1.jar"
rapids = "rapids-4-spark_2.12-0.2.0.jar"
script = "getGpuResources.sh"
separator = ","
conf = pyspark.SparkConf()
conf.set("spark.jars",cudf + "," + rapids)
conf.set("spark.plugins","com.nvidia.spark.SQLPlugin")
conf.set("spark.driver.memory","48g")
conf.set("spark.executor.memory","48g")
conf.set("spark.driver.cores","80")
conf.set("spark.executor.cores","80")
conf.set("spark.task.cpus","80")
conf.set("spark.dynamicAllocation.enabled","false")
conf.set("spark.rapids.sql.concurrentGpuTasks","8")
conf.set("spark.dynamicAllocation.enabled","false")
conf.set("spark.sql.extensions","ai.rapids.spark.Plugin")
conf.set("spark.driver.resource.gpu.amount","8")
conf.set("spark.driver.resource.gpu.discoveryScript",script)
conf.set("spark.executor.resource.gpu.amount","8")
conf.set("spark.executor.resource.gpu.discoveryScript",script)
conf.set("spark.task.resource.gpu.amount","8")
sc = pyspark.SparkContext(appName="rapids", conf = conf)

我的问题是:有没有办法以某种方式从pyspark(使用pyspark/jupyter/Ubuntu)运行的Java进程中捕获stdout,从而知道Java崩溃的真正原因?

EN

回答 1

Stack Overflow用户

发布于 2021-02-03 02:31:58

所以这将取决于你是如何运行的。你是刚刚启动pyspark本地模式,还是在集群上运行(纱线,单机等)?

如果您只是指向jupyter并运行"pyspark“-它在本地模式下运行spark。通常,您可以看到从启动pyspark的终端输出的日志。默认的日志模式只有警告。您可以使用以下命令在jupyter notebook中进行更改:

sc.setLogLevel("INFO")

但无论哪种方式,您都应该会看到错误出现。

如果您在本地模式下运行,则应遵循此处的rapids插件的说明:https://nvidia.github.io/spark-rapids/docs/get-started/getting-started-on-prem.html#local-mode

具体地说,Spark在本地模式下不支持gpu调度,所以你应该删除所有这些配置。

我建议在启动命令行时在命令行上指定选项。我在jupyter的本地模式下用pyspark运行了一个快速测试,启动方式是:

pyspark --主local4 --jars cudf-0.18-SNAPSHOT.jar--spark_2.12-0.4.0-SNAPSHOT.jar --conf spark.sql.session.timeZone=UTC --conf spark.plugins=com.nvidia.spark.SQLPlugin --conf spark.rapids.sql.explain="NOT_ON_GPU“

通常,即使是针对yarn和独立模式的部署,我也希望你的驱动程序日志会出现在你启动pyspark的地方,除非你在集群模式下运行,否则在集群上运行的执行器日志可能会在其他地方。

另请注意,此配置对spark-rapids插件无效: conf.set("spark.executor.resource.gpu.amount","8") conf.set("spark.task.resource.gpu.amount","8")该插件仅支持每个执行器1个gpu。

你也不需要任何驱动程序gpus: conf.set("spark.driver.resource.gpu.amount","8"),但如果你想的话也没问题。

如果您有进一步的问题,请随时在spark-rapids repo中提交问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66011608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档