【问题标题】:Dataproc + python package: Distribute updated versionsDataproc + python 包:分发更新版本
【发布时间】:2016-03-12 17:11:38
【问题描述】:

目前我正在 Google DataProc 上开发 Spark 应用程序。我经常需要更新 Python 包。在配置期间,我运行以下命令:

echo "Downloading and extracting source code..."
gsutil cp gs://mybucket/mypackage.tar.gz ./
tar -xvzf mypackage.tar.gz
cd ./mypackage

echo "Installing requirements..."
sudo apt-get install -y python-pip
python setup.py install

但是,在集群内分发更新包最有效的方法是什么?是否已经内置了任何自动化功能(例如 Chef)?

目前,我做两件不同的事情:部署和引导一个新集群(需要时间)或 SSH 到每个节点,然后复制并安装更新的包。

【问题讨论】:

    标签: python packaging google-cloud-dataproc


    【解决方案1】:

    通常,使用初始化操作部署新集群是首选方法,因为如果您需要克隆新集群、更改更基本的机器或区域设置,或者以防意外破坏以凌乱的方式现有的集群。与基于 SSH 的配置相比,它还可以确保为所有已安装的软件提供最新补丁,并且可以很好地动态扩展/缩小集群。

    也就是说,修改现有集群,你也可以尝试使用bdutil,恰好兼容Dataproc的实例命名,只要你不使用任何抢占式worker(但这不是官方的保证永远如此)。它将提供一种方便的方式来通过 SSH 在所有节点上运行命令,并在失败时收集一些有用的错误消息:

    CLUSTER=<dataproc-cluster-name>
    PROJECT=<Google project you used to create the Dataproc cluster>
    BUCKET=<mybucket>
    ZONE=<dataproc cluster zone, like us-central1-f>
    NUM_WORKERS=<number of workers in dataproc cluster>
    
    # Run "sudo apt-get install -y python-pip" on all nodes
    ./bdutil -P ${CLUSTER} -p ${PROJECT} -b ${BUCKET} -z ${ZONE} -n ${NUM_WORKERS} \
        run_command -t all -- "sudo apt-get install -y python-pip"
    

    您也可以使用-t master 仅在主节点上运行某些东西,或使用-t workers 仅在工作节点上运行。

    【讨论】:

    • 这有帮助。谢谢。
    【解决方案2】:

    初始化操作会起作用吗? https://cloud.google.com/dataproc/init-actions

    【讨论】:

    • 上面的代码已经按照文档中描述的初始化运行。
    猜你喜欢
    • 2019-09-25
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多