由于 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 时出错的主要内容,如果未能解决你的问题,请参考以下文章
Spark实践|如何让CDSW的PySpark自动适配Python版本