由于 python 版本,运行 PySpark DataProc Job 时出错

Posted

技术标签:

【中文标题】由于 python 版本,运行 PySpark DataProc Job 时出错【英文标题】:Error while running PySpark DataProc Job due to python version 【发布时间】:2018-12-27 20:36:40 【问题描述】:

我使用以下命令创建了一个 dataproc 集群

gcloud dataproc clusters create datascience \
--initialization-actions \
    gs://dataproc-initialization-actions/jupyter/jupyter.sh \

但是,当我提交 PySpark 作业时,出现以下错误

异常:worker 中的 Python 3.4 版本与驱动程序 3.7 中的不同,PySpark 无法使用不同的次要版本运行。请检查环境变量 PYSPARK_PYTHON 和 PYSPARK_DRIVER_PYTHON 是否设置正确。

有什么想法吗?

【问题讨论】:

你是否在 Jupyter notebook 的 dataproc 集群上安装了 python? 是的,我在初始化操作中使用 Jupyter 图像 驱动节点上安装的python版本(3.7)与(3.4)上的python版本冲突。因此,请尝试使用 Python(3.4) 安装 Jupyter notebook。 【参考方案1】:

这是由于 master 和 worker 之间的 python 版本不同。默认情况下,jupyter image 安装最新版本的 miniconda,它使用 python3.7。但是,worker 仍然使用默认的 python3.6。

解决方案: - 创建主节点时指定miniconda版本即在主节点安装python3.6

gcloud dataproc clusters create example-cluster --metadata=MINICONDA_VERSION=4.3.30

注意:

可能需要更新以获得更可持续的环境管理解决方案

【讨论】:

【参考方案2】:

我们现在修复了它——感谢@brotich 的中间解决方法。查看#300 中的讨论。

PR #306 将 python 保持在与已安装 (3.6) 相同的版本,并在所有节点上安装包以确保 master 和 worker python 环境保持相同。

作为副作用,您可以通过将参数传递给 conda init 操作来更改 Python 版本来选择您的 Python 版本。例如。 --metadata 'CONDA_PACKAGES="python==3.5"'.

PR #311 将 miniconda 固定到特定版本(当前为 4.5.4),因此我们再次避免此类问题。您可以使用 --metadata 'MINICONDA_VERSION=latest' 来使用始终下载最新 miniconda 的旧行为。

【讨论】:

【参考方案3】:

更新 SPARK 环境以使用 Python 3.7:

打开一个新终端并输入以下命令:export PYSPARK_PYTHON=python3.7 这将确保工作节点使用 Python 3.7(与驱动程序相同)而不是默认的 Python 3.4

根据您拥有的 Python 版本,您可能需要安装/更新 ANACONDA:

(安装见:https://www.digitalocean.com/community/tutorials/how-to-install-anaconda-on-ubuntu-18-04-quickstart)

确保您拥有 anaconda 4.1.0 或更高版本。打开一个新终端并通过在新终端中输入来检查您的 conda 版本:

conda --version

检查 conda 版本

如果您低于 anaconda 4.1.0,请输入 conda update conda

    接下来我们通过键入检查是否有库 nb_conda_kernels

conda list

检查我们是否有nb_conda_kernels

    如果您没有看到nb_conda_kernels,请输入

conda install nb_conda_kernels

安装nb_conda_kernels

    如果您使用的是 Python 2 并想要一个单独的 Python 3 环境,请输入以下内容

conda create -n py36 python=3.6 ipykernel

py35 是环境的名称。你可以随意命名它。

或者,如果您使用的是 Python 3 并想要一个单独的 Python 2 环境,您可以键入以下内容。

conda create -n py27 python=2.7 ipykernel

py27 是环境的名称。它使用 python 2.7。

    确保python版本安装成功并关闭终端。打开一个新终端并输入pyspark。您应该会看到出现的新环境。

【讨论】:

以上是关于由于 python 版本,运行 PySpark DataProc Job 时出错的主要内容,如果未能解决你的问题,请参考以下文章

ipython怎么安装pyspark

Spark实践|如何让CDSW的PySpark自动适配Python版本

如何在 apache toree pyspark notebook 中更改 python 版本?

PySpark任务在YARN集群上运行python 算法

PySpark任务在YARN集群上运行python 算法

使用 Spacy 使用 PySpark 和 Jupyter 解析文本时出错