如何在谷歌的 dataproc pyspark 上运行 python3

Posted

技术标签:

【中文标题】如何在谷歌的 dataproc pyspark 上运行 python3【英文标题】:How to run python3 on google's dataproc pyspark 【发布时间】:2018-02-01 07:03:24 【问题描述】:

我想通过 Google Cloud Platform dataproc 运行 pyspark 作业,但我不知道如何设置 pyspark 以默认运行 python3 而不是 2.7。

我能找到的最好的就是添加这些initialization commands

但是,当我 ssh 进入集群时 (a)python命令还是python2, (b) 由于 python 2 不兼容,我的工作失败了。

我已经尝试在我的 init.sh 脚本中卸载 python2 和别名 alias python='python3',但是很遗憾,没有成功。别名似乎没有保留。

我这样创建集群

cluster_config = 
    "projectId": self.project_id,
    "clusterName": cluster_name,
    "config": 
        "gceClusterConfig": gce_cluster_config,
        "masterConfig": master_config,
        "workerConfig": worker_config,
        "initializationActions": [
            [
            "executableFile": executable_file_uri,
            "executionTimeout": execution_timeout,
        ]
        ],
    


credentials = GoogleCredentials.get_application_default()
api = build('dataproc', 'v1', credentials=credentials)

response = api.projects().regions().clusters().create(
    projectId=self.project_id,
    region=self.region, body=cluster_config
).execute()

我的executable_file_uri 位于谷歌存储; init.sh:

apt-get -y update
apt-get install -y python-dev
wget -O /root/get-pip.py https://bootstrap.pypa.io/get-pip.py
python /root/get-pip.py
apt-get install -y python-pip
pip install --upgrade pip
pip install --upgrade six
pip install --upgrade gcloud
pip install --upgrade requests
pip install numpy

【问题讨论】:

【参考方案1】:

我找到了here 的答案,因此我的初始化脚本现在看起来像这样:

#!/bin/bash

# Install tools
apt-get -y install python3 python-dev build-essential python3-pip
easy_install3 -U pip

# Install requirements
pip3 install --upgrade google-cloud==0.27.0
pip3 install --upgrade google-api-python-client==1.6.2
pip3 install --upgrade pytz==2013.7

# Setup python3 for Dataproc
echo "export PYSPARK_PYTHON=python3" | tee -a  /etc/profile.d/spark_config.sh  /etc/*bashrc /usr/lib/spark/conf/spark-env.sh
echo "export PYTHONHASHSEED=0" | tee -a /etc/profile.d/spark_config.sh /etc/*bashrc /usr/lib/spark/conf/spark-env.sh
echo "spark.executorEnv.PYTHONHASHSEED=0" >> /etc/spark/conf/spark-defaults.conf

【讨论】:

如何编辑 [datalab.sh][github.com/GoogleCloudPlatform/dataproc-initialization-actions/… 脚本以包含 python3 支持? @Pablo,您引用的链接现已损坏。 为了后代,大港的答案(升级到Dataproc 1.4)现在是正确的答案。【参考方案2】:

Configure the Dataproc cluster's Python environment详细解释。基本上,在 1.4 之前需要 init 操作,默认是 Python3 from Miniconda3 in 1.4+。

【讨论】:

【参考方案3】:

您还可以使用 Conda init 操作来设置 Python 3 并选择安装 pip/conda 包:https://github.com/GoogleCloudPlatform/dataproc-initialization-actions/tree/master/conda。

类似:

gcloud dataproc clusters create foo --initialization-actions \ gs://dataproc-initialization-actions/conda/bootstrap-conda.sh,gs://dataproc-initialization-actions/conda/install-conda-env.sh

【讨论】:

【参考方案4】:

有几种方法可以为 pyspark 选择 python 解释器。

1.如果要将python3设置为默认值,请在创建dataproc集群时设置export PYSPARK_PYTHON=python3。我在初始化脚本中添加了一些代码。

sudo echo "export PYSPARK_PYTHON=python3" | sudo tee -a /etc/profile.d/effective-python.sh
source /etc/profile.d/effective-python.sh

2.否则也可以通过--properties 指定python 版本,以便在将pyspark 作业提交到dataproc 集群时使用。 python版本可以通过以下方式传递:

 --properties spark.pyspark.python=python3.7,spark.pyspark.driver=python3.7

【讨论】:

以上是关于如何在谷歌的 dataproc pyspark 上运行 python3的主要内容,如果未能解决你的问题,请参考以下文章

如何使一个动态导入命令从一个表到另一个在谷歌的表

向 dataproc 集群提交 pyspark 作业时出错(找不到作业)

Dataproc Pyspark 作业仅在一个节点上运行

如何提交依赖于 google dataproc 集群的 pyspark 作业

Dataproc 上的 PySpark 因 SocketTimeoutException 而停止

小米OV会采用鸿蒙系统?在谷歌的压力下未必敢用!