首页 > 解决方案 > 在 Cloudera 上与 Livy 的 SparkMagic PySpark3 会话

问题描述

我正在尝试使用在 Cloudera 集群上运行的 python3 和 Livy 运行 Jupyterhub pyspark 内核会话。

火花会话结束时没有任何有意义的错误,Livy 日志具有以下内容:

21/07/21 12:28:09 INFO yarn.Client: Submitting application application_1621851397242_29173 to ResourceManager
21/07/21 12:28:09 INFO impl.YarnClientImpl: Submitted application application_1621851397242_29173
21/07/21 12:28:09 INFO yarn.Client: Application report for application_1621851397242_29173 (state: ACCEPTED)
21/07/21 12:28:09 INFO yarn.Client:
   client token: N/A
   diagnostics: N/A
   ApplicationMaster host: N/A
   ApplicationMaster RPC port: -1
   queue: root.users.username
   start time: 1626870489430
   final status: UNDEFINED
   tracking URL: http://hostname/proxy/application_1621851397242_29173/
   user: usenname
21/07/21 12:28:09 INFO util.ShutdownHookManager: Shutdown hook called
21/07/21 12:28:09 INFO util.ShutdownHookManager: Deleting directory /tmp/spark-1483a0d9-2a27-4667-94c0-0320c6d2b0fa
21/07/21 12:28:09 INFO util.ShutdownHookManager: Deleting directory /tmp/spark-a0c7670a-a2a1-46f0-bedd-83d0f4ea0086

Livy 运行在 yarn-cluster 模式下,spark2-conf/spark-defaults.conf 添加了如下配置:

spark.yarn.appMasterEnv.PYSPARK_PYTHON=/opt/cloudera/parcels/Anaconda-2020.11/bin/python spark.executorEnv.PYSPARK_PYTHON=/opt/cloudera/parcels/Anaconda-2020.11/bin/python

Anaconda-2020.11 基于 Python 3.8.5(默认,2020 年 9 月 4 日,07:30:14)。

Pyspark kernel.json 有以下配置:

{
  "argv": [
    "python",
    "-m",
    "sparkmagic.kernels.pysparkkernel.pysparkkernel",
    "-f",
    "{connection_file}"
  ],
  "display_name": "PySpark",
  "language": "python"
}

我可能在这里缺少什么配置?我应该使用另一个 jupyterhub 内核吗?

最后要补充的是,在另一个基于 Python 2.7.16 |Anaconda, Inc.| 的 Anaconda 环境中一切正常。(默认,2019 年 3 月 14 日,21:00:58)。当我尝试使用较新的 Anaconda 环境时,会出现此问题。

标签: pythonapache-sparkpysparkjupyterhublivy

解决方案


在这个话题上花了一些时间后,我终于找到了解决方案。

首先 spark、python 和 livy 版本应该是兼容的。

例如,就我而言,我在 Cloudera 上有 spark 2.4.x,这意味着我只能使用 python 3.6.x max。尽管 spark 文档指出 spark 2.4.x 也支持 python 3.8.x,但事实并非如此。Spark 中的 Python 3.8.x 支持从 spark 3.xx 开始

现在对于 livy 还有另一个故事,在撰写此答案时,最新版本的 livy 0.7.1 支持 spark 2.4.x。Livy 0.7.1 和 spark 3.xx 兼容性问题可以通过使用 2.12 版本重新编译 livy scala 代码来绕过。

最后让所有组件(spark、python 和 livy)由兼容版本对齐,在我的情况下是(相应的 2.4.x、3.6.x、0.7.1),jupyterhub 中的 pyspark 会话是使用 python 3.6.x 成功创建的.

要记住几点:

  • python 应该在 Cloudera 主机上更新
  • 如果 kernel.json 使用“python”命令/别名,请确保“python”别名映射到 Cloudera 主机上的 puthon 3.6.x
  • 将“python”别名映射到 python 3.6.x 版本,可能会破坏 Cloudera 集群上的东西
  • spark 魔术图像或 jupytehub 内核无需更改

推荐阅读