python - SparkMagic PySpark3 与 Livy 在 Cloudera 上进行 session

标签 python apache-spark pyspark jupyterhub livy

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

spark session 结束时没有任何有意义的错误,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 环境时会出现此问题。

最佳答案

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

首先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.x.x 开始。

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

最后,所有组件(spark、python 和 livy)均按兼容版本对齐,在我的例子中,这些组件是(相应的 2.4.x、3.6.x、0.7.1),jupyterhub 中的 pyspark session 已使用 python 成功创建3.6.x。

需要记住的几点:

  • 应该在 Cloudera 主机上更新 python
  • 如果 kernel.json 使用“python”命令/别名,请确保“python”别名映射到 Cloudera 主机上的 python 版本 3.6.x
  • 将“python”别名映射到 python 3.6.x 版本,可能会破坏 Cloudera 集群上的内容
  • 无需对 Spark Magic 镜像或 jupytehub 内核进行任何更改

关于python - SparkMagic PySpark3 与 Livy 在 Cloudera 上进行 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68477238/

相关文章:

python - for循环,如果元素不等于值,则替换为空字符串

python - 将特定功能应用于 Spark 数据框中的结构化列的有效方法?

apache-spark - 如何将空数组转换为空数组?

python - 在 python 中可视化 3D 视频序列

python - 推迟代码以供以后在 python 中执行(如 javascript 中的 setTimeout)

python - 为什么python关联映射成员变量在对象之间共享

java - 如何配置连接到 AWS EMR spark 集群的 Java 客户端

python - 无法将 StructField 与 PySpark 一起使用

python - 如何在pyspark数据框中将groupby转换为reducebykey?

scala - 安装 Spline 时出错(Spark 的数据沿袭工具)